-------------------------------------------------------------------------------- 739538afd8 | David Lawrence Ramsey | 2024-04-06 21:35:00 -0500 Fix comment. -------------------------------------------------------------------------------- 30c33ebcab | David Lawrence Ramsey | 2024-04-06 21:34:04 -0500 Add a gizmo adjective and noun. -------------------------------------------------------------------------------- 4a80058b82 | 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. -------------------------------------------------------------------------------- d49a5c60f5 | Nicholas Feinberg | 2024-04-06 16:22:20 -0700 Fix a confusing message (Silurio) -------------------------------------------------------------------------------- c671339a80 | 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. -------------------------------------------------------------------------------- 8e5f33bbaa | Kyle Rawlins | 2024-04-05 16:46:38 -0400 fix: sanitize sanity check -------------------------------------------------------------------------------- 8f8f606f09 | 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. -------------------------------------------------------------------------------- ab96632d6e | 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. -------------------------------------------------------------------------------- 2ec9e35ba7 | David Lawrence Ramsey | 2024-04-05 13:44:59 -0500 Fix underline. -------------------------------------------------------------------------------- d9e1bd76a7 | David Lawrence Ramsey | 2024-04-05 09:54:16 -0500 Adjust a comment. -------------------------------------------------------------------------------- 36d3288a94 | Monkooky | 2024-04-05 09:53:43 -0500 Remove unused areaprops -------------------------------------------------------------------------------- b4fc452618 | 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. -------------------------------------------------------------------------------- 99e313a671 | 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. -------------------------------------------------------------------------------- 30fb1b0edc | DracoOmega | 2024-04-04 22:34:18 -0230 Don't let Coglins equip jewellery when polymorphed (ragingrage) -------------------------------------------------------------------------------- eb5ba95c15 | 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. -------------------------------------------------------------------------------- 7811c86cf0 | 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) -------------------------------------------------------------------------------- 90b412cebd | 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. -------------------------------------------------------------------------------- 686ce31a6c | 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) -------------------------------------------------------------------------------- c89641f149 | NormalPerson7 | 2024-04-03 23:53:14 +0300 Don't show MPRegen line on % screen for djinn -------------------------------------------------------------------------------- e5cd51f897 | wheals | 2024-04-03 23:51:52 +0300 Fix red draconians in dragon form having two breath abilities (#3750) Fixes #3750 -------------------------------------------------------------------------------- f85d74f360 | David Lawrence Ramsey | 2024-04-02 20:00:54 -0500 Ban Zin's artefacts from having the chaos brand. -------------------------------------------------------------------------------- 40b700cd64 | David Lawrence Ramsey | 2024-04-02 19:41:42 -0500 Limit Ignis' artefact weapons to flaming brand. -------------------------------------------------------------------------------- c41d80381e | David Lawrence Ramsey | 2024-04-02 15:50:36 -0500 Rename gui/spells/poison to gui/spells/alchemy. -------------------------------------------------------------------------------- 59293ed448 | Nicholas Feinberg | 2024-04-02 13:47:36 -0700 Fix: catch a few more strays (Ge0ff) -------------------------------------------------------------------------------- 7cf571d63e | 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. -------------------------------------------------------------------------------- 8ce7b1ec60 | Nicholas Feinberg | 2024-04-02 12:51:14 -0700 Fix: bring stray lajatangs back to the fold (Ge0ff) Remove stray pixels. -------------------------------------------------------------------------------- 7c90f283a1 | yrdzrfxndfvh | 2024-04-02 12:44:28 -0500 add cardinal to rand_wpn -------------------------------------------------------------------------------- 41c5271027 | 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) -------------------------------------------------------------------------------- 90097df4a3 | 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. -------------------------------------------------------------------------------- 3c7185120d | 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) -------------------------------------------------------------------------------- 00f42548a0 | 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. -------------------------------------------------------------------------------- 55d883d9c5 | 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. -------------------------------------------------------------------------------- 66197389d5 | 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!) -------------------------------------------------------------------------------- 6f7e3dd176 | DracoOmega | 2024-04-01 18:07:37 -0230 Don't apply Gell's Gavotte to the other side of glass -------------------------------------------------------------------------------- a0139969d6 | DracoOmega | 2024-04-01 18:07:37 -0230 Try harder not to give ghosts Gell's Gravitas -------------------------------------------------------------------------------- 4be4bdcb63 | 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. -------------------------------------------------------------------------------- 730d1222b3 | David Lawrence Ramsey | 2024-04-01 13:06:03 -0500 Add another flower name to artefacts. -------------------------------------------------------------------------------- cfddb08e57 | David Lawrence Ramsey | 2024-03-30 20:07:42 -0500 Fix reference to Margery in Maggie's speech. -------------------------------------------------------------------------------- 23b751d0ae | SentientSupper | 2024-03-30 16:42:58 -0500 Refactored randart staves tile fix (Ge0ff) -------------------------------------------------------------------------------- d694a166fc | 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. -------------------------------------------------------------------------------- 3df4fa4a82 | David Lawrence Ramsey | 2024-03-30 16:27:07 -0500 Fix typo. -------------------------------------------------------------------------------- 59262bdc9b | 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. -------------------------------------------------------------------------------- e202e49faa | 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. -------------------------------------------------------------------------------- 877066f4b4 | 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(). -------------------------------------------------------------------------------- f73ac73325 | 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. -------------------------------------------------------------------------------- 153ae1a8d6 | 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 -------------------------------------------------------------------------------- 107c3107db | 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. -------------------------------------------------------------------------------- 0cd9e5b168 | Wizard Ike | 2024-03-27 22:59:06 -0230 Fix jinxbite doing extra attacks -------------------------------------------------------------------------------- b5af3dc018 | yrdzrfxndfvh | 2024-03-27 20:25:49 -0500 add Charlatan's Orb to shop of orbs -------------------------------------------------------------------------------- c35c0dd17b | 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. -------------------------------------------------------------------------------- 1478e51eec | 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] -------------------------------------------------------------------------------- a0577c09bc | 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. -------------------------------------------------------------------------------- 165e151e72 | wheals | 2024-03-28 00:29:54 +0200 fix: crash on loading a coglin with ring of flight (#3728) Fixes #3728 -------------------------------------------------------------------------------- e9ae430426 | David Lawrence Ramsey | 2024-03-27 11:33:36 -0500 Allow memorising Piledriver v/no targets (#3737). -------------------------------------------------------------------------------- b0a091d592 | David Lawrence Ramsey | 2024-03-27 00:16:01 -0500 Fix spelling. -------------------------------------------------------------------------------- 2009358679 | David Lawrence Ramsey | 2024-03-27 00:02:06 -0500 Fix wording. -------------------------------------------------------------------------------- 58459ad016 | David Lawrence Ramsey | 2024-03-26 23:42:36 -0500 Fix indentation. -------------------------------------------------------------------------------- 05aacc5516 | DracoOmega | 2024-03-27 00:57:51 -0230 Fix typo (ragingrage) -------------------------------------------------------------------------------- adc223dc64 | David Lawrence Ramsey | 2024-03-26 22:18:46 -0500 Fix spelling. -------------------------------------------------------------------------------- 4c6cd3ffef | 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. -------------------------------------------------------------------------------- e0dfd15e89 | DracoOmega | 2024-03-27 00:13:16 -0230 Shuffle new spells into books (And swap out Warper Manifold Assault for Piledriver) -------------------------------------------------------------------------------- b106c4ab2c | DracoOmega | 2024-03-27 00:13:16 -0230 Make Piledriver display damage in a more maintainable way -------------------------------------------------------------------------------- 24355c9986 | 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. -------------------------------------------------------------------------------- e52afbec85 | 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. >.> -------------------------------------------------------------------------------- 90288d38ae | 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) -------------------------------------------------------------------------------- d8d983544c | 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) -------------------------------------------------------------------------------- 8d86919e2e | 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) -------------------------------------------------------------------------------- e6577ed3b2 | 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) -------------------------------------------------------------------------------- 583ece5c49 | 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) -------------------------------------------------------------------------------- 9d3c0f8a62 | SentientSupper | 2024-03-27 00:12:52 -0230 Describe spellpower effects on IMB and Gell's -------------------------------------------------------------------------------- 4c2c1c8b4a | SentientSupper | 2024-03-27 00:12:52 -0230 Describe collision damage for spells This includes gravitas and IMB. -------------------------------------------------------------------------------- bbb8fdbe59 | 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 -------------------------------------------------------------------------------- 4648e6c457 | David Lawrence Ramsey | 2024-03-25 19:57:53 -0500 Fix spelling. -------------------------------------------------------------------------------- 1216c0e361 | David Lawrence Ramsey | 2024-03-25 19:56:40 -0500 Fix typo. -------------------------------------------------------------------------------- 4d5e64a94f | 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.] -------------------------------------------------------------------------------- f1ef24bf73 | 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.] -------------------------------------------------------------------------------- 8d3e27d251 | 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. -------------------------------------------------------------------------------- 410066aba4 | 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. -------------------------------------------------------------------------------- 5ca9e1acf1 | 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. -------------------------------------------------------------------------------- eaf45d8e21 | SentientSupper | 2024-03-24 21:29:40 -0700 Describe mindburst and pain damage In monster spell description. [Committer's note: refactored.] Closes #3709. -------------------------------------------------------------------------------- 4b62edca99 | Nicholas Feinberg | 2024-03-24 21:21:26 -0700 Fix: remove fired missiles From the docs. (Since ranged weapons no longer use ammo.) -------------------------------------------------------------------------------- 0a3110eadd | Nicholas Feinberg | 2024-03-24 21:20:31 -0700 Update drop_disables_autopickup docs -------------------------------------------------------------------------------- ac1af34cca | 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. -------------------------------------------------------------------------------- 984978c3b2 | SentientSupper | 2024-03-24 21:18:36 -0700 Add zot.cc to vcxproj -------------------------------------------------------------------------------- 65f7d67da1 | 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.) -------------------------------------------------------------------------------- aba3a3cf60 | 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. -------------------------------------------------------------------------------- 29eef4237d | 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. -------------------------------------------------------------------------------- 4cabd7605a | 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. -------------------------------------------------------------------------------- 0e82a1035d | 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. -------------------------------------------------------------------------------- 6c632cbfbc | 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.) -------------------------------------------------------------------------------- 74a9d55e41 | 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. -------------------------------------------------------------------------------- d708a3a1bf | David Lawrence Ramsey | 2024-03-24 14:12:44 -0500 Add Charlatan's Orb status description. -------------------------------------------------------------------------------- 456b196249 | 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. -------------------------------------------------------------------------------- f510db4c87 | David Lawrence Ramsey | 2024-03-24 14:12:44 -0500 Make the Charlatan's Orb actually glow. -------------------------------------------------------------------------------- 240068c231 | 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.] -------------------------------------------------------------------------------- b728d0252e | David Lawrence Ramsey | 2024-03-22 22:57:31 -0500 Fix capitalisation. -------------------------------------------------------------------------------- 74ea0c1b11 | David Lawrence Ramsey | 2024-03-22 22:38:21 -0500 Fix comment typo. -------------------------------------------------------------------------------- 4c8b870234 | 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. -------------------------------------------------------------------------------- 315f82d515 | David Lawrence Ramsey | 2024-03-22 06:32:58 -0500 Fix punctuation. -------------------------------------------------------------------------------- 0968bab981 | 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. -------------------------------------------------------------------------------- 41daaf438a | Kyle Rawlins | 2024-03-21 12:40:57 -0400 fix: missing `self.` -------------------------------------------------------------------------------- c80f89d3a0 | 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.... -------------------------------------------------------------------------------- 06071df075 | 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. -------------------------------------------------------------------------------- 7a0cf5b9ff | Kyle Rawlins | 2024-03-21 12:37:09 -0400 fix: improve logging message -------------------------------------------------------------------------------- 68839bf7ff | 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. -------------------------------------------------------------------------------- 8da92d5247 | David Lawrence Ramsey | 2024-03-21 09:16:09 -0500 Remove now-unused now_is_morning() function. -------------------------------------------------------------------------------- 23d0647428 | 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. -------------------------------------------------------------------------------- 524b7c7fd8 | Kyle Rawlins | 2024-03-21 09:24:50 -0400 fix: quiet a dgl-build-specific warning -------------------------------------------------------------------------------- 766f10fcc8 | SentientSupper | 2024-03-21 08:18:37 -0500 Clear dimensional bullseye when apostle yields Include ENCH_BULLSEYE_TARGET in timeout_enchantments. -------------------------------------------------------------------------------- 4d9a32fa43 | 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. -------------------------------------------------------------------------------- 303fdf7e8e | 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. -------------------------------------------------------------------------------- b0e0dd98ef | David Lawrence Ramsey | 2024-03-21 07:53:24 -0500 Remove Jiyva's no-hurting-jellies conduct. -------------------------------------------------------------------------------- 93c155cd69 | 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. -------------------------------------------------------------------------------- a5f95a5a20 | 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. -------------------------------------------------------------------------------- 95e1662365 | David Lawrence Ramsey | 2024-03-20 19:44:27 -0500 Fix punctuation. -------------------------------------------------------------------------------- fa783ce77f | David Lawrence Ramsey | 2024-03-20 14:11:40 -0500 Fix monster info bot compilation (Ge0ff) -------------------------------------------------------------------------------- ee37984d8d | David Lawrence Ramsey | 2024-03-20 12:13:11 -0500 Remove prototype of nonexistent function. -------------------------------------------------------------------------------- 5c25360fe0 | David Lawrence Ramsey | 2024-03-20 11:51:25 -0500 Fix spacing. -------------------------------------------------------------------------------- 7cbadc2d6b | 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. -------------------------------------------------------------------------------- b59af49cd9 | David Lawrence Ramsey | 2024-03-20 11:41:03 -0500 Constify variable. -------------------------------------------------------------------------------- f47b1a0506 | 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.) -------------------------------------------------------------------------------- 3d70bf0cf2 | 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. -------------------------------------------------------------------------------- fc315c9ecd | wheals | 2024-03-19 22:46:22 +0200 fix: the build -------------------------------------------------------------------------------- 60f1b215fc | 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. -------------------------------------------------------------------------------- c76ea14763 | 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`. -------------------------------------------------------------------------------- 9ed4220b88 | 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. -------------------------------------------------------------------------------- 50abb8ab99 | Kyle Rawlins | 2024-03-19 14:44:33 -0400 fix: missing tuple wrapper Also, slightly tweak default config -------------------------------------------------------------------------------- 3ef9c6c661 | David Lawrence Ramsey | 2024-03-19 11:12:09 -0500 Fix punctuation. -------------------------------------------------------------------------------- 234660e9f1 | David Lawrence Ramsey | 2024-03-19 11:11:19 -0500 Fix wording. -------------------------------------------------------------------------------- 5d9b134aa6 | 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. -------------------------------------------------------------------------------- 829d17d61b | 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. -------------------------------------------------------------------------------- b001dabdc7 | 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. -------------------------------------------------------------------------------- d9b930ba1b | Kyle Rawlins | 2024-03-19 10:14:53 -0400 fix: missing comma -------------------------------------------------------------------------------- dd6cb82677 | 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 -------------------------------------------------------------------------------- 362cfcae2a | 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. -------------------------------------------------------------------------------- a6a9c15173 | 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.] -------------------------------------------------------------------------------- ec90db9d9c | regret-index | 2024-03-18 23:54:01 -0230 Throw together a placeholder Permafrost Explosion tile. Mixes together the original RLTiles icon for Shatter, roctavian's icons for Bolt of Cold and Ozocubu's Refridgeration, and ontoclasm's icon for Hailstorm. Should at least emphasize it's an earth spell alongside ice. -------------------------------------------------------------------------------- 03d5c24375 | regret-index | 2024-03-18 23:54:01 -0230 Decorative boulders -> decorative piles of debris There's been some consternation around the use of unmoving decorative boulders in d9500d9. They list a speed if they actually moved (the speed of BBB's use of the boulder) but don't move in and of themselves, and they also show up in the monster list (because for some reason this isn't innate to firewood). Outside of lingering implementation issues, they're awkwardly not quite as difficult to destroy as bushes but still require manual effort compared to the withering away of plants. They also collected a fairly large amount of confusion and paranoia about them being made to roll in some trap function or another, and while I'd like all of Crawl's unique vault traps to rely on pressure plates eventually (c.f. e446cd8), players will always have some confusion attached to such a re-use. As such, I am replacing most of their uses with an entirely different decorative feature altogether, to fulfill and further extend some of the same spirit of earthen decor beyond different wall and statue tiles or yet more and more piles of large rocks items and stone items around. Piles of debris are meant to fulfill a immotile non-living rubble and ruin position, akin to the expanded uses of pillars of salt. They behaves mostly like plants (in that they will die several turns after being first hit), with some minor tweaks. They have 40% of plant HP but light omniresistance and non-zero AC, which makes it somewhat more plausible for them to be destroyed advance of such collapsing if one can work around those defenses. They count as amphibious, so they can be placed in deep water in vaults for e.g. Shoals and Swamp. Finally, they also collapse into dust (sidestepping the inquiries about it dropping stones or large rocks), which also means a brief cloud of sparse dust when it's destroyed akin to chaos spawn and simulacra. Hopefully, adding what is essentially another type of rare firewood that more specifically implies wrecked ruins rather than overgrown ones shouldn't raise the same issues re-using spell boulders did. Their name and description are ironically enough somewhat up in the air: I'm somewhat dissatisfied with both, and other devs may find-replace a better name as long as the intent of "half-broken stonework" survives. The tiles use a mix of the RLTiles earth magic spell icons (Sandblast, Passwall, LRD, Shatter) and PleasingFungus's original placeholder tile for rockslimes. Possibly some recolours would be reasonable for making them fit into Slime or Desolation too, though I'm a little cautious about spreading firewood a little too far in the broader scope of things. -------------------------------------------------------------------------------- 9ccf1647ab | regret-index | 2024-03-18 23:54:01 -0230 New Mines enemy: obsidian bat Obsidian bats in both name and form are meant to further emphasize the cave parts of the Orcish Mines, as well as emphasis the varied demonic threat attached to both orc high priests and orc sorcerers. Aside from these fits, they're also meant to punish how it's regularly easy (and slow) to flee across the Orc:$ level away from the endvault unless a summoner rolls the faster demons, a sorcerer rolls on paralysis, or the player's actually weak enough to care much about (even post-buff) wargs post-Lair. They're non-living faceless bats with rF++ that have a derivative of the broodmother special- a AF_HELL_HUNT that summons either hell hounds or hell rats on hit 66% of the time, capped at 3 out at once. They're quite a ways weaker than broodmothers otherwise- in stats and damage somewhere between unseen horrors and wargs, or possibly a blink frog band with heavy resists if the player has no EV. Still, by being batty, they regularly step away from the player to let their summons get in the way, a distinguishing feature for a summoner that will probably also rather vex players. Their defenses are probably their most notable feature- with passable AC and EV on top of resists- but by the time one enters Orc a god or floor drops should allow even alchemists to have some other option when facing them. These spawn alone by themselves, taking a small chunk out of wargs as we currently can't adjust due to CCF and ogres as people see plenty of much earlier than Orc. (Possibly we should consider lowering Orc's monster count the same way Lair does to handle the two new Orc enemies being a little stronger than the average normal spawn.) A couple of thematically appropriate demonic and lava orc vaults and ends place them, one of the Volcano sets uses them on rare occasion, and they take yet another (much smaller) slice out of Abyss abominations. Since we've got a lot of demons already, I'd prefer these to stay relatively early and fire-centered rather than used freely in most other vaults otherwise- anything that escaped out of Hell from which pours out Hell itself should be a little special. Their tile is by Sastreii. -------------------------------------------------------------------------------- a2165e0cdb | regret-index | 2024-03-18 23:54:00 -0230 Recentish tile / decor adjustments * Porkolator: A border fix plus hex sparkles so it's not just A Pig. * Fathomless Shackles: Chain tweaks to emphasize their size in contrast to the smaller chains of Bind Soul. * Canine Familiar: A quick recolour to use the inugami's palette. * Coglin Gizmos: Chroma adjustments to help move the purple-pink-red options away from one another. * Scintillating statues: Animate them far less often, and tweak a placement, since they're evidently very distracting as entirely decorative features. -------------------------------------------------------------------------------- 281c7690d9 | regret-index | 2024-03-18 23:54:00 -0230 Another small vault batch Really should clean out more of my drafts files at some later point. * Two Abyss entries, with thematically appropriate and Depths appropriate spawns, meant to vary up Abyss entries since mostly don't have enemies attached to them compared to the Pan and Hells entries. * A decorative Snake vault, trying to help reach the higher Snake decor count needed to make them always appear on Snake:$ to help vary up those floors more tangibly. * A couple more removed vault layouts revamped for other uses. A volcano layout used for a game-wide fire and earth vault, a dwarf vault used for another misc_elf_vault, and a Zotdef layout used for a Zot stairs vault. Would be nice to convert another two layouts of Zotdef into stair vaults with the same monster set set-up, eventually. -------------------------------------------------------------------------------- 33df2375a9 | Kyle Rawlins | 2024-03-18 18:04:48 -0400 fix: various issues with webtiles idle timers Since sometime around 2a3aa404fa2d, the play idle timer has been broken. The issue is essentially race conditions in checking whether a game has actually started/stopped, where the idle timer was reset during game startup but before it had fully started. This commit should make both timers work in a way that is more robust to this issue. The other problem is that 2a3aa404fa2d seems to have assumed that the connection life check was only happening during play, which was incorrect. This lets it work in the lobby, while spectating, and during play again. The overall implementation is still somewhat painful, because no time is really tracked in the lobby; possibly it should be. I also changed the semantics of `max_lobby_idle_time` to match `max_idle_time` a little better. -------------------------------------------------------------------------------- 4004213054 | Kyle Rawlins | 2024-03-18 14:58:34 -0400 fix: remove debug code -------------------------------------------------------------------------------- ce6887170d | Kyle Rawlins | 2024-03-18 14:48:17 -0400 refactor: modernize/fix webtiles signal handling The Tornado 6.4 release notes say: "`IOLoop.add_callback_from_signal` is suspected to have been broken since Tornado 5.0 and will be removed in version 7.0. Use `asyncio.loop.add_signal_handler` instead." This commit is a direct reaction to that; we've certainly had some pretty flaky shutdown behavior with the existing approaches. To update the signal handlers with this suggestion, a bunch of other changes were necessary: * Move all callback setup into an async function, start the ioloop with an asyncio call. This is Tornado's current recommended approach, so really this is a long-needed modernization. * separate socket binding (non-async) from tornado server startup (async) * it's no longer safe to directly call IOLoop.current().stop(); the means of triggering shutdown is therefore converted to (i) an Event that waits for sockets to close (fixing some other issues with the previous approach), and then (ii) code that cancels remaining tasks if this takes too long. * a bunch of old back-compat is removed. This patch is relatively conservative, but does definitely assume asyncio. This patch is still really far from any sort of asyncio conversion; nothing except the main server start function is async. -------------------------------------------------------------------------------- 1b414cbff7 | Kyle Rawlins | 2024-03-18 14:01:07 -0400 refactor: update stale lock code This modernizes this code a little bit for python 3, and also checks for the existence of the process first before prompting the user about "stale processes". When a server is force-shudown via kill -9, lockfiles aren't cleared, and the previous version wouldn't actually check if the pid was real until the 10s prompt had elapsed. -------------------------------------------------------------------------------- 0f6f1dd4b9 | SentientSupper | 2024-03-17 21:25:21 -0700 Fix cursed item background not being red In local tiles. Should be fine for ISFLAG_CURSED to be included in get_item_known_info now that the only source of curses is ash. Closes #3683 -------------------------------------------------------------------------------- b0416c464d | SentientSupper | 2024-03-17 21:18:08 -0700 Display chance for wand of warping to blink When targeting. -------------------------------------------------------------------------------- 00dc8146b4 | David Lawrence Ramsey | 2024-03-17 20:26:36 -0500 Fix spelling. -------------------------------------------------------------------------------- fba4d74c8c | Nicholas Feinberg | 2024-03-17 15:38:37 -0700 Update CREDITS for bjo* Per request: https://github.com/crawl/crawl/pull/3688#issuecomment-2002327035. -------------------------------------------------------------------------------- 77bb6d37f3 | SentientSupper | 2024-03-17 15:36:58 -0700 Show undead players as immune to polymorph -------------------------------------------------------------------------------- 5810ea11cc | SentientSupper | 2024-03-17 15:36:58 -0700 Show player as immune to charming with clarity -------------------------------------------------------------------------------- 903ea0f9b0 | Aliscans | 2024-03-17 15:36:02 -0700 Correct how the display_char option handles gems and gold. DCHAR_ITEM_GOLD and DCHAR_ITEM_GEM were in a different order in dchar_names[] (used by the "display_char" option) to the one in dungeon_char_type, meaning that the option had unexpected effects. Fix this, and add item_gem to the docs for this option. -------------------------------------------------------------------------------- 2cddf732a9 | DracoOmega | 2024-03-17 20:04:31 -0230 Fix a crash with ending constriction after level transit If the constricted actor no longer existed, it would try to dereference a null pointer. There's already checks deeper down to prevent the mid of an nonexistant actor from doing things. -------------------------------------------------------------------------------- 6b6a0ea73c | David Lawrence Ramsey | 2024-03-17 15:05:24 -0500 Refactor Upheaval/Disaster Area's target skips. Both will now properly skip over all targets they're harmless to. (Before this, aiming Upheaval directly at a target it shouldn't damage would damage it regardless, whether yourself or an elemental force.) -------------------------------------------------------------------------------- 1cb27b7edc | David Lawrence Ramsey | 2024-03-17 15:05:24 -0500 Disable prompt when self-aiming Upheaval. Since it's supposed to be harmless to you. -------------------------------------------------------------------------------- 8d7d3c4e6d | David Lawrence Ramsey | 2024-03-17 15:05:24 -0500 Constify variable. -------------------------------------------------------------------------------- c677e9a310 | David Lawrence Ramsey | 2024-03-17 15:05:24 -0500 Readd the Disaster Area radius limitation. So it doesn't always blast everything in LOS. -------------------------------------------------------------------------------- e6bea51fa9 | Monkooky | 2024-03-17 15:05:24 -0500 Remove Upheaval friendly fire Makes Upheaval (and consequently Disaster area) do no damage to Elemental Forces. Other allies are still affected, for thematic and consistency reasons. -------------------------------------------------------------------------------- 6ff4911247 | Kyle Rawlins | 2024-03-17 12:35:50 -0400 fix: remove 3.12 from ci webserver testing Unfortunately, pinned versions fro 3.8 are broken in 3.12 because of package deprecation. I don't think our current version management for these tests is a very good approach, but I don't have a fix right now. So, temporarily disable 3.12 altogether. These tests currently don't do much so it shouldn't be a big deal. -------------------------------------------------------------------------------- 14b72cc9fe | Kyle Rawlins | 2024-03-17 12:33:09 -0400 fix: further update webtiles tests It seems that these tests weren't updated when webtiles code was refactored into a subdirectory. It sort of doesn't matter, because essentially all of our source code is excluded in tox.ini anyways. (What is the point of having these tests when everything is excluded? I have wondered this myself.) -------------------------------------------------------------------------------- 424f3ba4f7 | Kyle Rawlins | 2024-03-17 11:52:09 -0400 fix: update requirements files for webserver tests This is for py38, we'll see if it works for other CI targets. -------------------------------------------------------------------------------- bdd6c9c6ed | Kyle Rawlins | 2024-03-17 11:39:15 -0400 fix: convert CI macos pyyaml dep to homebrew I have some reservations about this, but once any python stuff at all is installed via homebrew, it becomes hard to go back. -------------------------------------------------------------------------------- 66263ccf9e | Kyle Rawlins | 2024-03-17 11:34:22 -0400 fix: update some CI python versions Python 3.6 no longer works here. I believe we've gotten all servers past eol python versions at this point, so it's safe to only test current versions. Also, I (conservatively) updated the python 3.7 installs for catch2 tests to 3.8. This could probably go further? -------------------------------------------------------------------------------- 93cc127212 | Kyle Rawlins | 2024-03-17 11:21:16 -0400 fix: possibly unbreak macos CI pip3 call This will probably fix this immediate call, but it's unclear to me whether the fixed version will install pyyaml in the right place. -------------------------------------------------------------------------------- f73a246b04 | Kyle Rawlins | 2024-03-17 10:48:11 -0400 fix: reorder some CI steps Homebrew and system installed python have an unfortunate interaction from time to time. Most recent github statement on this: https://github.com/actions/runner-images/issues/9471#issuecomment-1984202712 We already had a workaround in place from c6129fcb3f40, but it is not working for the current round of the bug. I think reordering should be the fix. Previously this CI issue must have triggered later in our build process (currently unclear to me how; maybe the brew calls in the prior step only recently triggered a dependency upgrade; right now the culprit is libpng). This commit should ensure it is always triggered before any brew calls. -------------------------------------------------------------------------------- a50f3326c4 | Kyle Rawlins | 2024-03-17 10:21:08 -0400 fix: convert some string `+`s to `make_stringf` Crawl string templating is all over the place, but imo using + for templating is the worst of the available options. -------------------------------------------------------------------------------- c8563f6773 | Nicholas Feinberg | 2024-03-16 22:24:38 -0700 Fix multiple spell list lettering (SentientSupper) Spell lists with three or more sections (e.g. natural + magical + wand spells) would be lettered incorrectly, as would various other cases. Fix this by simplifying lettering. -------------------------------------------------------------------------------- 1ee7915d7e | SentientSupper | 2024-03-16 19:53:22 -0700 Display PE center targets with more opacity Display permafrost center targets with more opacity. This includes a nonstandard use of AFF_YES but I don't think any players would complain. -------------------------------------------------------------------------------- 66358920a5 | bjiorn | 2024-03-16 19:52:23 -0700 Fix max HP value in description of your ancestor Previously the value was not up-to-date after gaining a level until your ancestor died and respawned. -------------------------------------------------------------------------------- 54de21ab35 | Nicholas Feinberg | 2024-03-16 19:49:42 -0700 Don't crash on \ Broken in 95338c156ce86d7b4b3cb89f98aa10beac2d877e etc. -------------------------------------------------------------------------------- a9a889f0c6 | Nicholas Feinberg | 2024-03-16 19:37:57 -0700 Remove buggy handling for un-ID'd wands This logic would hide *all* spells for monsters with un-ID'd wands. Players should no longer ever see monsters with un-ID'd wands, so add an assert instead. -------------------------------------------------------------------------------- fbd0129fbb | Nicholas Feinberg | 2024-03-16 19:37:01 -0700 Fix momentarily un-ID'd monster wands (SentientSupper) We had old monster info cached for a turn, meaning that you could see ijyb come into view with 'a wand of flame', xv them immediately, and see them holding 'a forked gold wand' instead. -------------------------------------------------------------------------------- c23bbe546e | Nicholas Feinberg | 2024-03-16 19:14:02 -0700 Wand description refactoring Following 0bf9c4c012e350145fa2752b77bbbcd8f03b9586. -------------------------------------------------------------------------------- 79873398bf | Nicholas Feinberg | 2024-03-16 19:02:23 -0700 Further revise wand spell descriptions There's no good way to explain why players are affected differently by some spells than monsters are, but we can try to be a little less blunt than 0bf9c4c012e350145fa2752b77bbbcd8f03b9586. Also, fix Fastroot's name. It's a pun! -------------------------------------------------------------------------------- 95338c156c | Nicholas Feinberg | 2024-03-16 18:57:41 -0700 Fix randart stave names (various) Partially reverts 55136d7. Closes #3685. -------------------------------------------------------------------------------- 1a05c61809 | wheals | 2024-03-16 22:53:23 +0200 Fix a crash after banishing a challenging apostle (Memoria, Ge0ff) -------------------------------------------------------------------------------- 63684f6103 | wheals | 2024-03-16 22:38:54 +0200 Update Beogh vengeance accounting when cloning (#3588). Fixes #3588. -------------------------------------------------------------------------------- 65a1bb7473 | David Lawrence Ramsey | 2024-03-16 12:55:44 -0500 Fix comment typo. -------------------------------------------------------------------------------- ad064519fa | NormalPerson7 | 2024-03-16 09:34:59 -0500 Add SH preview and standardise AC/EV/SH previews in descriptions Previously, the AC change shown in item descriptions included temporary effects such as Qazlal's AC+3 status or Ignis' fiery armour, but the EV change did not include temporary changes. This commit changes the AC preview to match that of EV in not including temporary effects, and adds an SH preview, which also does not include temporary effects. I figure that this is the most consistent strategy, but if it is too confusing, we can always go the other way. The most important thing is that it is consistent between AC/EV/SH. Additionally, with AC/EV/SH now allowed to take fractional values, all items that affect AC/EV/SH will show the change in their descriptions, except for non-artefact rings of protection/evasion and amulets of reflection. E.g. shields of protection will now also show the AC change, for completeness, and artefact rings of protection/ evasion and amulets of reflection will show their messages (because strength and dex changes can affect flat bonuses on these items). I have merged the old method of computing the AC change into the more recent approach of fake-equipping the item, to simplify some code. -------------------------------------------------------------------------------- 0bf9c4c012 | SentientSupper | 2024-03-16 09:19:38 -0500 Show wand spells in monster description Add placeholder tile for bolt of light and some new descriptions. Tweak some wand spell descriptions. Charming and bolt of light will now mention their effects on the player. Roots no longer mention an increase in damage over time since that was removed in the constriction rework. Add placeholder warp space tile from dolorous, based on an edited UNUSED/gui/lugonu_bend_space.png with the palette of item/wand/i-disruption.png. [Committer's note: Squashed, and consolidated and edited commit message.] -------------------------------------------------------------------------------- 1953ddba12 | SentientSupper | 2024-03-16 08:00:32 -0500 Don't leak magic if antimagic rolls 0 duration Antimagic frequently rolls a duration of 0 on hits but will still print the "magic leaks into the air" message which doesn't seem right to me. -------------------------------------------------------------------------------- a344392067 | Wizard Ike | 2024-03-15 22:31:33 -0700 Fix summoned protean progenitors' spawns Make their spawns summoned too. [Committer's note: fixed comments and refactored slightly.] Closes #3599. Closes #3622. -------------------------------------------------------------------------------- 9e65270477 | SentientSupper | 2024-03-15 22:10:56 -0700 Add option to remove dropped items from autopickup Adds a new option: drop_disables_autopickup which removes all dropped items from autopickup automatically. A QoL thing that allows you to drop items (especially from local tiles inventory panel) without needing additional keypresses to enter the autopickup menu and disable autopickup manually. Defaults to off. -------------------------------------------------------------------------------- f7ae706393 | David Lawrence Ramsey | 2024-03-16 00:01:11 -0500 Fix comment typo. -------------------------------------------------------------------------------- bc5cafa0a1 | SentientSupper | 2024-03-15 21:57:59 -0700 New tile for slug shots Based on the iron shot tile but with less outline, and colors taken from enchanted boomerangs. Feels weird for the hand cannon description to say it shoots metal slugs while the actual tiles look like sling stones. Closes #3641. -------------------------------------------------------------------------------- 49a1623ff6 | SentientSupper | 2024-03-15 21:52:08 -0700 Revert "Reduce the rarity of rings of slaying" This reverts commit a5b73f788d0da6e87d89aed2e0f0753b06fca47e. -------------------------------------------------------------------------------- 0bc3202ee7 | SentientSupper | 2024-03-15 21:52:08 -0700 Reduce the rarity of rings of slaying They're roughly 3x as rare as other rings for some reason and I don't think they're good enough to be receiving such special treatment. -------------------------------------------------------------------------------- 05749c3a33 | SentientSupper | 2024-03-15 21:52:08 -0700 Lower the price of slaying rings Rings of slaying are more than twice as expensive than other variable strength rings despite being arguably not that much better. Tone down its price to match other rings so it isn't often more expensive than good randart rings that generate in stores. -------------------------------------------------------------------------------- d24e9608d4 | SentientSupper | 2024-03-15 21:48:49 -0700 Buff Norris cast rates Even after his previous buffs, Norris's killratio remains below 1%. In an actual game, he shows up at a time when you're already steamrolling most enemies, and then gets steamrolled. Raise his draining gaze frequency dramatically so it can actually outdrain your mp regen and also increase primal wave's cast frequency slightly. -------------------------------------------------------------------------------- 55bdc6a8b1 | SentientSupper | 2024-03-15 21:45:53 -0700 Don't leak invisible monster location with PE Fixes #3661 -------------------------------------------------------------------------------- c18e4ce02a | Nicholas Feinberg | 2024-03-15 21:44:30 -0700 Fix bound krakens (Talandazar) Let them fly freely, not flop foolishly. Closes #3461. Closes #3674. -------------------------------------------------------------------------------- 7cc139b6fe | SentientSupper | 2024-03-15 21:23:30 -0700 Fix makh major destruction firing acid globs Fixes an issue introduced by 926e5b6 Closes #3678 -------------------------------------------------------------------------------- 4b9ed32530 | David Lawrence Ramsey | 2024-03-15 19:49:14 -0500 Fix typo. -------------------------------------------------------------------------------- 1d96ad090f | Nicholas Feinberg | 2024-03-15 15:34:52 -0700 Fix a shocking typo (Monkooky) -------------------------------------------------------------------------------- 4c840350cb | Nicholas Feinberg | 2024-03-15 15:33:15 -0700 Make the Elemental Staff check AC too For consistency with other staves. -------------------------------------------------------------------------------- d9da9a62e7 | Nicholas Feinberg | 2024-03-15 15:27:14 -0700 Make staff damage closer to other elemental damage Most elemental damage checks AC - see 9e354a60c687 for a fuller explanation of why, and why it's good to be consistent. Make elemental staff damage do the same. Staves of fire, cold, death, and poison all now check AC normally, and all do +25% damage from their old values. Staves of air check half AC (like other electric damage). Staves of conjurations and earth already checked AC and are unchanged. This is not intended to be a nerf or a buff to staff damage, just an attempt to make AC's effects more intuitive. Numbers are subject to change. -------------------------------------------------------------------------------- 84b946f976 | Nicholas Feinberg | 2024-03-15 15:16:41 -0700 Refactor staff damage -------------------------------------------------------------------------------- 55136d7841 | Nicholas Feinberg | 2024-03-15 13:43:28 -0700 Begin data-ifying staves -------------------------------------------------------------------------------- ee0ae1bddf | SentientSupper | 2024-03-15 12:42:56 -0500 Don't let krakens into toxic bogs Closes #3456 -------------------------------------------------------------------------------- 7df3b1584c | SentientSupper | 2024-03-15 11:38:26 -0500 Don't evolve while undead Closes #3535 [Committer's note: Dropped player::can_safely_mutate()'s temp parameter's being explicitly set to true, since it defaults to true anyway.] -------------------------------------------------------------------------------- b3796b0532 | SentientSupper | 2024-03-15 07:47:55 -0500 Remove a random useless semicolon -------------------------------------------------------------------------------- 515539a894 | David Lawrence Ramsey | 2024-03-15 01:33:18 -0500 Add placeholder tile: Yred's lighting the torch. This is an edited and palette-tweaked version of UNUSED/gui/conjure_flame.png. -------------------------------------------------------------------------------- 016ad743e0 | Nicholas Feinberg | 2024-03-14 17:20:15 -0700 Don't crash on fog (rypofalem) -------------------------------------------------------------------------------- 77e4170d28 | David Lawrence Ramsey | 2024-03-14 17:47:03 -0500 Rename a god conduct to be more accurate. -------------------------------------------------------------------------------- 6768db42a9 | David Lawrence Ramsey | 2024-03-14 17:37:00 -0500 Remove unused "Desecrate Orcish Remains" conduct. -------------------------------------------------------------------------------- 9ec0c110ad | Nicholas Feinberg | 2024-03-14 11:41:02 -0700 Somewhat refactor god_protects Add a reference-based implementation for common use cases. -------------------------------------------------------------------------------- 8cd13bf097 | SentientSupper | 2024-03-14 11:18:32 -0700 Make Jiyva protect jellies from harm Jiyva's mpregen and mp/wild magic/int mutations support casters well, but the random jelly spawns are especially annoying for casters. You can't firestorm when a jelly decides to hug your target. You can't shatter if there are jellies on the floor because there's a chance you damage a jelly behind a rock wall and incur penance. You can't even immolate at any time because a jelly could spawn and throw itself into the flames. This is no fun and I'm changing that. Jiyva now protects slimes from harm similarly to Fedhas with the difference that you can't fire through slimes and they'll absorb projectiles if you try to do so. Jiyva also prevents immolation scrolls from affecting jellies because using jellies as bombs is not cool (at least from Jiyva's perspective). Additionally, all god protection will protect from torment. Previously this wouldn't have had an effect because plants and ancestors already resist torment. Based on 75f1ca80bcda43d3fbc33714f3299d0209dd9cc1 with changes. [Committer's note: Did some refactoring and fixed some small issues. We should remove J's no-hurting-jellies conduct next.] Closes #3653. -------------------------------------------------------------------------------- 0fd22b6b0a | Nicholas Feinberg | 2024-03-14 09:24:07 -0700 Remove an unused variable (SentientSupper) Obsoleted in 3d1ca0d2d81d10d4c5f25e9f2ea6d83abcc60257. -------------------------------------------------------------------------------- 60f233581c | David Lawrence Ramsey | 2024-03-13 23:46:13 -0500 Make foul shadow mut give a stealth bonus. Like all other sources of umbra. -------------------------------------------------------------------------------- 0ab5258196 | elliptic | 2024-03-13 19:59:14 -0400 Remove steel elves (ge0ff) -------------------------------------------------------------------------------- 0a1840c5b1 | David Lawrence Ramsey | 2024-03-13 18:06:08 -0500 Restore separate umbra radii for Yred and Dith. -------------------------------------------------------------------------------- c29ba85809 | David Lawrence Ramsey | 2024-03-13 17:37:53 -0500 Add better placeholder tiles for foul shadow mut. These are derived from a combination of the foul stench 1 mutation tile and the inner flame spell tile, with a few minor adjustments and the palettes tweaked. -------------------------------------------------------------------------------- 6677626c59 | elliptic | 2024-03-13 14:50:05 -0400 Fix display of monster chance of hitting a player with positive SH -------------------------------------------------------------------------------- 9bfe03fe0b | elliptic | 2024-03-13 11:27:07 -0400 Decrease precision in display of AC/EV changes on gear swaps From two decimal places to one decimal place, since nobody actually needs that much precision. Currently the difference is computed with two decimal places before being truncated, which means that it will say things like "AC would increase by 2.2 (7.9 -> 10.2)" - I think this is better than the alternative of making the displayed increase fluctuate between 2.2 and 2.3 as you equip/unequip unrelated armour. -------------------------------------------------------------------------------- 1ee5eff69a | elliptic | 2024-03-12 23:55:33 -0400 Smooth out draconian AC growth (rypofalem) Previously draconians gained 1 AC on every third level while nagas gained 1/3 AC every level (relevant in combination with armour skill etc), even though they had identical messages etc. It's unclear to me that this was ever really intentional (could just be careless parenthesation), but it mostly didn't matter prior to 5fa0bccb since draconians had very few available sources of non-integer AC without Armour skill (mainly Ozocubu's Armour). But now that it matters, let's be consistent. (Gargoyles also have fractional AC gain already.) This is effectively a 0.33 AC buff on average, but 5fa0bccb was a small EV nerf to players who previously trained to dodging breakpoints, so this seems okay. -------------------------------------------------------------------------------- fc9fac7961 | SentientSupper | 2024-03-12 19:55:09 -0500 Unbug throwing nets Once upon a time there lived two bugs in a cottage. The first bug caused a third throwing net that nets a target that's been netted and then netted again with a second net to get stuck on the target without increasing the net duration but remain stuck after the target breaks free, leaving behind a net that catches nobody but yet cannot be picked up. The second bug caused netting a target that's standing on top of a net to merge the nets together, breaking both nets once the target breaks free. Now the cottage is on fire and both bugs are dead. Throwing nets that hit a netted target will not net the target and nets that successfully net a target will not merge with any nets on the floor. -------------------------------------------------------------------------------- 5386afd49c | SentientSupper | 2024-03-12 19:31:27 -0500 Make abyss exit spawning interrupt travel At least in local tiles, an abyss exit spawning does not interrupt autoexplore so you could press o and immediately find yourself 50 steps away from an exit that just spawned even with a force more for the message. This commit makes it that having an abyss exit or downstairs spawn interrupts autoexplore. -------------------------------------------------------------------------------- 5fa0bccb63 | elliptic | 2024-03-12 17:46:24 -0400 Remove AC, EV, SH breakpoints Previously raising Armour, Dodging, or Shields skill purely for the defensive benefits (as opposed to decreasing penalties of armour/shields) did nothing except at discrete points where it suddenly gave you one extra point of AC (or EV etc). With most skills we try to avoid this sort of breakpoint so that players gain less benefit from micromanaging skill levels. Although AC, EV, SH were all already computed to high precision, an internal value of 8.37 AC was rounded to 8 AC before being used for anything. This commit changes that - now a value of 8.37 AC means that 8 AC will be used 63% of the time and 9 AC will be used 37% of the time. This type of random rounding is already used to smooth out the effects of skills in various other points, including the effect of weapon skill on weapon delay. The precise internal value of 8.37 AC is currently only visible to the player when examining an equipment item and seeing how swapping it in will change their AC. Previously the game might have said "Your AC would decrease by 1 (8 -> 7)" whereas now it might say "Your AC would decrease by 0.61 (8.37 -> 7.76)". The display of player AC/EV/SH everywhere else is rounded down to an integer, similar to how weapon delay is displayed rounded down to a multiple of 0.1. I think there's a decent argument that both weapon delay and AC/EV/SH (after this commit) should be displayed with one extra digit of precision "normally", but that can be a separate discussion. A note on balance: in general I expect this to only have very minor effects. Previously AC was rounded down to an integer, EV was rounded up, and SH was rounded to the nearest integer. This means that for a "random" character not paying attention to the breakpoints, on average this commit will increase their AC by 0.5 and decrease their EV by 0.5, while leaving SH unchanged. For a player paying close attention to both AC and EV breakpoints, this commit will decrease their EV by 1 when they are at both breakpoints, but help their AC and EV relative to that when they are training between breakpoints. If there are any concerns about this being a (minor) player nerf I'd suggest increasing EV by 0.25 or something like that. -------------------------------------------------------------------------------- 7accb7eaf3 | gammafunk | 2024-03-12 14:15:22 -0500 fix: Remove an ORIENT line from a vault (dolorous) The vault wander_guarded_unrand_ratskin is in mini_monsters.des yet has a float orient. It's perfectly fine as a minivault, since it's small and has no weird issues with vault connectors, so remove that orient. -------------------------------------------------------------------------------- 5251a91aee | David Lawrence Ramsey | 2024-03-12 11:53:59 -0500 Put S.o.t.D.K. back in a Crypt vault. This reverts commit 783e625e56036b44a4caa56aa6156ba30ca523d2. -------------------------------------------------------------------------------- 6270fc1253 | David Lawrence Ramsey | 2024-03-12 11:53:59 -0500 Revive grunt's old S.o.t.D.K. vault, adjusted. It's renamed from grant_unrand_guarded_doom_knight to grant_guarded_unrand_doom_knight, to match the naming of all the other guarded unrand vaults in variable/mini_monsters.des. This partially reverts commit 20c470eb4851b751f159898c8d60758f7ae9a1b8. -------------------------------------------------------------------------------- f5658d774c | SentientSupper | 2024-03-12 11:53:59 -0500 checkwhite -------------------------------------------------------------------------------- 957ebe1dbe | SentientSupper | 2024-03-12 11:53:59 -0500 Update doom knight melee effect message To account for the player being the victim. -------------------------------------------------------------------------------- 3634fed8bd | SentientSupper | 2024-03-12 11:53:59 -0500 Rework and bring back sword of the doom knight Replace pain brand with the doom brand which causes it to inflict up to 10% of its victim's maximum health on hit. This does the opposite of the sword of power, dealing more damage the tougher the foe you face and avoids making you train necromancy for bonus damage when the weapon has -cast. Give it ^Drain to discourage swapping it in and out to use spells because of -cast or only when you face a tough enemy like a unique panlord. Also make it evil because doom sounds evil and it was used by a yred worshipper. [Committer's notes: This partially reverts commit 20c470eb4851b751f159898c8d60758f7ae9a1b8.] -------------------------------------------------------------------------------- 0418803318 | David Lawrence Ramsey | 2024-03-12 11:11:31 -0500 Add placeholder tile: wielded Scythe of Curses. So that the item in question no longer erroneously uses the tile for the wielded Finisher when it's not Finisher (although the tile is a palette-tweaked and minorly adjusted version of the wielded Finisher tile). -------------------------------------------------------------------------------- 316d9043ac | David Lawrence Ramsey | 2024-03-12 10:50:58 -0500 Don't redundantly flag some unrands as evil. The Sceptre of Torment has the pain brand, the Sword of Zonguldrok has the reaping brand, and the obsidian axe has the draining brand. These three unrands are already evil by virtue of their brands, so they don't need to be flagged as evil. -------------------------------------------------------------------------------- 804251a7fb | SentientSupper | 2024-03-12 09:54:38 -0500 Add punctuation to collisions, remove from misses It's unclear to me why misses call attack_strength_punctuation when the damage is always 0, so always use a period instead. Make punctuation marks in collision messages vary with amount of damage dealt. This is averaged for collisions between creatures. Collisions can sometimes deal surprising amounts of damage and this better conveys that!! -------------------------------------------------------------------------------- c880bc24ad | David Lawrence Ramsey | 2024-03-12 08:41:40 -0500 Add "Brilliance" to a Crypt vault. Since it's now tied to Yredelemnul lore-wise. -------------------------------------------------------------------------------- 93135e86f0 | David Lawrence Ramsey | 2024-03-11 23:41:12 -0500 Rename a vault. wheals_unrand_guarded_autumn_katana is now wheals_guarded_unrand_autumn_katana, to match the naming of all the other guarded unrand vaults in variable/mini_monsters.des. -------------------------------------------------------------------------------- 7bd404cb94 | Nicholas Feinberg | 2024-03-11 18:10:16 -0700 Nerf Cigotuvi's Embrace (elliptic) Since skeletons no longer rot, don't encourage hoarding them for Embrace AC. I'm skeptical that anyone would do this, but let's just be safe. -------------------------------------------------------------------------------- e26c5dbc97 | David Lawrence Ramsey | 2024-03-11 14:49:28 -0500 Fix comment typo. -------------------------------------------------------------------------------- 73ff4a9562 | Nicholas Feinberg | 2024-03-11 12:42:08 -0700 Add two new books To get us closer to the desired three-spells-per-book average, add a Book of Movement and Book of Wicked Creation to depopulate some of the more densely-packed books. -------------------------------------------------------------------------------- 75126f55eb | Nicholas Feinberg | 2024-03-11 12:11:47 -0700 New spell: Permafrost Eruption (L6 Ice/Earth) It seems like it'd be fun to have an ice/earth spell. This one plays with a targeting idea I've wanted to use for a while, an explosion that automatically targets the largest clump of enemies onscreen. (It'll never target anything adjacent to the player, which is a weakness.) The spell does one physical hit to the whichever enemy is in the centre of the blast, and another cold (AC-ignoring!) hit to that enemy and everything adjacent to it. It's intended to encourage players to go into an unusual school pairing by compensating for their school's weaknesses: Ice's difficulty dealing with single targets, and Earth's issues with enemies that have both EV and AC. Damage numbers are first drafts, and Servitor support plus a proper tile are TODOs. -------------------------------------------------------------------------------- 49d7e34f9b | Nicholas Feinberg | 2024-03-11 12:10:45 -0700 Add more files to the Xcode project This is dubious and might break things. Apologies if so. -------------------------------------------------------------------------------- c4f3efa9c8 | David Lawrence Ramsey | 2024-03-11 13:49:00 -0500 Improve fallback brand handling for "Brilliance". It's supposed to have a unique brand, and fallback brand handling is supposed to be done in the unrand definition. It's now replaced with a randart eveningstar of pain if it's already been generated. Accordingly, remove its fallback brand handling from minmay_guarded_unrand_brilliance. -------------------------------------------------------------------------------- 7bcfc0ab29 | David Lawrence Ramsey | 2024-03-11 13:23:13 -0500 Fix spelling. -------------------------------------------------------------------------------- 100c63a273 | David Lawrence Ramsey | 2024-03-11 12:58:49 -0500 Fix build (why did this compile?) (WizardIke). -------------------------------------------------------------------------------- cb3c702784 | patrick | 2024-03-11 10:33:27 -0400 Fix an error I made in the shops definition syntax I made a recent update without fully testing all the possibilities. I apologize to all those who have been harmed by my negligence. -------------------------------------------------------------------------------- dc239d62e1 | David Lawrence Ramsey | 2024-03-10 17:06:06 -0500 Fix song/spoken word citations. They use quotes, not underlines like book citations. -------------------------------------------------------------------------------- a07e523f8f | Implojin | 2024-03-10 16:57:02 -0500 Add a brand inscription to the dragonskin cloak (ragingrage) -------------------------------------------------------------------------------- 3729bd50f8 | David Lawrence Ramsey | 2024-03-09 21:27:35 -0600 Add a quote for the sacrificial altar of Ru. -------------------------------------------------------------------------------- ff75c0dad8 | David Lawrence Ramsey | 2024-03-09 16:18:21 -0600 Mark monsters w/foul flame melee attacks as evil. -------------------------------------------------------------------------------- 53a61d21a5 | David Lawrence Ramsey | 2024-03-09 15:53:58 -0600 Fix capitalisation. -------------------------------------------------------------------------------- 46848ad166 | David Lawrence Ramsey | 2024-03-09 15:24:09 -0600 Reformat a few lines of mutation data. -------------------------------------------------------------------------------- 09a337154d | Implojin | 2024-03-09 10:27:56 -0600 Fix rollpage mutation descriptions These were missed in 0ebe13f60c. -------------------------------------------------------------------------------- 66fdcfdd25 | SentientSupper | 2024-03-09 08:09:09 -0600 Let armataurs with bardings and talons kick foes Closes #3636 -------------------------------------------------------------------------------- 0ebe13f60c | SentientSupper | 2024-03-09 08:07:37 -0600 Change short desc of rollpage mutation Having two mutations MUT_ROLL AND MUT_ROLLPAGE share the same short_desc means you can only interact with one of them in wizmode. -------------------------------------------------------------------------------- e8a88695a4 | gammafunk | 2024-03-09 00:25:17 -0600 fix: WebTiles Health and MP spacing (particleface) The changes in 8f7e8e6e inadvertantly removed the whitespace that comes after the "HP:" and "MP:" stat labels in the HUD. This was a result of incorrectly joining the span tags for these labels to the logical lines of the span tags containing the numeric values portion of the display for these stats. This commit adds the new logical lines where necessary. It also removes some newlines added in 8f7e8e6e that were inserted within the `` tag elements to allow for use of newlines without making new logical lines. It's not that hard to work a few overly long lines, and having a newline inserted after e.g. `` looks extremely dubious. -------------------------------------------------------------------------------- 3d30ec2550 | Nicholas Feinberg | 2024-03-08 19:28:08 -0800 Add banana bread (hellmonk) -------------------------------------------------------------------------------- f59354a618 | David Lawrence Ramsey | 2024-03-08 19:00:11 -0600 Fix spelling. -------------------------------------------------------------------------------- add1f40288 | David Lawrence Ramsey | 2024-03-08 18:46:01 -0600 Adjust Book of the Earth description. Since mountain dwarves are back, but hill dwarves are not. -------------------------------------------------------------------------------- a018e7e89e | Nicholas Feinberg | 2024-03-08 16:10:52 -0800 Remove protean progenitor sInv Not at all clear to me why they had it, and not conducive to player intuitions about which monsters do and don't see invisible. -------------------------------------------------------------------------------- c4e8710386 | David Lawrence Ramsey | 2024-03-08 17:00:38 -0600 Adjust "Brilliance" description a bit. To make it clearer that its old wielders are the ones being repulsed, not its shadow. -------------------------------------------------------------------------------- 97ce250973 | David Lawrence Ramsey | 2024-03-08 13:26:27 -0600 Add a quote for the tower shield of Ignorance. -------------------------------------------------------------------------------- 2e395d4530 | David Lawrence Ramsey | 2024-03-08 11:07:38 -0600 Colour foul flame melee attacks properly. Since they're now a super-umbra instead of an evil halo. -------------------------------------------------------------------------------- 9eff4c5b6e | patrick | 2024-03-08 11:27:27 -0500 Expand the inventory of the One-of-a-Kind Rings shop We here at the One-of-a-Kind Rings corporate offices would like to thank you all for your continued support of our franchise. We strive every day to provide dungeon-goers with the finest of unique rings, and with the recent advances in artefact-specification technology, we're pleased to present an all-new addition to our inventories. One-of-a-Kind Rings franchises will now generate one guaranteed randart ring with a property that's usually unavailable on randarts. These properties are: Repel Missiles, Clarity, rMut, SH+5, HP+X, and MP+X (where X for HP and MP can vary from +10 to +15; for MP, this is higher than the usual fixed value of MP+9). Once again, thank you for your continued patronage. -------------------------------------------------------------------------------- cc61e46a16 | patrick | 2024-03-08 11:01:26 -0500 Make an extremely important update to the shop def documentation No doubt that thousands, perhaps millions, of lives will be saved from this. No need to thank me. -------------------------------------------------------------------------------- 3542139ebd | David Lawrence Ramsey | 2024-03-07 23:11:23 -0600 Fix comment typo. -------------------------------------------------------------------------------- 01338f72df | Alex Jurkiewicz | 2024-03-07 21:04:18 -0800 Ignore non-.yaml files in games.d/ Use case: I disable forks by renaming them to `bcrawl.yaml.disabled`. -------------------------------------------------------------------------------- 3af422c12e | Quinten Konyn | 2024-03-07 21:02:33 -0800 Check for flight item removal safety on swap When removing an item, `_safe_to_remove_or_wear` checked for the safety of removing the item if it provided flight and the player was above lava or deep water. However when swapping two items, `remove` is false and the removal of the old item is implicit. The function to check the safety of flight removal `safe_to_remove` is not called in this case. This commit adds a flight removal safety check in the branch of `_safe_to_remove_or_wear` that has determined that we're swapping out an old item, echoing the check that was already happening for non-swap removal. I added comments to both `safe_to_remove` checks, because it is not immediately clear that only flight removal safety is checked by that funciton. `_safe_to_remove_or_wear` has a comment stating that it checks for stat zero and does not mention flight, so I wanted to make sure the code doing something other than what that comment says was clearly signalled. Resolves #3502. -------------------------------------------------------------------------------- ee4d739957 | David Lawrence Ramsey | 2024-03-07 21:13:22 -0600 Add a few more ancestor names. -------------------------------------------------------------------------------- 5f7579bffe | David Lawrence Ramsey | 2024-03-07 19:47:23 -0600 Adjust foul flame melee attack description. Since it does extra damage to everything, mostly to holies and good god worshippers, but that needs to be conveyed in limited space. -------------------------------------------------------------------------------- 8f7e8e6ef7 | Alex Jurkiewicz | 2024-03-07 17:42:26 -0800 fix: Update game.html tags There were a number of `
` and `` tags that were self-closed (eg `
`). Trailing slashes in opening tags are ignored by HTML parsers and by convention only used for "void" tags (those that don't support closing tags). This led to HTML parsers in some cases misparsing the document, where eg `
` would be interpreted as `
` instead of the intended `
`. Read more: https://developer.mozilla.org/en-US/docs/Glossary/Void_element#self-closing_tags Convert all `
` and `` to standards compliance. Also, make the following (mostly cosmetic) changes with Prettier: * Consistent 2-space indentation * Add a trailing slash to all `` tags * Don't use HTML comments to keep sequential ``s on the same line * Clean up inline style strings * Consistent JS quoting Closes #3497. -------------------------------------------------------------------------------- 31c6501bf3 | yrdzrfxndfvh | 2024-03-07 17:38:46 -0800 Remove redundant 'unblindable' flags Obsoleted by b856850. Closes #3587. -------------------------------------------------------------------------------- d0e5102f28 | elliptic | 2024-03-07 18:07:47 -0500 Remove a magic breakpoint in book acquirement A character with no magic skills has a 0% chance of getting a spellbook instead of a manual from acquirement. Previously the chance of getting a spellbook increased up to 40% as the proportion of a character's skills that were magic increased up to 25%, and then suddenly the chance jumped all the way to 100%. This commit removes the breakpoint, so magic-oriented characters who previously had a 100% chance of getting a spellbook will now get a mix of spellbooks and manuals. -------------------------------------------------------------------------------- 007c2181c8 | elliptic | 2024-03-07 18:07:47 -0500 Tweak weighting in talisman acquirement Most talismans aren't randarts and thus are useless if they are duplicates, so increase the weight scaling factor for not-already-seen talismans. Also, if you have the skill for a talisman of a given tier, that probably means you already have at least one talisman of that tier and are most interested in a talisman of tier one higher, not a second talisman of the same tier (and a talisman of lower tier is even less likely to be interesting). -------------------------------------------------------------------------------- d6aa9b3b29 | elliptic | 2024-03-07 18:07:47 -0500 Tweak acquirement option frequencies Previously staff acquirement stopped happening once the player found all staff types (even though it can still produce artefact staves). This meant that other acquirement types became more common once all staff types had been found, meaning that acquiring a useless staff instead of gold could be a good idea just to improve quality of future acquirements. Also, the just-implemented talisman acquirement had a higher chance of being offered to players with more Shapeshifting skill, which meant that once a player found all the talismans they wanted raising Shapeshifting skill actually made their acquirement scrolls worse. Replace these conditions with flat probabilities - put staff and talisman in the pool of possible acq options (from which 3 non-gold options are selected) only 2/3 and 1/3 of the time respectively. -------------------------------------------------------------------------------- 91cf321817 | Nicholas Feinberg | 2024-03-07 14:58:17 -0800 Refactor Gozag shop acq And ban book shops for Djinni - mostly, though not entirely, useless. -------------------------------------------------------------------------------- 7ecb952e3c | Chuck Sellick | 2024-03-07 14:58:17 -0800 Gozag shouldn't offer jewellery shops to Coglin Jewellery shops have a 10% chance per item of generating a talisman, but it's highly unlikely you'd buy one for that reason when general stores can include them anyway. Closes #3633. -------------------------------------------------------------------------------- e89081bf26 | David Lawrence Ramsey | 2024-03-07 10:37:29 -0600 Add talisman acquirement. Modeled after staff acquirement, in that it's accessible via the scroll, but only commonly so with enough shapeshifting skill. It's biased in favour of talismans you haven't seen, and more biased in favour of shapeshifting skill. However, no talismans are entirely ruled out; it's still possible, although rare, to acquire a talisman with no shapeshifting skill. Accordingly, start keeping track of what talismans we've seen, as is already done with misc items. Xom can also give talismans as gifts now, chosen entirely randomly. -------------------------------------------------------------------------------- a006e7742e | Nicholas Feinberg | 2024-03-06 22:13:24 -0800 Use more references -------------------------------------------------------------------------------- 40f72ca6f8 | Nicholas Feinberg | 2024-03-06 22:11:02 -0800 Improve valid_blink_destination's type signature -------------------------------------------------------------------------------- 1a6acf87a6 | Nicholas Feinberg | 2024-03-06 22:06:27 -0800 Fix: leaky hop targeter (acrobat) Don't reveal unseen invisible monsters with the frog hop targeter. -------------------------------------------------------------------------------- c5db3fc80f | elliptic | 2024-03-06 21:52:37 -0500 Make the delay display in @ round down instead of up (pisaster) To match the delay display when you examine a weapon. I don't have a preference for round up vs round down, but we should be consistent. -------------------------------------------------------------------------------- 2954f76710 | David Lawrence Ramsey | 2024-03-06 20:44:50 -0600 No jewellery acquirement if useless, redux. _find_acquirement_subtype() now accounts for the no-jewellery mutation, and won't generate jewellery with it. -------------------------------------------------------------------------------- 83232ee236 | David Lawrence Ramsey | 2024-03-06 17:21:53 -0600 Fix crash while generating wizmode acquirement stats. Skip over the gizmo and ring preview slots, since we can't acquire for them. -------------------------------------------------------------------------------- d7a9830edf | David Lawrence Ramsey | 2024-03-06 17:07:36 -0600 Fix possible wizmode floating point exceptions. If you run wizard mode acquirement or randart property stats for fewer than 10 iterations, don't display the calculation of the completed percentage, because the formula for it will divide by zero. -------------------------------------------------------------------------------- 4925a30cd0 | David Lawrence Ramsey | 2024-03-06 16:25:52 -0600 Revert "Destroy unchosen misc items in acquirement." Since the logic would only be used for scroll acquirement, which isn't done for misc items. This reverts commit 817ac4a56f2a2e6c12e8715ccea3086e342bd4d4. -------------------------------------------------------------------------------- 817ac4a56f | David Lawrence Ramsey | 2024-03-06 15:41:59 -0600 Destroy unchosen misc items in acquirement. Since we can acquire them, just not via scrolls. -------------------------------------------------------------------------------- 923888f401 | David Lawrence Ramsey | 2024-03-06 15:34:00 -0600 Fix enum spelling. TAG_MINOR_COGLIN_NO_JEWELRY -> TAG_MINOR_COGLIN_NO_JEWELLERY. -------------------------------------------------------------------------------- 53793998da | David Lawrence Ramsey | 2024-03-06 11:50:16 -0600 No jewellery acquirement if we can't wear any. Specifically, leave it out of the acquirement classes, as is done for weapons if you can't wield any, and armour if you can't wear any. -------------------------------------------------------------------------------- 41e9ccace9 | David Lawrence Ramsey | 2024-03-06 11:06:30 -0600 Fix message spacing. -------------------------------------------------------------------------------- 619fc34308 | Nicholas Feinberg | 2024-03-06 08:22:49 -0800 Fix hand cannon description (Qwer) -------------------------------------------------------------------------------- 46d191b0ed | elliptic | 2024-03-06 00:46:34 -0500 Fix coglins not getting full Ashenzari piety -------------------------------------------------------------------------------- 87aaac5c70 | David Lawrence Ramsey | 2024-03-05 16:50:52 -0600 Adjust orcbow description. Since hill orcs are no longer a thing, but the exodus of orcs into the dungeon is. -------------------------------------------------------------------------------- cf8ae8bc37 | Nicholas Feinberg | 2024-03-05 13:07:42 -0800 Ignore more Xcode stuff -------------------------------------------------------------------------------- 41a94f2f57 | Nicholas Feinberg | 2024-03-05 13:07:42 -0800 Turn hand cannons into slug throwers People feel like cannons should shoot bullets. Very well! -------------------------------------------------------------------------------- 9e401d1733 | wheals | 2024-03-05 22:11:10 +0200 Fix prompt when attacking monsters with proper names (#3626) -------------------------------------------------------------------------------- d15513231b | wheals | 2024-03-05 22:11:10 +0200 vault: Fix a silver statue (#3598) Fixes #3598 -------------------------------------------------------------------------------- 02cdc058b7 | Nicholas Feinberg | 2024-03-05 10:49:35 -0800 Fix: don't quiver 'invent gizmo' -------------------------------------------------------------------------------- c93699c114 | wheals | 2024-03-05 17:47:05 +0200 Coglins: fix the autumn katana giving free attacks with the other weapon (#3603) Fixes #3603 No Fun Allowed -------------------------------------------------------------------------------- 070d9c1bce | wheals | 2024-03-05 17:31:05 +0200 Coglins: only rev up once per cast of Manifold assault -------------------------------------------------------------------------------- fbf9df647f | wheals | 2024-03-05 17:05:33 +0200 Show all skills if the only trainable ones would be hidden (#3501) Fixes #3501 -------------------------------------------------------------------------------- 862064635e | wheals | 2024-03-05 16:44:26 +0200 Treat reflected phials of floods correctly (#3600) If the player fired them, make a full-sized splash and do waterlogging. Fixes #3600 -------------------------------------------------------------------------------- 0454c09109 | wheals | 2024-03-05 16:08:32 +0200 Print a message when trying to autoexplore while confused (#3553) Fixes #3553 -------------------------------------------------------------------------------- 8c5b87dc23 | wheals | 2024-03-05 15:32:03 +0200 docs: Update options guide for dump_order (#3495) Oudated since 9c56bcba7, though the option to use Lua has existed, apparently undocumented, since version 0.1.4. -------------------------------------------------------------------------------- aed7c0c624 | wheals | 2024-03-05 14:43:32 +0200 fix: don't sometimes choose invalid random combos (#3546) This could most easily be reproduced by choosing Shapeshifter and a random species. If the coinflip led to the species being resolved first, then it could choose Mummy or Ghoul, since it hadn't copied Shapeshifter from ng_choice into ng. Fixes #3546 -------------------------------------------------------------------------------- 9348d4545b | David Lawrence Ramsey | 2024-03-05 00:59:31 -0600 Clarify foul flame weapon brand description. Good god worshippers can't use foul flame-branded weapons, just as holy beings can't. -------------------------------------------------------------------------------- 36a8ca9f72 | David Lawrence Ramsey | 2024-03-05 00:45:08 -0600 Add red vine stalker player base tiles. Since Maurice is a red vine stalker. These are just palette-tweaked versions of the green ones, which are now renamed to indicate their colour. -------------------------------------------------------------------------------- d166fa89d2 | David Lawrence Ramsey | 2024-03-04 18:25:55 -0600 Deathbed conversion clears vengeance (#3576). For ordinary orcs, as is done for defeated orc apostles (except that sneak attacks also work on ordinary orcs). Note that this is the only type of conversion that works on orcs marked for vengeance now. Add conversion types for vengeance and follower vengeance, and a few vengeance speech lines. -------------------------------------------------------------------------------- 40f424ee2b | wheals | 2024-03-04 12:16:57 +0200 Credit Wizard Ike -------------------------------------------------------------------------------- 1c984fe9d1 | Nicholas Feinberg | 2024-03-03 21:11:28 -0800 Revert "fix double portal messages (descent) (real)" Broke many more important things, like 'slime walls opening' and 'portals not being unlimited use'. We will do a real fix for this one day. Reverts b8176ab9f12de3214a609a7000c4832df59a3880. -------------------------------------------------------------------------------- 8a157a660c | elliptic | 2024-03-03 23:59:15 -0500 Don't let players trigger spiders_nest_spider_trap as many times as they want 831329d5 placed a second copy of the same basket of spiders trap in this vault, which ended up meaning that when you stepped on one of the two traps, the other trap would become unremovable and you could just repeatedly trigger it to kill as many (experience and piety-giving) redbacks as you wanted. This commit makes it so that only one of the traps actually places; there are presumably ways to make the vault work with multiple copies but this seemed like the easiest fix for now. -------------------------------------------------------------------------------- 1f4d3039f5 | David Lawrence Ramsey | 2024-03-03 18:08:39 -0600 Fix breath fire desc (NormalPerson7) (#3621). Closes #3621. -------------------------------------------------------------------------------- 145b2e8c49 | Nicholas Feinberg | 2024-03-03 15:54:41 -0800 Fix off-hand wielding non-weapons (Memoria) Hopefully! -------------------------------------------------------------------------------- fe4e56b67c | David Lawrence Ramsey | 2024-03-03 17:21:05 -0600 Fix an incorrect key for orc follower speech. -------------------------------------------------------------------------------- 64ea0e4219 | David Lawrence Ramsey | 2024-03-02 23:24:12 -0600 Revert "Adjustments for Spellforged form" This reverts commit 82787085d03d1af1fc06f7f07c22e844af5fe98f. -------------------------------------------------------------------------------- e499677281 | David Lawrence Ramsey | 2024-03-02 23:23:44 -0600 Revert "Add Spellforged Talisman" This reverts commit 11ff892dbcd30c8fda559df780a7a5bea4325432. -------------------------------------------------------------------------------- e1e0f865ad | David Lawrence Ramsey | 2024-03-02 23:14:20 -0600 Add a few ancestor names. -------------------------------------------------------------------------------- c4c496a4b8 | Monkooky | 2024-03-02 20:33:11 -0600 remove base UC from Spellforged Form Somewhat pointless addition to the design -------------------------------------------------------------------------------- 9b0da3812b | Monkooky | 2024-03-02 20:33:11 -0600 Adjust Spellforged Infuse, AC Should feel a little better to use for high int casters. Infuse might be too strong now. -------------------------------------------------------------------------------- cc6265022e | Monkooky | 2024-03-02 20:33:11 -0600 Tweak Spellforged Form Make the description more informative, and raise the AC granted (without raising the cap) This likely still needs tweaks. -------------------------------------------------------------------------------- 82787085d0 | Monkooky | 2024-03-02 20:33:11 -0600 Adjustments for Spellforged form Make intelligence changes properly update AC display Make spellforged form not benefit from int for spell fail rates Make spellforged form account for int drain -------------------------------------------------------------------------------- 11ff892dbc | Monkooky | 2024-03-02 20:33:11 -0600 Add Spellforged Talisman Adds a new T2 talisman with +1 AC/2 intelligence over 10 -8 EV, scaling down to 0 at max skill Innate infusion, with normal power at minimum skill and quintuple power at max skill Still needs description work, AC updates without reforming -------------------------------------------------------------------------------- ba8f9cf90e | David Lawrence Ramsey | 2024-03-02 09:52:10 -0600 Prevent disarming orc apostles (#3604). Since we already can't take their weapons via Tukima's. This also avoids a crash on the ^ menu, caused by assuming all orc apostles have weapons and trying to calculate the damage from those weapons. Closes #3604. -------------------------------------------------------------------------------- 2ff3c994f6 | David Lawrence Ramsey | 2024-03-02 09:16:47 -0600 Assert on getting a name from an unnamed weapon. It's clearer than a straight crash. -------------------------------------------------------------------------------- 8e3e136d6a | David Lawrence Ramsey | 2024-03-02 08:39:16 -0600 Don't call is_artefact() twice naming weapons. -------------------------------------------------------------------------------- 69a5a376f1 | DracoOmega | 2024-03-02 03:57:42 -0330 Properly label gizmos on the " screen They did actually show up there, but the slot was labelled 'Unknown'. -------------------------------------------------------------------------------- c481c6522b | David Lawrence Ramsey | 2024-03-02 01:23:02 -0600 Add clarifying comment. -------------------------------------------------------------------------------- f897c97020 | DracoOmega | 2024-03-02 03:47:08 -0330 Don't crash on various things related to the ring preview slot At the very least, from viewing the " screen, but probably others as well. -------------------------------------------------------------------------------- 85ff8e36a1 | David Lawrence Ramsey | 2024-03-02 01:06:29 -0600 Don't call name_weapon() on artefacts. -------------------------------------------------------------------------------- 97116cfa04 | David Lawrence Ramsey | 2024-03-02 00:48:03 -0600 Use maybe_name_weapon() when changing species. In the new silent mode. This also deduplicates code. -------------------------------------------------------------------------------- 684d82af33 | David Lawrence Ramsey | 2024-03-02 00:47:58 -0600 Allow disabling maybe_name_weapon() messages. So we can use it to silently name a weapon. -------------------------------------------------------------------------------- a1b646022c | David Lawrence Ramsey | 2024-03-02 00:47:12 -0600 Refactor weapon naming a bit. Getting the name of a weapon is now in its own function, get_weapon_name(), and is less entangled with maybe_name_weapon() and say_farewell_to_weapon(). -------------------------------------------------------------------------------- 2d1f746d5d | David Lawrence Ramsey | 2024-03-01 23:39:14 -0600 Don't erroneously skip over slots w/artefacts. And remove unused variable. This code needs to be deduplicated from that of maybe_name_weapon(). -------------------------------------------------------------------------------- 896cc9457e | David Lawrence Ramsey | 2024-03-01 23:32:58 -0600 Don't name artefacts when changing to coglin. -------------------------------------------------------------------------------- b28a26c98d | David Lawrence Ramsey | 2024-03-01 21:37:01 -0600 Name wielded weapons when changing to coglin. Via the wizmode "change species" command. This avoids a crash when trying to unwield an unnamed weapon, which can happen if you changed species from non-coglin to coglin while wielding a non-offhand weapon. Accordingly, move the WEAPON_NAME_KEY definition from items.cc to items.h, so we can use it in change_species_to(). -------------------------------------------------------------------------------- d5c3ca020d | David Lawrence Ramsey | 2024-03-01 18:39:30 -0600 Make '!' and '?' work in wizard menus (Aliscans). Do this by overriding skip_process_command(), as is done in a few other places. Closes #3610. -------------------------------------------------------------------------------- ef4fe23122 | elliptic | 2024-03-01 16:29:23 -0500 Tweak recommended backgrounds on Co -------------------------------------------------------------------------------- 21d2723c0b | DracoOmega | 2024-03-01 17:22:42 -0330 Minor additional mmov-related cleanup I'd really like to be able to just use a 'new_pos' value in _monster_move instead of constantly going 'mons->pos() + delta' but a couple places at the end specifically reset delta and even vaguely rely on it being reset to function as they do (such as the chance for a confused monster to additionally hit itself after attacking another monster >.>) A couple of them seem probably like they can be handled another way, but as that is a functional change (however minor), I am not doing that here. -------------------------------------------------------------------------------- aa1d24be35 | Monkooky | 2024-03-01 17:22:42 -0330 refactor handle_monster_move handle_monster_move uses a global variable 'mmov' which is manipulated by several functions. This obfuscates how mmov is set, and makes it difficult to be confident about the current state of mmov at any given time. This refactor makes several functions return a new value for 'mmov' instead of directly manipulating it, and renames such functions to better document their function. Other functions are directly passed a reference to mmov with minimal change to functionality. -------------------------------------------------------------------------------- 64bcc3171f | DracoOmega | 2024-03-01 16:21:05 -0330 Improve EV preview for more item types Item descriptions will now list EV changes caused by shield penalties and stat changes on any type of equipment (ie: artefact weapons, jewellery) -Shields will list EV changes from equipping them even if you have a 2-handed weapon equipped. (Looking the weapon itself will show the change from removing it). This feels better than automatically folding in removing such a weapon into the shield's description. -Rings will always list their stats as if you had room to equip one more ring (and not say 'switch' in their description) since it's impossible to guess where the player would want to put it Internally, ring previews are handled by making an additional internal equipment slot that is used only for these previews (so that it can list them unaffected by however many rings the player has on at the time). EV change will only be listed at all for weapons/jewellery that modify this (since the vast majority will not). I considered not showing it on aux armour by default as well, but there was some concern that this might be more confusing than leaving it there all the time? -------------------------------------------------------------------------------- 05d3356bbf | DracoOmega | 2024-03-01 16:21:05 -0330 Allow querying equip/unequip verbs for given items -------------------------------------------------------------------------------- fff94016a1 | SentientSupper | 2024-03-01 16:21:05 -0330 Newline ac and ev preview in armor description It's easier on the eyes. -------------------------------------------------------------------------------- a5ee4a594e | regret-index | 2024-03-01 16:01:46 -0330 Prevent Coglins from getting jewellery-focused troves (Flugkiller) After the species' restriction of rings in 54e5184 and amulets in ae3e191, there is no rewards for said species to be found in the troves that solely place jewellery, so those troves can be restricted for Coglins. Strictly speaking, nicolae_trove_octotrove places non-jewellery equipment alongside the amulets and rings. However, shields are also extremely discouraged for Coglins, which leaves the trove a source of three hats. It thus has also thus been restricted. -------------------------------------------------------------------------------- b37f33011e | David Lawrence Ramsey | 2024-03-01 09:31:39 -0600 Make mad acolytes of Lugonu worship Lugonu. -------------------------------------------------------------------------------- 918cac0f7e | David Lawrence Ramsey | 2024-03-01 08:42:17 -0600 Fix wizmode item creation crash (#3595). If prompt_menu = false in your rc file. Closes #3595. -------------------------------------------------------------------------------- 706899e69d | DracoOmega | 2024-03-01 00:16:40 -0330 Don't crash when autodazzler triggers while you're invisible (And lacking see invis) The code here somewhat reasonably seems to assume that if there's an agent with a non-player ktype that they're a monster. But I currently can't seem to have the dazzler tracer both count friendlies properly *and* not prompt the player without using the player as its source and using a non-player ktype. This feels wrong, and like the real solution lies elsewhere, but for now let's at least double-check that the agent is a monster instead of crashing. -------------------------------------------------------------------------------- afe9d2b23c | gammafunk | 2024-02-29 20:30:19 -0600 doc: The c_choose_coglin_gizmo hook -------------------------------------------------------------------------------- 9f707a9c88 | DracoOmega | 2024-02-29 22:12:47 -0330 Make ManaRev and ParryRev scale smoothly instead of on/off (elliptic) Per the discussed suggestion, ParryRev give 2/4/5 AC based on visible Rev status tier (with disarm happening only when fully Revved). ManaRev likewise gives 20/40/80 mp regen based on Rev tier (steeper scaling, but there's no additional capstone benefit here). It's plausible this is still on the weak side, but I'd like to see it in practice a little before I staple some additional MP to it. (I also refactored some code slightly so that the status light and these gizmo properties reference the same concept of tier) -------------------------------------------------------------------------------- 7b30705457 | DracoOmega | 2024-02-29 21:35:43 -0330 Fix RegenMP being listed twice on randart amulets of magic regen This was only a visual bug. It still only applied a single time. -------------------------------------------------------------------------------- 3e1049bc92 | David Lawrence Ramsey | 2024-02-29 15:43:35 -0600 Fix punctuation. -------------------------------------------------------------------------------- ec57dfcd37 | gammafunk | 2024-02-29 14:24:20 -0600 feat: Coglin gizmo acquirement support for clua Add the hook `c_choose_coglin_gizmo` for clua users to choose their coglin gizmo, also adding a new value to use with the clua `items.acquirement_items()` function to check the offered gizmos. -------------------------------------------------------------------------------- c871cf952d | gammafunk | 2024-02-29 14:24:20 -0600 refactor: Move some defines to a different header The define keys related to regular acquirement as well as oka weapon gifting were in religion-enum.h, when none of them are enums and only some of them are even related to relgion. Move these to acquire.h, adding a couple includes in some cc files and removing some includes of religion-enum.h in a couple other header files. Overall this should reduce header dependency, since one of the headers with a removed include is player.h -------------------------------------------------------------------------------- 667c705b62 | David Lawrence Ramsey | 2024-02-29 11:59:53 -0600 Display msg for MD and max-ench artefacts (#3605). Closes #3605. -------------------------------------------------------------------------------- dfd1246722 | Nicholas Feinberg | 2024-02-29 09:22:35 -0800 Tweak hunter starting slings (elliptic) Make the off-hand worse than the primary, as with hexslinger and melee starts. -------------------------------------------------------------------------------- 5dfea8ec95 | Nicholas Feinberg | 2024-02-29 09:17:53 -0800 Deduplicate a magic rev number -------------------------------------------------------------------------------- 403443e4af | Nicholas Feinberg | 2024-02-29 09:12:03 -0800 Start Coglins with dual weapons (elliptic) Remove a tiny bit of scrounging for daggers. Any start which has a one-handed melee weapon now gets a bonus +0 dagger. Hexslinger gets a bonus -2 sling, and hunter gets two +1 slings instead of the bow. -------------------------------------------------------------------------------- f2dc5a0a38 | DracoOmega | 2024-02-29 13:08:47 -0330 Prevent a crash when unequipping Faith after Coglin save upgrade It was calling god_speaks before the level was fully loaded, and for some ancient reason god_speaks uses a fake monster at the player's location, which was trying to perform unused string replacements involving the feature description of the tile the player was standing before the level they were on was fully loaded.... I think some more of this ought to be refactored in future, but this seems to fix the immediate crash for now. -------------------------------------------------------------------------------- 4f87150244 | Monkooky | 2024-02-29 09:27:20 -0600 make regen/regenMP gizmos attune previously, if tinkered up while not at full hp/mp, would never attune. -------------------------------------------------------------------------------- 0c985b5a6a | David Lawrence Ramsey | 2024-02-29 09:14:10 -0600 Deduplicate code in _handle_regen_item_equip(). By using the now non-static item regen-checking functions. Partially suggested by matta. -------------------------------------------------------------------------------- 1203c30ec8 | David Lawrence Ramsey | 2024-02-29 09:03:59 -0600 Move item regen-checking funcs to item-prop.cc. Since they can't be static anymore. -------------------------------------------------------------------------------- 9e019001af | David Lawrence Ramsey | 2024-02-29 08:53:26 -0600 Fix spelling of "no jewellery" mutation/ -------------------------------------------------------------------------------- 4c7f4391e0 | elliptic | 2024-02-29 09:29:08 -0500 Fix a crash on equip (Monkooky) -------------------------------------------------------------------------------- 3570a563aa | David Lawrence Ramsey | 2024-02-29 08:03:41 -0600 Add a few gizmo adjectives/nouns. -------------------------------------------------------------------------------- 233958a4c4 | DracoOmega | 2024-02-29 01:25:28 -0330 Improve % screen for Coglins Properly say that rings are both unavailable, and list their gizmo there as well. -------------------------------------------------------------------------------- 68838b59b6 | David Lawrence Ramsey | 2024-02-28 22:45:13 -0600 Fix spelling. -------------------------------------------------------------------------------- e087637393 | David Lawrence Ramsey | 2024-02-28 22:31:44 -0600 Fix punctuation. -------------------------------------------------------------------------------- dcaf52ac95 | David Lawrence Ramsey | 2024-02-28 22:31:40 -0600 Fix typo. -------------------------------------------------------------------------------- 62a8415c68 | DracoOmega | 2024-02-29 00:51:17 -0330 Continue to shuffle gizmo tile locations That just broke REGULAR builds instead... oops. -------------------------------------------------------------------------------- 5854fa997c | DracoOmega | 2024-02-29 00:37:46 -0330 Maybe fix tag upgrade builds I didn't even notice there was major version tagging inside of tile definition files.... -------------------------------------------------------------------------------- c347e58e9c | DracoOmega | 2024-02-29 00:31:44 -0330 Fix being able to use Invent Gizmo from xl 1 Not sure how that statement ended up getting deleted. -------------------------------------------------------------------------------- 49363698eb | DracoOmega | 2024-02-28 23:58:40 -0330 Change Cloak of the Thief's effect It seems widely agreed these days that Cloak of the Thief's fog effect is not only double-edged but perhaps actively bad. Sometimes it saves you, but many other times it reduces your ability to use ?blinking without actually benefitting you at all. Many experienced players think it may be worse than a plain cloak and that feels like a sad place for an unrand to be. So let's try something else entirely! Instead of any fog effect, Cloak of the Thief now provides noise suppression while wearing it (equivalent to, and not stacking with, the mutation). Since this is a very powerful effect, I have also reduced the enchantment to +0 (and increased the slaying penalty to -3). The hope is that this is more exciting than the cloak used to be without being unreasonable. (If I've overshot the numbers, they can always be changed) -------------------------------------------------------------------------------- 2a815d3ee2 | DracoOmega | 2024-02-28 23:58:40 -0330 New unrand: Gloves of the Gadgeteer Using the same (non-stacking) boost as Gadgeteer gizmos (ie: +30% faster evocable recharge and 30% chance not to consume a wand charge), they additionally boost wand power by 30%, but are fragile. Gloves that do something very different than other artifact gloves (and are hopefully fun and different about it without being unreasonable) -------------------------------------------------------------------------------- 1a98434088 | DracoOmega | 2024-02-28 23:58:39 -0330 Make Coglin off-hand weapons fall off when switching species Instead of being stuck there entirely until you switch back. -------------------------------------------------------------------------------- a046ce8265 | DracoOmega | 2024-02-28 23:58:39 -0330 Correct constriction status description (ge0ff) -------------------------------------------------------------------------------- 481bfe3726 | DracoOmega | 2024-02-28 23:58:39 -0330 Prevent allies from displacing you with Electrolunge (lici) Even if your allies were just trying to be helpful, randomly blinking the player if you got in their way had the chance of being needlessly endangering. So now allies won't cast it if they would steal the player's spot. (But also add a message if the player somehow gets displaced by the spell anyway, which is currently narrowly possible (ghosts) and may be more possible in the future.) -------------------------------------------------------------------------------- ae3e1911cf | DracoOmega | 2024-02-28 23:58:39 -0330 Coglin Gizmos! While the latest incarnation of the coglin downside (no rings, but rF+/rC+ at xl 13) may be at a reasonable power level, there's been much interest expressed in making this system a little more involved, randomized, and 'exciting'. So here is an attempt at this which tries to capture some very fun coglin flavour in the process: Coglins no longer gain fixed resists at xl 13, and in addition to being unable to wear rings, also cannot wear amulets. But in exchange, they get a one-time choice of 3 random 'gizmos' at xl 14 - randomized equipment designed to fill part of the role of the jewelry they replace. The intent is that these gizmos are still overall a net downside compared to normal jewelry slots (with the earlier power, flexibility, and lategame artifact possibilities those hold), but that they preserve some of the choice and excitement of finding new items and deciding between them - and not always knowing what you're going to end up using at the start of the game. A downside that *feels* like an upside. After all, being fun should be one of the foremost criteria for a new species, right? These gizmos are generated as follows: Each gizmo has exactly 1 'rare property' and 2 'common properties'. There are 6 total common properties (rF+, rC+, rPois+rCorr, rElec, Will+, Slay+3) and the player is gauranteed to see all 6 of them each game - just in randomized combinations. There are currently 7 different 'rare properties', of which the player will be offered a random 3 each game - so that you *can't* know in advance which you will be offered (nor rely on getting a specific one each game). Several of these draw from existing equipment properties and several are entirely new. I feel strongly that it helps the player fun-factor of the system a lot if some of what you get from gizmos doesn't just feel like "Jewelry, but less of it" but rather contains some *new* choices instead of old ones (even if they're overall less powerful). The list of current rare properties is: 1) Regen + RegenMP 2) Repel Missiles + Clarity 3) Rampage + Acrobat 4) Gadgeteer: 30% faster evocable recharge rate and 30% chance not to consume a wand charge on firing 5) ManaRev: RegenMP++ but *only* while fully Revved 6) ParryRev: AC+5 while fully Revved, along with a small chance to disarm an enemy upon hitting them. (This does not do any damage, unlike Captain's Cutlass's extremely significant damage, to be clear) 7) AutoDazzle Small chance to fire a non-damaging beam of blinding light at an enemy whose attacks you dodge - even at range. The idea is that different modifiers should appeal to different sorts of characters, and also that several of them actively lean into the main gimmick of coglins by synergizing directly with Rev and attacking. Obviously the balance of all of these is provisional, but I think given player response to various previous downsides, it's important to try and sell the *fun* of this foremost. Numbers can be adjusted down as-needed afterward. I hope people enjoy them! (Credit to regret-index for the tilework, and multiple other devs for design discussion and suggestions) -------------------------------------------------------------------------------- 4e4bab2fd2 | DracoOmega | 2024-02-28 23:46:10 -0330 Add ARTP_MANA_REGENERATION Functions the same as the amulet. Amulet of Vitality is now a plain amulet with 2 levels of ARTP_MANA_REGENERATION instead of being a RegenMP amulet that was special-cased to count twice. Amulets of regeneration and magic regeneration used entirely different methods to track whether the player was attuned to them or not, and this unifies them, as well as refactoring a whole lot of code related to this. (This also improves messaging a couple of cases, such as Amulet of Vitality implying it doesn't work for Djinn at all when you first wear it). I also reduced some needless scanning of inventory artifact props whenever the player's regen ticks while they are already at full hp/mp. There is one functional change here, which is that items which grant both hp and mp regeneration (currently ONLY the Amulet of Vitality) will no longer provide either until BOTH of the player's hp and mp are full simultaneously. This irks me a little, but it seems minor enough that all of the extra infrastructure required to avoid it (while still allowing more than a single source of RegenMP to ever function at once) seems unnecessary. -------------------------------------------------------------------------------- a5e47cdb36 | DracoOmega | 2024-02-28 23:46:09 -0330 Add ARTP_ACROBAT For future use in gizmos. -------------------------------------------------------------------------------- efe97123c3 | David Lawrence Ramsey | 2024-02-28 16:48:59 -0600 Put gnoll bouda desc in alphabetical order. -------------------------------------------------------------------------------- fdd2188cd4 | David Lawrence Ramsey | 2024-02-28 16:18:01 -0600 Fix inconsistent capitalisation of willpower. -------------------------------------------------------------------------------- aa138b54ab | Nicholas Feinberg | 2024-02-28 07:26:18 -0800 Fix travel boulder issues (jagoly) This is a hack! We should be using a different, stationary monster type for decoration. -------------------------------------------------------------------------------- 866d13106e | regret-index | 2024-02-28 01:07:42 -0330 Fix a cast message fallthrough (CarefulOdds) Accidentally broken with reorganization in c02482b. -------------------------------------------------------------------------------- 1309dff24d | DracoOmega | 2024-02-28 00:55:53 -0330 Fix misleading messages saying that a beam was 'repelled' without RMsl Still not sure this is correct, but it's *more* correct than it was before. -------------------------------------------------------------------------------- 991db66f5c | regret-index | 2024-02-28 00:49:45 -0330 Fix a few recent vaults, tweak a recent monster's description Two vaults screwing up the silver statue naming, one vault using the wrong name for poison gas, and a rewriting attempt to make thermic dynamos focus more on being an insubstantial vortex with energy cells attached rather than a physical engine that could be rapidly deconstructed. -------------------------------------------------------------------------------- fb31f2349e | Nicholas Feinberg | 2024-02-27 20:11:15 -0800 Fix offhand Wyrmbane again (jagoly, elliptic) Cont'd from a146dc8f6d50fe5756997a64e09b11ed8337dac3. -------------------------------------------------------------------------------- e1f55a61bf | David Lawrence Ramsey | 2024-02-27 17:42:49 -0600 Move halo/umbra gear handling to equip/unequip. So that a monster wielding an item from off the floor will be handled properly. The check is now done in monster::pickup() (which might as well be monster::pickup_and_equip()) and monster::unequip(). -------------------------------------------------------------------------------- 25767b42b7 | David Lawrence Ramsey | 2024-02-27 17:05:51 -0600 Properly handle monster halo/umbra from gear. If a monster's wielding an item changes its halo and/or umbra radius, invalidate the agrid so that the halo/umbra is drawn properly on monster placement instead of after monster movement turn afterward (so that e.g. if Frederick gets an orb of light, it'll work from the beginning). It's crude, but the functions that accomplish this on the player side are all completely player-specific. -------------------------------------------------------------------------------- a61f84b8bd | David Lawrence Ramsey | 2024-02-27 16:01:25 -0600 Fix comment typo. -------------------------------------------------------------------------------- 0d0dddbf9d | David Lawrence Ramsey | 2024-02-27 15:59:21 -0600 extract_manticore_spikes() -> extract_barbs(). Since barbs aren't exclusive to manticores. -------------------------------------------------------------------------------- 8156e94834 | Nicholas Feinberg | 2024-02-27 11:47:15 -0800 Fix: blaze trees 🥬 (CarefulOdds) Make blazeheart core explosions light trees on fire, as with other big explosions. This logic remains silly :) -------------------------------------------------------------------------------- b0876beb0e | Nicholas Feinberg | 2024-02-27 11:13:16 -0800 Fix double sling overshoots (ragingrage) When wielding two ranged weapons as a Coglin, if there's an ally past the target, make sure that both shots automatically stop at the target, not just the first shot. -------------------------------------------------------------------------------- b6d6f0d0ac | David Lawrence Ramsey | 2024-02-27 10:16:11 -0600 Remove message for maximum player barbs, as it never seems to come up due to player turns. -------------------------------------------------------------------------------- 953deb8648 | David Lawrence Ramsey | 2024-02-27 10:07:15 -0600 Ensure barb_player() can't go over max dur/pow. -------------------------------------------------------------------------------- 2fc6374f7a | David Lawrence Ramsey | 2024-02-27 10:05:07 -0600 Allow specifying barb power in barb_player(). -------------------------------------------------------------------------------- 240abd312f | David Lawrence Ramsey | 2024-02-27 10:00:06 -0600 Readd lost message for extra player barbing. -------------------------------------------------------------------------------- 7be0c910eb | David Lawrence Ramsey | 2024-02-27 09:41:08 -0600 Add sanity checks to barb_player(). Assert we're not in the arena, and handle invalid turn values. -------------------------------------------------------------------------------- 03785628c0 | David Lawrence Ramsey | 2024-02-27 09:36:40 -0600 Add message for maximum player barbs. -------------------------------------------------------------------------------- 60b85d4bcb | David Lawrence Ramsey | 2024-02-27 08:52:34 -0600 Actually use turns when initially barbing. -------------------------------------------------------------------------------- 0f40c14376 | David Lawrence Ramsey | 2024-02-27 08:49:27 -0600 Move player barbing into its own function. This deduplicates the code for manticore spikes, steelbarb worm spikes, and Wu Jian barbed spike wrath. There's now a message for when you get barbed while already being barbed; and the message for initially getting barbed drops the initial "the", so it can be reused. -------------------------------------------------------------------------------- 3863d584d4 | DracoOmega | 2024-02-27 03:47:14 -0330 Actually put that fix in a place where it'll work I may be slightly panicking -------------------------------------------------------------------------------- d25475ebd2 | DracoOmega | 2024-02-27 03:43:55 -0330 Fixup yellow dracs created with Caustic Breath For those unlucky enough to still have them in their saves. -------------------------------------------------------------------------------- 344ed53f66 | DracoOmega | 2024-02-27 03:00:33 -0330 Fix monster yellow draconians doing ludicrous breath damage (jagoly) For some reason, despite having the same exact damage as every other monster that spits acid at you, they still used the player spell internally and when it was recently changed, I didn't notice this fact. -------------------------------------------------------------------------------- 08f29ac1c3 | DracoOmega | 2024-02-27 00:18:06 -0330 Fix almost all explosions becoming Nullifying Breath (jagoly) >.> -------------------------------------------------------------------------------- f581d88c14 | Nicholas Feinberg | 2024-02-26 18:36:00 -0800 Make boulders unthreatening (regret-index) -------------------------------------------------------------------------------- f716714d7f | David Lawrence Ramsey | 2024-02-26 20:21:48 -0600 Typo fix. -------------------------------------------------------------------------------- 94ed278cf8 | DracoOmega | 2024-02-26 18:49:39 -0330 Cap Sticky Flame's duration on players much lower The cap of 100 turns was leftover from the older incarnation of sticky flame and not adjusted after 0.31's changes to it. 100 turns is really a silly high number, and not something one could realistically encounter in most scenarios, but now that it can do actual relevant damage, it seems needless to have it be able to stack so high. I've set the duration at 35 which works out to exactly 5 movements from the player and is approximately the average duration of being hit by it twice. -------------------------------------------------------------------------------- 9efa865df0 | DracoOmega | 2024-02-26 18:49:39 -0330 Cap max number of things pulled by Blink Allies Encircling This used to have a power-based cap on how many allies it could blink at once. Some of the code even remained to do this, but was rendered non-functional by fb65b577b5ec8cf810b0ab130fba421e077fe631 Something being accidentally broken in the past is certainly no reason to return to it, but while this is a great spell that creates great problems, the possibility of being *completely* surrounded by enemies the instant a guardian serpent comes into view can sometimes feel a bit excessive. I'm especially concerned that constriction changes may independently make this deadlier, so let's try reducing the numbers a little and see how this feels. (It now blinks 3-6 units around the player, rather than 'as many as will fit') -------------------------------------------------------------------------------- 926e5b6e4c | DracoOmega | 2024-02-26 18:49:39 -0330 Revamp Draconian breath weapons There's been some desire to revamp how draconian breath weapons work for a while now, so this is a serious attempt at doing so. The general idea is to make pressing the button less common (ie: avoid it being 'correct' to breathe at the start of every latergame fight, even when the breath does very little) while also making the breath effects flashier and more impactful when you do. All breath weapons can now store up to 3 charges, and are on an XP-based recharge system. (You get 2 charges immediately upon hitting level 7 and upgraded saves above xl 7 will be given 3). All breaths have been adjusted somewhat - with some being overhauled more significantly - both to be more distinctive from each other and to scale better throughout the length of the game. Red Draconians: Combustion Breath Borrowing functionality from old Explosive Bolt, Combusion Breath causes a fireball to strike every target in a line. It does less single target damage than most breaths, but can do significant AoE damage if you line up a good shot. (The user is immune to damage from these explosions). Green Draconians: Noxious Breath Very similar to their old breath, but the clouds last longer (especially at higher power) and it has a power-based chance to spawn additional clouds along the sides of the main beam as you rise in xl. Pale Draconians: Steam Breath Again, very similar to their old breath, but the initial hit now does relevant damage, and the density/duration of the steam clouds improves with xl. (Keep in mind, using it is now much less free than it used to be.) Yellow Draconians: Caustic Breath Fires a penetrating acid bolt that leaves acidic fog clouds on all unoccupied spaces it passes over. These are rarely seen clouds (which yellow draconians are conveniently immune to!). Early on, these can serve as obstructions to enemies, and later on a reliable damage source that few things are immune to. Black Draconians: Galvanic Breath Fires a projectile that does electricity damage to all targets connected to what it hits - think of it as firing an arcjolt at a single (possibly distant!) cluster of enemies. (This also refactors arcjolt code somewhat and improves its animation by no longer interrupting it wheneve the message log fills up) White Draconians: Glacial Breath Fires a penetrating beam of cold which does the highest individual damage of any draconian breath and also turns anything it kills into durable blocks of ice for a little while. Good as both a direct damage solution and also to create blockers in corridors or other chokepoints. Purple Draconians: Nullifying Breath Fires a non-penetrating projectile that expands into a radius-2 explosion. It dispels magical effects on targets hit (like before) and also inflicts significant amounts of antimagic - but its damage is quite poor compared to other damaging breaths. (The user is immune to their own breath.) Grey Draconians: Mud Breath Fires a non-pentrating ball of mud which has knockback and leaves puddles of temporary mud around its destination. (Similar to Primal Wave, but muddier). Grey draconians are now unaffected by mud. Having long been the only draconian distinguished by having no breath at all, it felt a bit sad to leave them out of the fun. Breath weapon charges available are indicated by a status light (as well as in the ability menu, but after playtesting I felt it better if one didn't feel the need to bring up the ability list repeatedly to check). As draconian breath no longer has a breath cooldown (the limited charges accomplishes more than enough to prevent it from being spammed, and being able to burst some of the damaging breaths from time to time is a good thing, imo) there should be no risk of getting it confused with the old 'Breath' status light (which is additionally renamed '-Breath') All sorts of numbers here may need nudging in one direction or another, (recharge speed especially needs playfeel testing in both early and lategame) but I think this is a decent set of useful distinct effects to start from. -------------------------------------------------------------------------------- 55cc24dd7e | DracoOmega | 2024-02-26 18:49:39 -0330 Very slightly adjust monster stats after constriction changes Lower naga warrior base damage (since it's likely the changes make them more dangerous), slightly weaken tmons constriction damage, restore starspawn tentacle's long-lost accuracy. -------------------------------------------------------------------------------- 93f03418a4 | DracoOmega | 2024-02-26 18:49:39 -0330 Allow previewing EV change for armour in item descriptions This is a much more complicated question than displaying AC changes was, since EV depends on a complicated formula that hinges not only on the change in ER between the two armour being compared, but also differences in str/dex from properties on the two items. Rather than try to duplicate the complex logic of _player_evasion() or parameterize every single aspect of it (which would be brittle and error-prone if any aspect of gear properties ever changed), I have opted to 'simulate' the correct answer by internally equipping the item just long enough to calculate player EV while wearing it. As this is done by directly manipulating equipment links, it should be invisible and have no side-effects rewarding wielding/unwielding. One complication is that Crawl's item system makes it literally impossible for the player to equip (even internally) an item that isn't in their inventory. And since inventory is capped at a fixed size and might be full (and the player might be examining an item for a slot which is currently empty!), there is no normal way to gaurantee we have anywhere to put this item, even temporarily. So I have 'cheated' by adding an extra slot to you.inv beyond MAXPACK (the normal cap). This should be invisible basically everywhere, and is not marshalled (since it's only temp working space). This still makes me slightly nervous, but I have looked through as much code that directly manipulates this array as I can without seeing a problem this will cause (other than one fixed by this commit itself), and I also see no other reasonable way to do this without overhauling item links entirely. Which, while theoretically nice, is wildly out of scope here. As this process is still somewhat sketchy, I've tried to document the gotchas quite explicitly, where they exist. But I think the QoL improvement to players is well worth the hack. -------------------------------------------------------------------------------- f30d4d0f88 | DracoOmega | 2024-02-26 18:49:38 -0330 Remove some never-used virutal methods We don't have any concept of armour penalties for monsters, we never did, and I doubt we ever will. And if that somehow changes, someone can always put them back in then. -------------------------------------------------------------------------------- e1c152a988 | DracoOmega | 2024-02-26 18:49:38 -0330 Reorganize how player EV is calculated, improve clarity and display Penalties and bonuses to player EV were split among several nested functions, often with no clear separation of why something was in one place and not another (ie: modifiers for vertigo, being constricted, and having Agility were all in different functions, despite all being temporary and flat) This sometimes had subtle (or not so subtle!) strange effects such as vertigo affecting the merfolk swiming bonus, but nets and constriction not doing so. In fact, nets/webs (which supposedly reduce EV to 1/2) could have a much greater or larger effect than this (a character that had sac'd EV to Ru twice could go from 10->0 EV when netted, while a high level character in Storm Form might only go from 49->43 EV, neither of which is very like 'half') Being paralysed could even RAISE player EV, if their normal EV was low enough! I have reorganized how bonuses are applied, mostly with an aim at improving clarity and consistency, while reducing weird effects such as the above. Now multipliers to the players EV (eg: nets/webs/petrifying/merfolk swim) happen after all 'permanent' modifiers to EV are accounted for (eg: equipment, mutations), but before all 'temporary' modifiers (eg: acrobat/agility/constriction) are tallied. Effects like paralysis or clumsy now cap the player's EV at a small amount, rather than setting it to that amount (so that it will never raise it). This also improves the logic for displaying EV on the UI, which will now display any temporary modifiers that lower EV in red and ones which raise it in blue. (Only a few penalties were previously indicated in red, and a bug meant that nets' effect on EV was never shown at all!) -------------------------------------------------------------------------------- 359da3ace0 | DracoOmega | 2024-02-26 18:49:38 -0330 Change how the Repel Missiles effect works This is both a simplification and a rebalancing. Current, repel missiles works by reducing the to-hit roll of a missile by a random amount from 0-100% of its current value (or 0-50% of its value if it's a penetrating beam). In effect, this acts a little like a multiplier of the defender's EV - it does almost nothing at low EV and its effectiveness directly rises with EV - but with different math. This has several arguably bad effects: -The buff has little effect on enemies with mediocre EV (and there's been a desire to make an rMsl aura enemy, who would currently accomplish little when supporting many types of enemy) -The effect of the buff is *enormously* counteracted by EV reductions like wand of roots (which used to grant something like a +2800% chance to hit versus The Enchantress, as an extreme example). If enemies have rMsl, I think you should *feel* it in the same way that you feel enemy rF when you're attacking with fire -Scarves of repulsion were close to useless on many characters, but a lot of players did not realize this and assumed they were still providing meaningful bonuses to characters with no EV. This new system should make that a lot clearer to explain, as well as make some itemization choices viable that previously were not. This changes rMsl to be a flat +EV versus missile attacks instead, and operates even if the target is incapacitated (the magic is still pushing arrows away, even if the caster is asleep!) The old behaviour of being only half as efffect against penetrating beams is removed also (SH already offers a means of attack avoidance that specifically is worse against penetrating beams). In enemy hands, it should have a stronger effect on most enemies, and be much less negated by constriction (though constriction still helps a bunch in most cases!). In player hands, this is a buff if the player is below ~18 EV and a nerf if the player is above that (which I think should make scarfs of repulsion more appealing to more characters and maybe make itemization decisions a little more diverse) Numbers can, of course, be adjusted (and the player/enemy bonus separated), but I think it's fair that rMsl feel impactful against the type of thing it resists in a similar way that a pip of resistance would be against its. -------------------------------------------------------------------------------- 1d82c4ac31 | DracoOmega | 2024-02-26 18:49:38 -0330 New blast wand: Wand of Warping Alternates with Iceblast and Roots. This implements one of the discussed proposals for an alternate AoE attack wand to make /roots a little less common. It does a similar fireball-sized blast and has a chance to blinks everything caught in the blast radius (including you!) It does slightly less damage than iceblast (though is irresistable), but while blinking enemies has strong utility potential, in practice the scattering of them can be as much of a drawback as it is an advantage. Sometimes you can use it to juggle something away from you, other times it will bring them closer or reduce your ability to hit multiple targets. Being able to deliberately hit yourself with it as a way to escape some situations (at the cost of damage/charges) also feels like a reasonable part of this package. Sometimes more unwieldy than other wands, sometimes more useful, and definitely distinct. The blinking chance starts at 50% and scales to 90% by ~15 evocations. Make /warping not 100% -------------------------------------------------------------------------------- 9adf0d1baa | DracoOmega | 2024-02-26 18:49:37 -0330 Simplify and rebalance many things about Constriction This commit significantly affects formulas for nearly every aspect of constriction, both for and against both players and monsters. It includes bugfixes, simplifications, and deliberate rebalancing. Notable changes: 1) Constriction damage no longer scales over time. This had already been unknowingly broken for monster-applied constriction for a long time, and now is removed for players as well. This simplifies some internals, as well as making duration increases for player effects like /roots not scale so non-linearly 2) Constriction escape chance for players has been radically simplified. The old formula was very hard to intuit odds from, but when I ran the math, the player was overwhelmingly favored to escape most things by the second attempt, and still most likely to escape on a first attempt. Tentacled monstrosities were the notable exception, who were something like 2.5 times as likely to hold onto you as the next-best constrictor. Player escape is now independent of the constrictor's HD and is a flat 40%, 75%, 100% chance depending on attempts. (Despite being overwhelming likely to escape most things by 2 attempts, there was still a long tail that made it theoretically possible to fail many times in a row, and I am not convinced this is worth preserving) Monster escape chance still scales with constriction power (eg: evo for /roots or spellpower for BVC) and now includes the monster's HD in this formula - intended so that /roots can be stronger earlier game than it currently is, while weakening the hold effect lategame without any investment. (This also fixes a bug where /root hold power was based on the player's xl....) 3) Blinking and related effects now ALWAYS escape constriction, rather than merely making a 'better' attempt at escape. (It was claimed that they previously counted as '2 escape attempts', but even this was not really correct - they were a single attempt that counted as if you'd already made one.) In practice, ?blinking was extremely likely to work against anything that wasn't a tmons, to the point that I think it felt unsatisfying that sometimes it did not. Since constriction will be more dangerous in various ways now, it feels fairer to allow this to be reliable. (It also simplifies the code somewhat.) Guaranteed escapes now get different messaging to hopefully make it clearer that they work this way. 4) Changed the EV penalty for constriction. Rather than a heavy size-based multiplier for monsters and an ignorable -3 EV for players, it applies a flat -10 EV to both. This should make that penalty actually matter for players and reduce some of the most lopsided uses of the EV reduction against enemies, while also simplifying. (Monsters being constricted and monsters held in webs/nets previously shared the same complex penalty. Now constriction applies before these, but can stack. Webs are simplified to ignore monster size now also) 5) Rebalanced damage/duration of most source of constriction in the game. Enemy melee constriction damage is now randomized (it didn't used to be) and somewhat higher. (Also displays on xv!). Grasping Roots has a higher minimum duration but a lower maximum (previously only the maximum scaled with power, resulting in duration ranges like 2-21 turns). Damage is decreased (in compensation with being harder to escape and penalizing EV more). If this results in defanging Shambling Mangroves, they can be adjusted. -While enemy BVC isn't used much yet, I am intending to leave it actively into being a short-duration, higher-damage effect while roots is a high-duration, lower-damage effect. Player melee constriction is no longer based directly on player str (25 str characters used to do 5x the damage of 5 str characters!), but purely a function of XL. Damage of all player sources increased somewhat, to compensate for no longer scaling over time. Wand of roots lasts longer and does more damage at low power. (the old non-linear damage scaling from duration left it pretty mediocre at low power) 6) Because I expect melee constriction against the player to feel stronger from most sources, I have reduced the chance to apply it on hit from 100% to 66%. This may or may not turn out to be necessary, but in general I favour more impactful effects applied less often than mild ones applied all the time. 7) Better messages to differentiate roots/bvc wearing off versus being escaped from. As this affects balance of many things across many parts of the game, some time to observe how it plays out will be needed, and I imagine other numerical tweaks will happen subsequently. But I hope this is a better baseline from which to work. -------------------------------------------------------------------------------- 4120381aae | David Lawrence Ramsey | 2024-02-26 15:11:21 -0600 Remove Beogh follower blessing from wizmode. Since Beogh no longer blesses followers. The only god that does that now is TSO. -------------------------------------------------------------------------------- 623d607eb2 | Medrano83 | 2024-02-26 14:04:10 -0600 Better numeric keypad support in Linux * Fixes #3174 * Fixes the insert, delete and clear keys * Fixes the control variations * Fixes some /+ and *+ combinations * Reduces duplicate code, unixcurses_get_vi_keys is not more -------------------------------------------------------------------------------- 327783ce0c | wheals | 2024-02-26 21:00:16 +0200 Fix Duvessa shaking her weapon @at_foe@ (#2985) Fixes #2985 -------------------------------------------------------------------------------- bf54915a1b | wheals | 2024-02-26 20:26:26 +0200 Properly render formatted strings in webtiles status tooltips (#3487) Fixes #3487 -------------------------------------------------------------------------------- b60d49af14 | David Lawrence Ramsey | 2024-02-26 11:50:50 -0600 Reenable creating talismans in wizard mode. By putting '%' back in as an item class option in wizard_create_spec_object(). -------------------------------------------------------------------------------- 8322af0e9e | David Lawrence Ramsey | 2024-02-26 11:19:31 -0600 Check innate monster umbra first, before gear. As it's done in player umbra. This also means we don't have to run max() on the innate umbra value, since monsters don't have a god-passive umbra to handle first as players do. -------------------------------------------------------------------------------- 0d5b953572 | David Lawrence Ramsey | 2024-02-26 11:06:00 -0600 Unbrace -------------------------------------------------------------------------------- 7272be175e | David Lawrence Ramsey | 2024-02-26 11:01:28 -0600 Handle monster halo/umbra dual-wielding. Check for halo/umbra sources in the alt weapon slot, and handle them properly. -------------------------------------------------------------------------------- 9fcb8cb90e | David Lawrence Ramsey | 2024-02-26 10:59:09 -0600 Handle monster h/u of radiuses other than 3. Use whichever radius is biggest, like the player versions. Currently no item-based halo or umbra has a radius bigger than 3, but the cases should work. -------------------------------------------------------------------------------- 854a88b85f | David Lawrence Ramsey | 2024-02-26 10:52:36 -0600 Handle monster umbras accurately, like halos. A monster with an innate umbra and wielding umbra-inducing gear will now properly have whichever umbra radius is bigger. No monsters currently have both at the same time, but the case should work. -------------------------------------------------------------------------------- 8f43bd2636 | David Lawrence Ramsey | 2024-02-26 10:52:36 -0600 Rename a variable in monster::halo_radius(). And move its initialisation down a bit. -------------------------------------------------------------------------------- 926718a23e | wheals | 2024-02-26 18:40:35 +0200 Checkwhite and fix tag upgrade. -------------------------------------------------------------------------------- 6800aa8109 | Wizard Ike | 2024-02-26 18:34:04 +0200 Remove an unnecessary check -------------------------------------------------------------------------------- bc85f96775 | Wizard Ike | 2024-02-26 18:34:04 +0200 Don't reactivate autopickup when shafting a friendly invisible monster -------------------------------------------------------------------------------- 1188cb50b8 | Wizard Ike | 2024-02-26 18:34:04 +0200 Reactivate autopickup when polymorphing an invisible monster makes it friendly -------------------------------------------------------------------------------- ce2fa97723 | Wizard Ike | 2024-02-26 18:34:04 +0200 Fix autopickup not deactivating when charming wears off invisible monsters -------------------------------------------------------------------------------- f82703d296 | Wizard Ike | 2024-02-26 18:34:04 +0200 Fix toggling of autopickup when polymorphing monsters -------------------------------------------------------------------------------- c630c63b3f | Wizard Ike | 2024-02-26 18:34:04 +0200 Fix autopickup sometimes not reactivating when invisibility ends on a monster -------------------------------------------------------------------------------- 85cd9b6c44 | Wizard Ike | 2024-02-26 18:34:04 +0200 Fix autopickup not being reactivated when shafting monsters -------------------------------------------------------------------------------- aad2c9efd1 | Aliscans | 2024-02-26 18:11:57 +0200 Change debug_make_trap and debug_make_shop to use PromptMenu. This reduces the amount of typing and memory needed to use these, which seems like an improvement to me. Neither command has many valid options, which helps. -------------------------------------------------------------------------------- ce8dbf9607 | Aliscans | 2024-02-26 18:11:54 +0200 Use a PromptMenu for various selections in wizard mode. Various wizmode functions functions printed a menu in the message window, but didn't check if it would fit, and thereby hid some of the options. Make some use PromptMenu instead. This displays the menu in a separate popup if it's larger than the message window, so doesn't share this issue. -------------------------------------------------------------------------------- 70f7560b1c | elliptic | 2024-02-26 01:16:10 -0500 Fix Coglin delay-averaging rounding Previously if you dual-wielded a 0.6 delay weapon and a 0.7 delay weapon (for instance) all your attacks would be delay 0.6, instead of half being 0.6 and half being 0.7. -------------------------------------------------------------------------------- 2eb335deba | David Lawrence Ramsey | 2024-02-25 19:13:51 -0600 Add talisman references to Zin's Recite speech. Since using them will make Zin excommunicate you. -------------------------------------------------------------------------------- 694b92fbcc | David Lawrence Ramsey | 2024-02-25 18:41:41 -0600 Improve Wu Jian wrath wrtr barbs/slowness. For barbs, increase the duration of barbs rather than setting it, capping it at 12 turns, and set the barbs' power to a maximum of 6, depending on what it already was set to. These limits are modeled after those of manticore barbs. For slowness, use slow_player() to make the player slow for a certain duration, since that function will handle things properly if the player is already slowed. These changes handle the cases where the player already has barbs in them, and/or is already slowed, when Wu Jian wrath kicks in. -------------------------------------------------------------------------------- d9500d9d98 | regret-index | 2024-02-25 20:41:51 -0330 New decorations: (unmoving) boulders We should be very sparing on spreading almost any of various monsters used to make various spells work. Several of them are very weak as threats (fire vortices, ball lightnings), and several of them are essentially adding new monsters that have to go over rigorous design criteria entirely seperate of their functionality for a spell- for example, we're almost certainly not going to make dryads or cactus giants anything besides glassed monsters in a gimmick portal if every. That said, Brom's Barrelling Boulder makes an extremely physical object that, when made to not move as the default placement works, can reasonably fit in any number of vaults already placing stones, large rocks, crumbled columns, shafts, and so on looking for earthen decoration. The boulder has a different tile when it's not rolling, and uses "dbname:still_boulder" for a description when not moving. Do note that they should not be used for any meaningful walls, however, since we've already got normal plants covering most of that design space already. The placeholder tile is an extreme edit of canofworms's Brom's spell icon. By the way, new rule: no sokoban vaults. -------------------------------------------------------------------------------- 9ce6b883f8 | David Lawrence Ramsey | 2024-02-25 14:39:26 -0600 Rename obsolete tile references to /disint. It was renamed to WAND_MINDBURST ages ago in non-tiles code, even if its actual enum value hasn't changed. So rename it WAND_MINDBURST in tiles code as well, and rename item/wand/i-disintegration.png to item/wand/i-mindburst.png accordingly. -------------------------------------------------------------------------------- 64808676d3 | David Lawrence Ramsey | 2024-02-25 12:26:34 -0600 Make DS foul flame activate a bit more often. Instead of 10% chance at mut level 1, 25% chance at mut level 2, and 40% chance at mut level 3, make it 15% chance at mut level 1, 30% chance at mut level 2, and 45% chance at mut level 3. -------------------------------------------------------------------------------- ec4258ea6e | David Lawrence Ramsey | 2024-02-25 11:34:36 -0600 Add desc for Trog's Regen and Will++ combo. This is mostly so mouseovers of the status on webtiles will display both of its effects, instead of just the regen part. -------------------------------------------------------------------------------- a82d83fd34 | David Lawrence Ramsey | 2024-02-25 11:05:48 -0600 Make autotravel account for binding sigil immunity. -------------------------------------------------------------------------------- bc26b63f61 | David Lawrence Ramsey | 2024-02-25 08:26:31 -0600 Increase gold value of foul flame brand. Since it's artefact-only. It also shouldn't match holy wrath here, because it does more damage. -------------------------------------------------------------------------------- c36836c417 | David Lawrence Ramsey | 2024-02-25 07:20:38 -0600 Fix typo. -------------------------------------------------------------------------------- 46bb8dd638 | regret-index | 2024-02-25 04:43:45 -0330 New(?) monster: thermic dynamos, for Elf and vaults elsewhere These new monsters are meant to provide another notable nonliving monster to Elf beyond the dancing weapons, as well as pick up the fire and ice theme for former crystal bolts much more directly by being bejewelled mobile elemental turbines. They're meant to be a weaker glass cannon compared to crystal guardians- swapping their notable AC, rElec+++, and a bit of spellpower for passable evasion, fast movement speed, and two-individually weaker hits of AF_FIRE + AF_COLD. Arguably they're also a little reminscient of zephyrmancers, as low-AC bolt-bouncers in Elf: on that front, they're much harder to kill in exchange for a far easier resistance and respecting more of AC. In exchange for their overall weaker or comparable state they're a bit more common in Elf and various vaults than crystal guardians were in V, occasionally banding in duos, and also replace the latter's use in late D. To help clarify their particular mechanics and to distance further from the old crystal theme, Crystal Bolt spell's dual-element possibilities have also been split into two seperate spells of Rebounding Blaze and Rebounding Chill, which are slightly-rescaled copies of Bolt of Fire and Bolt of Cold aside from the wall bounce. I don't know if future uses might be found for these spells or these monsters, but they give a little more variety past Lair branches in conjunction with the change to V's crystal guardians. Their placeholder tile is a mix of DD's old Enter the Abyss tile and canofworms's old tile for the Staff of Battle (before that got orbified). The spell icon tiles, like Crystal Bolt before them, mix together roctavian's Bolt of Fire, Bolt of Ice, and stone wall tiles. -------------------------------------------------------------------------------- 88e274e576 | regret-index | 2024-02-25 04:31:54 -0330 C. guardians / echidnas: Crystal Bolt 🡲 Crystalizing Shot (PleasingFungus) While "notably-resistant melee enemy with a ranged attack" as an archetype for monsters has a variety of reasonable manifestations as this point, crystal guardians are a bit weird. The earthen theme they might brandish as a monster made entirely of crystal instead focuses elsewhere, over to the connection crystal walls have with bolts of cold and bolts of fire. That particular mechanic's prominence has been mildly reduced over time, since wands lost both and spells lost the former, and there's been a little reduction of it versus other forms of it even on monsters (no more deep elf conjurers, removed off of necromancers and ancient liches). While it lets them fire through some other earthen and icy monsters, it's a bit off compared to more direct earth themes of raw damage with a side bit of corrosion at most. Since Vitrify seems to have worked out relatively well as a dangerous hex to throw around, I'm making them fire off a short-range projectile shot that applies the status two thirds of the time it hits and deals any damage. Refined crystal monster making one as fragile as unrefined crystal has a certain cruel logic to it, and it's one last reasonable vector to toss the effect around for a while now by being much more threatening to the high-ac, low-ev characters than Fragile otherwise potentially threatens the reverse. It does do less damage on hit than the crystal bolts did, since while it can't bolt-bounce it's inherently multiplicative for other monsters too (like the mighting peacekeeper bands in V they show up in most games in, or the terror that Desolation tends to be). To orient them towards their focus on melee here, they also get a few tweaks towards slightly less HP and AC but slightly more melee damage. This also gives crystal echidnas the aforementioned Crystallizing Shot over Crystal Bolt. They're quite weak for extended and mostly meant to be generic elemental fodder for Dis, which isn't a terrible position, but as a monster designated only for such late positioning they could do with a mechanic of any much note when they're otherwise a faster, weaker version of a monster already seen in V. Said vitrification should be terrifying in Dis, which admittedly might warrant some adjustments on Dis a little later. The Crystal Bolt spell hasn't been removed, as a one-off use of bolt-bouncing on an element besides lightning is a reasonable mechanical niche another monster could use with some renaming. The new Crystallizing Shot spell tile uses both snw-0's LCS icon and Bloax's Corona icon. -------------------------------------------------------------------------------- d044c6f0f0 | David Lawrence Ramsey | 2024-02-25 00:54:35 -0600 Fix punctuation. -------------------------------------------------------------------------------- c2b5402982 | David Lawrence Ramsey | 2024-02-25 00:06:18 -0600 Fix spelling. -------------------------------------------------------------------------------- b91d5d9764 | David Lawrence Ramsey | 2024-02-24 21:22:05 -0600 Add more flower names to artefacts. -------------------------------------------------------------------------------- 255bbe2f98 | David Lawrence Ramsey | 2024-02-24 13:40:21 -0600 Adjust ETC_FOUL_FLAME's colours again. Its portion of glowing colours now consists of bright versions of both of its umbra colours, white and brightmagenta, instead of just the former. -------------------------------------------------------------------------------- df13d27894 | David Lawrence Ramsey | 2024-02-24 13:01:08 -0600 Add placeholder tiles for new "Brilliance". The new item tile is a palette-tweaked version of UNUSED/weapons/eveningstar7.png, and the new hand1 tile is a palette-tweaked version of player/hand1/eveningstar2.png. Also, rename the new hand1 tile from mace_of_brilliance.png to eveningstar_brilliance.png, since "Brilliance" has been an eveningstar for awhile, and move both the old item and hand1 tiles to UNUSED. -------------------------------------------------------------------------------- 38b2580584 | regret-index | 2024-02-24 01:45:43 -0330 Vault review without end See all the other vault review commit messages about header clean-up and balancing according to stats and slipping in a few more recent items where they're appropriate and what not. Also worth of note: * Throw around a few more of the new randart-specifying properties in some heavily themed vaults and wizlabs. * Add a few more vaults into the Elf:1 misc_elf_vault slot, and reduce the presence of the single one of them that places runed doors. * One new incomplete effort is to start specifying all Abyss non-rune non-exit vault items, as both higher in overall quality (since the kills-to-escape and rune detection changes have hurt actually bothering with vaults) but also of lower potential value, to discourage deliberately perusing earlier Abyss floors for items when they're not dangerous (such as before doing ziggurats or Hells). -------------------------------------------------------------------------------- 65538d4c26 | regret-index | 2024-02-24 01:45:43 -0330 Put scrub nettles in default auto-excludes (Ge0FF) Hostile burning bushes didn't get an auto-exclude, so I missed it for the, well, one main game vault use. Nettles should be passable rare earlygame monsters anyway as long as they're in tunnels to work with their range 4. Also, make autoexclusion radiuses for nettles and starflowers both correspond to the maximum range they can hit the player, rather than assuming they hit from full LoS. -------------------------------------------------------------------------------- ee0a85e2a4 | Nicholas Feinberg | 2024-02-23 20:16:12 -0800 Remove Pakellas From the OSEL set. -------------------------------------------------------------------------------- cef59e7467 | Nicholas Feinberg | 2024-02-23 20:14:16 -0800 Remove W*/P* Don't allow trying to wear or put on arbitrary objects. You can't! -------------------------------------------------------------------------------- 7a634219b2 | Nicholas Feinberg | 2024-02-23 20:10:01 -0800 Remove Beogh item gifts From the OSEL set. -------------------------------------------------------------------------------- 54e5184e7a | Nicholas Feinberg | 2024-02-23 20:08:33 -0800 Coglins: --Move, +-Rings & +Resist -Move was added to Coglins to add tactical variety, and to balance out their big upside (dual wielding) without making major and undesirable nerfs to skill aptitudes or HP. There were some upsides to -Move-on-action, and it might someday return in some other context, but ultimately very few people enjoyed it - even with considerable work put into UI improvements, it still broke flow. Instead, let's try doubling down on Coglins' 'no fast swap' gimmick and remove their ability to wear rings. (It'd interfere with their magic exo-arms, see.) I'm generally not particularly fond of equipment restrictions, since they reduce the fun of finding gear (one of the juciest parts of Crawl), but this is at least novel and has some other interesting interactions with the rest of the species. To partially compensate for this downside later on, Coglins now gain rF+ rC+ at XL 13. We might or might not eventually replace this with a choice between a few different 'upgrades'. Minor notes: - Coglins can still wear rings if they find the Macabre Finger Necklace. This is very silly and the UI isn't great, but unrands are allowed to be silly. - Possibly we should remove rings from the % screen rather than showing them as 'unavailable'. -------------------------------------------------------------------------------- a46d8fb2d5 | Nicholas Feinberg | 2024-02-23 18:03:47 -0800 Fix: marshall offhand doll parts (Namsan) aiiiiiiiii -------------------------------------------------------------------------------- 5d8ddb3428 | Nicholas Feinberg | 2024-02-23 17:52:26 -0800 Fix: no mon weap inscrips in combat (riverfiend) Matching the behavior for player weapons. "The goblin hits you with the +3 mace of Famine {flame, rC+ rF- Stlth++}" doesn't need the full inscription included every time, or any time. -------------------------------------------------------------------------------- c8eefc90e7 | David Lawrence Ramsey | 2024-02-23 16:42:52 -0600 Fix non-damaging barbs of Wu Jian wrath (#3507). The ATTR_BARBS_POW attribute wasn't set. -------------------------------------------------------------------------------- 5f989adc20 | David Lawrence Ramsey | 2024-02-23 15:04:09 -0600 Tweak punctuation. -------------------------------------------------------------------------------- a4b76d3f39 | David Lawrence Ramsey | 2024-02-23 14:50:01 -0600 Make slick slippers give binding sigil immunity. Also document this in their description. -------------------------------------------------------------------------------- 5664dac8fc | David Lawrence Ramsey | 2024-02-23 14:50:01 -0600 Move binding sigil immunity into a function. Accordingly, disable the warning for stepping onto binding sigils if you're immune. Also, change references to "your" sigil to "the" sigil, so that it's not player-specific, and change the message for when someone's immune to it to work for both players and monsters. -------------------------------------------------------------------------------- f15d296471 | Monkooky | 2024-02-23 13:26:13 -0600 Datify changed_physiology Add a changed physiology bool to form class and data. [Committer's note: Updated for current trunk, and did checkwhite.] -------------------------------------------------------------------------------- 0b0b42bae7 | David Lawrence Ramsey | 2024-02-23 12:09:55 -0600 No moving via trampling/dragging if bound. This comes into effect with Sigils of Binding and Yred's Fathomless Shackles. Closes #3547. -------------------------------------------------------------------------------- 3b8dbc4376 | gammafunk | 2024-02-23 11:46:51 -0600 fix: The artprops specifier for monster item specs This commit allows artprops to be used in any items specified as part of a monster's specification, including wizard mode and DES. I've checked through all other calls of `items()`, and it doesn't seem there's any other place missing these fixed properties being passed as an argument. -------------------------------------------------------------------------------- db0f5c71e3 | David Lawrence Ramsey | 2024-02-23 08:52:36 -0600 Tweak more punctuation. -------------------------------------------------------------------------------- 0c113e4b92 | David Lawrence Ramsey | 2024-02-23 06:33:45 -0600 Tweak punctuation. -------------------------------------------------------------------------------- 26e39782c6 | elliptic | 2024-02-23 03:42:34 -0500 Swap Coglin and Barachi in the species selection screen Even if -Move is replaced with something else, Coglin still seems likely to be more complicated. -------------------------------------------------------------------------------- 080537f31e | David Lawrence Ramsey | 2024-02-22 22:27:37 -0600 Fix wording. -------------------------------------------------------------------------------- f785c728e9 | David Lawrence Ramsey | 2024-02-22 22:21:44 -0600 Fix typos. -------------------------------------------------------------------------------- 3324ac0059 | gammafunk | 2024-02-22 22:14:37 -0600 fix: Exclude unrands from wizmode randart stats Unrands are in fact not randarts. Unrands might even be fixedarts, but no one really remembers what a fixedart is. -------------------------------------------------------------------------------- f641b5e0b5 | gammafunk | 2024-02-22 22:14:37 -0600 doc: Document the artprops item spec tag In the DES syntax guide, add a hopefully complete description of how to use it along with a few important notes. -------------------------------------------------------------------------------- e4683972fd | David Lawrence Ramsey | 2024-02-22 21:43:00 -0600 Fix messaging in Jinxbite sprite message. Louise should be bonked with "her" weapon, not "its" weapon. -------------------------------------------------------------------------------- 4bed94c0a3 | DracoOmega | 2024-02-23 00:05:59 -0330 Don't give apostle challenges while the player is under penance It's a strong feedbad when you can't even recruit the apostle after you win it (since you have no god abilities while penanced) This doesn't stop the unfortunate situation of it feeling bad if you somehow get penance *during* a challenge, but I can't simply send the challenge away the moment this happens or the player could deliberately attack their own apostles to end it at-will. -------------------------------------------------------------------------------- 3038c6faba | DracoOmega | 2024-02-23 00:02:17 -0330 Fix a possible crash I somehow keep forgetting it's possible for agent() to return null. -------------------------------------------------------------------------------- 36b1df8bed | DracoOmega | 2024-02-22 23:47:20 -0330 Fire final effects after _pre_monster_move Enchantments tick in this function (notably poison and sticky flame), which can result in monsters dying. Sometimes those deaths trigger a avoided_death_fineff (Beogh deathbed conversion, defeating apostles, bound souls being created). If that fineff is not processed before another monster acts, the dying monster will still be in an invalid state and can cause an assert if another monster tries to attack it. This is hard to trigger on purpose, but it still seems reasonable to fire final effects after each monster does its pre_move. -------------------------------------------------------------------------------- 4e6cf12409 | DracoOmega | 2024-02-22 23:47:15 -0330 Fix reflected projectiles causing the player penance if they hit an ally If the player fired a projectile at an enemy who reflected it back, and the it missed the player and struck an ally behind them, this would be misattributed to the player themselves (and cause penance for Beogh / good gods). Change the conduct check to look at whether the agent() is the player (which properly handles reflection blame) rather than the original killer_type. -------------------------------------------------------------------------------- af4921d101 | David Lawrence Ramsey | 2024-02-22 14:54:39 -0600 Add "Brilliance" quote. -------------------------------------------------------------------------------- 1f14e3f6c3 | elliptic | 2024-02-22 14:22:43 -0500 Don't place hand cannon clouds on top of the player Previously they were more likely (1/3 chance) to place on top of the player than on any surrounding square, since fair_adjacent_iterator always iterates through the center first. Clouds on top of the player are also probably less nice decoratively while being more obstructive functionally (e.g. they block catoblepas breath), so let's just only place them adjacent to the player. (This commit also removes a small chance of not getting any cloud even when there is still room adjacent to the player.) -------------------------------------------------------------------------------- e3e1ee326f | Nicholas Feinberg | 2024-02-22 11:05:43 -0800 Fix tab with off-hand reaching -------------------------------------------------------------------------------- 4efcb1c6c7 | patrick | 2024-02-22 11:40:26 -0600 Touch up the Clear Minds Boutique just a skosh Talismans can be randarts too, so let's let them join the fun. -------------------------------------------------------------------------------- 7902d401d8 | patrick | 2024-02-22 11:40:26 -0600 Add a shop using the new artprops feature (gammafunk) As requested, a vault that uses the new artprops feature. Surprising no one, it's a shop! The Clear Minds Boutique generates four randarts which are hardcoded to include Clarity as one of their properties. -------------------------------------------------------------------------------- 387adf243f | gammafunk | 2024-02-22 11:40:26 -0600 feat: Simplify formulas for artefact properties (elliptic) When making an item randart, there's a binomial(7, 0.3) distribution used to assign quality from a level of 1 to 7. This is currently done by taking a binomial with 7 trials and taking a max of this and 1. This commit simplifies this to just be a 1 + binomial(6, 0.21), which has a similar mean. Additionally this commit simplifies the distribution for the number of bad artefact properties added. The current implementation is a min of a binomial distribution and the max allowed bad properties, which is 2 minus the number of any fixed bad properties. This binomial has a number of trials randomized based on the quality level and random rounding, with a fixed `p` of 0.3. The new implementation removes the min and the dependence on quality in the binomial, making the number of trials simply be the max allowed bad properties. The `p` is reduced to 0.21 to keep the mean number of bad properties similar to as before. This distribution will lead to more randarts having only 1 bad property instead of 2 and will even out the numbers of bad properties across randarts by quality. It's not clear that the original relationship of bad props to quality was necessary and this new distribution is much easier to reason about. Here are stats for `any randart` from 10k iterations each both before and after this distribution change: Before: Max # of props = 6, mean = 2.87, median = 3 Max # of good props = 5, mean = 2.45, median = 2 Max # of bad props = 2, mean = 0.42, median = 0 Max (good - bad) props = 5, avg # = 2.03 After: Max # of props = 6, mean = 2.97, median = 3 Max # of good props = 6, mean = 2.54, median = 3 Max # of bad props = 2, mean = 0.44, median = 0 Max (good - bad) props = 6, avg # = 2.10 The means are quite similar for both types of props, so this change shouldn't have a large effect, but will make future reasoning about randart balance easier. -------------------------------------------------------------------------------- 84f73fd571 | gammafunk | 2024-02-22 11:40:26 -0600 feat: Rework wizmode artefact and randart stats This commit improves a number of aspects of the Ctrl-I wizmode command that generates statistics for acquirement and randarts. The randart stats subcommand now accepts an arbitrary item spec instead of prompting for an inventory item. This allows us to examine randart stats of arbitrary item classes that can create multiple types of items, as well as stats for randarts that use the newly implemented fixed properties. This subcommand now prompts for a number of iterations instead of always making ~27k. Despite doing a bit more work in item generation, it still runs quickly enough to generate statistics for 10k items in a few seconds on my machine. The item spec used forces randart, but for item specs that can generate non-randart items (e.g. `any` can generate consumables), such items are discarded and not used in the statistics. The subcommands now write to the distinct files "acquirement_stats.txt" and "randart_stats.txt" instead of using the same ".stats" file. Output file creation now happens only after all input is validated and output progress is simplified. For both subcommands, item creation happens at the unseen origin location (0,0), eliminating message spam. Finally, the subcommands are refactored to use central data accessors for artefact properties, egos, etc, instead of maintaining their own independent lists. -------------------------------------------------------------------------------- 1e417eb1c6 | gammafunk | 2024-02-22 11:40:26 -0600 feat: Specifying fixed properties for randarts This commit adds support to item_spec to specify an arbitrary set of artefact property values. The values are given in any item spec according to the following syntax: artprops:prop1:val1&prop2:val2 ... Matches against property names are case insensitive, and properties like rPois and ^Contam that are boolean can omit specifying the value. This syntax can be used in any item spec, including when defining items for vaults, giving items to monsters, etc. When making the item, the randart property randomization considers the fixed values in terms never overriding these values. Randart generation considers how many good/bad properties the fixed ones add to the item and proceeds with its usual randomization process, which means that it may add additional random properties. Some error checking is done on the given value ranges to prevent negative values on properties that are only ever positive and to only allow 0 or 1 on boolean values. -------------------------------------------------------------------------------- 08bcfe7efd | David Lawrence Ramsey | 2024-02-21 23:05:59 -0600 Fix "Brilliance" inscription: Halo -> Umbra. -------------------------------------------------------------------------------- 7d46fac7e4 | elliptic | 2024-02-21 22:07:31 -0500 Don't fail to wait off Coglin -Move due to haste randomization When hasted player_speed() returns either 6 or 7 randomly, so it was possible to have -Move duration set to 7 and then have a 6-aut wait action afterwards. This commit lowers the -Move duration by 1 to make room for such randomization. -------------------------------------------------------------------------------- e345137cd0 | DracoOmega | 2024-02-21 21:29:22 -0330 Fix giving the player exactly 1 XP for kills they were uninvolved with Lightly broken when I took out the 2x multiplier for player damage done, when the last of the ally xp penalty was removed. -------------------------------------------------------------------------------- 80b497e092 | David Lawrence Ramsey | 2024-02-21 18:56:14 -0600 Give players with foul shadow night vision. Since it's another source of umbra, and it's coming from them anyway. -------------------------------------------------------------------------------- 0bc28be9fb | David Lawrence Ramsey | 2024-02-21 17:43:23 -0600 Let ghost demons have umbras. Currently only used for Pan lords with foul flame, who all get radius-1 umbras. -------------------------------------------------------------------------------- d6b1d19087 | David Lawrence Ramsey | 2024-02-21 17:20:20 -0600 Consolidate halo/silence aura/umbra checks. -------------------------------------------------------------------------------- 448f42529f | David Lawrence Ramsey | 2024-02-21 14:08:57 -0600 Adjust parameters for setting monster gods. _place_monster_set_god() only uses mgen_data's monster class and place, so use those as parameters instead of the whole mgen_data struct. Also, make it take the monster before those two parameters. -------------------------------------------------------------------------------- 937e6280d3 | David Lawrence Ramsey | 2024-02-21 14:08:57 -0600 Simplify setting monster gods a bit. In _place_monster_set_god(), since priest monsters default to GOD_NAMELESS if everything else fails, return after setting priest monsters' god. That way, there isn't quite as long of an if/else chain. -------------------------------------------------------------------------------- efc72b7d41 | David Lawrence Ramsey | 2024-02-21 14:08:57 -0600 Make setting monsters' gods its own function. _place_monster_set_god() is split out of place_monster_aux(), but is otherwise unchanged. -------------------------------------------------------------------------------- 4368416496 | Nicholas Feinberg | 2024-02-21 11:54:36 -0800 Fix: allow Vhi's with -Move (Drazool) Since it's no longer Palentonga's Rolling Charge, it's a translocation effect now. As such, it bypasses -Move and is only blocked by -Tele, stasis, being a tree, etc. -------------------------------------------------------------------------------- 123bbc5fe1 | elliptic | 2024-02-21 11:34:14 -0500 Don't apply -Move on Coglin if there are no monsters left Try this out since this seems responsible for a fair proportion of the annoyances, e.g. players immediately wanting to manually move at the end of a fight. This commit also tries to wipe existing -Move that might still be remaining from a previous Coglin action if the action that concluded the fight was fast (e.g. a fast melee attack). (In principle maybe this part should be implemented somewhere else so that -Move is also removed if the action concluding the fight was a fast action that doesn't normally cause -Move (e.g. swapping a ring and having an ally kill the last enemy in that 0.5 time), but that seems super rare so this should be sufficient for testing the change.) Note that invisible monsters still count for this, so this does leak their existence - this seemed better than alternatives. -------------------------------------------------------------------------------- 28b100f618 | David Lawrence Ramsey | 2024-02-20 19:30:12 -0600 Move foul_flame_monster() into melee_attack. Since the other demonspawn mutations are handled there. Also, improve debug messages, set beam.thrower like cloak of flames and passive freeze, and add proper punctuation for greater damage. -------------------------------------------------------------------------------- 65e0ca0ff2 | Nicholas Feinberg | 2024-02-20 17:23:14 -0800 Fix: don't segfault on offhand unrands Set unrand_reacts to the slot corresponding to the hand we're actually wielding an unrand in, not always EQ_WEAPON. This also fixes artefact staves with world_reacts functions, if they existed, which they don't. -------------------------------------------------------------------------------- ba97123464 | Nicholas Feinberg | 2024-02-20 17:23:14 -0800 Refactor unrand_reacts We already set you.wield_change in every relevant world_reacts unrand func. -------------------------------------------------------------------------------- b849e8b480 | David Lawrence Ramsey | 2024-02-20 17:31:01 -0600 Add a few missing foul-flame-related bits. It can rarely show up in the chaos brand, so it should be displayed then. Also, like holy wrath, it needs to do damage to function, even if nothing is currently immune to it. -------------------------------------------------------------------------------- 34023cf50c | David Lawrence Ramsey | 2024-02-20 13:16:47 -0600 Add a TODO. Pan lords with foul flame touch would ideally have radius-1 umbra, but there's no easy way to implement that right now. -------------------------------------------------------------------------------- 42da790b35 | DracoOmega | 2024-02-20 14:21:10 -0330 Fix Vhi's destination checking being player-centric (Sergey) Even if a monster was casting Vhi's, it used only the player to determine whether a destination tile was safe. This meant that flying monsters would refuse to dash onto lava if the player was not flying, but also that land monsters would happily dash into lava if the player *was* flying (and then crash). Thank you for your sacrifice, Bogfrid. You will be remembered. -------------------------------------------------------------------------------- f8fd08910c | elliptic | 2024-02-20 12:38:27 -0500 Make autoexplore wait for -Move to end -------------------------------------------------------------------------------- ceb5a3b12e | Nicholas Feinberg | 2024-02-20 08:06:41 -0800 Fix: wands don't nerf legs (elliptic) -------------------------------------------------------------------------------- 59b7d7490c | Nicholas Feinberg | 2024-02-20 07:58:09 -0800 Fix offhand wielding unrands (dolorous) Closes #3571. -------------------------------------------------------------------------------- 2cd877353e | Nicholas Feinberg | 2024-02-20 07:46:05 -0800 Fix: Coglins get -Move for ranged/throwing -------------------------------------------------------------------------------- 3d4e8de404 | Nicholas Feinberg | 2024-02-20 07:45:04 -0800 Fix offhand-only attacks -------------------------------------------------------------------------------- 744942f433 | regret-index | 2024-02-20 03:06:04 -0330 Fix a door ficus (elliptic) -------------------------------------------------------------------------------- d27e1419c2 | regret-index | 2024-02-20 03:04:45 -0330 Even more non-player spell icon tiles + Yred ability icon tiles Still placeholdery, still stitching together from other old tiles, still better than pawprints for all the webtiles players (and maybe local tiles players eventually? Who knows?) Spell sources: * Aura of Brilliance: Sastreii's Recieve Forbidden Knowledge icon and Brilliance monster status icon. * Call of Chaos: CanOfWorms's Word of Chaos icon. * Call Tide: roctavian's old watery Shoals stairs. * Concentrate Venom: Sastreii's status icon plus Bloax's Corona icon. * Crystal Bolt: roctavian's Bolt of Fire + Bolt of Ice + stone wall tiles. * Drain Magic, Sap Magic: snw-0's icon for Pakellas's brief Sap Magic invocation + Sastreii's antimagic icon. * Dream Dust: CanOfWorm's dream sheep tile. * Druid's Call: snw-0's recall icon + Sastreii's bunyip and toad tiles. * Entropic Weave: Ultraviolent4's corrosion status icon + Pete Hurst's cobweb tiles. * Fire Summon: nlavsky's Major Servant icon, previously used for the Staff of Asmodeus's own summon ability. * Malign Offering: Sastreii's Dark Bargain icon, coloured like Kiku icons. * Regeneration: roctavian's Regeneration spell icon. * Sheza's Dance: Sastreii's Pain Branding icon, CanofWorms's Fugue of the Fallen icon, snw-0's dancing weapon status icon and summoning sigil, roctavian's glaive + morningstar tiles. * Summon Illusion: DD's old icon for Yred Injury mirror + snw-0's sigil. * Throw Ally: PleasingFungus's Lesser Beckoning icon + CanOfWorms's Jinxbite icon. * Throw Klown Pie: snw-0's jester pie tile and jester cap tile. * Weakening Gaze: The original rltiles See Invisible plus Sastreii's Weak status icon. Ability sources: * Hurl Torchlight: snw-0's Hurl Damnation + snw-0's Cleansing flame icons. * Fathomless Shackles: snw-0's Sanctuary + CanOfWorm's Break The Chains. This also comes with a few alterations to already present monster summon spells icons, to fit more in frames or with newer tiles than prior, and some reorganization and description adjustment alongside it. -------------------------------------------------------------------------------- 8d7c456967 | DracoOmega | 2024-02-20 02:39:06 -0330 Allow scrolling the god info panel up/down So that one can actually read a recruit's stats in an 80x24 console window, should someone wish to do so. For some reason, key events weren't being passed along to the default widget input handler here, which actually meant that the oldBeogh follower list (which could theoretically get even longer than this) did not scroll either. -------------------------------------------------------------------------------- 0ac29734fc | Nicholas Feinberg | 2024-02-19 21:56:04 -0800 Fix: don't rev when shooting air (elliptic) This check seems OK for now, though it's a bit bad against invisible foes. -------------------------------------------------------------------------------- 4da7c8d6d1 | Nicholas Feinberg | 2024-02-19 21:40:07 -0800 Fix: don't call offhand weapons 'worn' (elliptic') -------------------------------------------------------------------------------- dbcfc4233b | David Lawrence Ramsey | 2024-02-19 22:10:51 -0600 Adjust "Brilliance" description a bit. Foul flame is only mostly gone, so to say only its lesser version survived is not quite right. -------------------------------------------------------------------------------- f9bc0de034 | DracoOmega | 2024-02-19 23:51:09 -0330 Fix prompt for recruiting your first apostle using the wrong hotkey Because the code hadn't technically given the player access to the Recruit ability yet, the game wouldn't properly report on what hotkey it WOULD have, if the player had it. (Also fix a bug with it still printing the reminder if the player had apostles, but they were all dead or elsewhere) -------------------------------------------------------------------------------- ba67e77f49 | DracoOmega | 2024-02-19 23:31:57 -0330 Improve apostle UI - show brief stats in Dismiss ability / overview Remembering which of multiple dead apostles had which spells / items can be a little hard, and comparing a new recruit to multiple apostles (some of whom may also be dead) has a bit more UI friction than I wanted. So now you can see a simplified overview of your apostles' stats (plus those of an available recruit!) all at once in the religion screen (replacing the previous mostly-useless companion list, leftover from older days). Each Dismiss Apostle ability will also show the same stat place for the apostle you're dismissing. This block shows name, class, HP/AC/Damage, equipment, and spells. It's generally much less featureful than xv, but should still be a meaningful UI improvement. Additional polish may come in future, but I felt that this already provides enough QoL benefit that it's worth pushing. -------------------------------------------------------------------------------- 52729c3a44 | David Lawrence Ramsey | 2024-02-19 19:29:10 -0600 Adjust ETC_FOUL_FLAME to make it shadowy. It now consists of umbra colours (darkgrey and magenta), plus the occasional flicker of white to show that it's glowing. -------------------------------------------------------------------------------- 03ac3cc0af | David Lawrence Ramsey | 2024-02-19 17:00:31 -0600 Extinguish foul flame's last glow. Make the wielding messages for foul flame weapons mention blackness instead of radiance. -------------------------------------------------------------------------------- 0bcb2a7693 | DracoOmega | 2024-02-19 19:20:10 -0330 Don't offer Beogh conversion to Demigods (ragingrage) They couldn't actually *join*, but would still get peached to as if they could (and even get the Join Beogh ability, which didn't actually work). -------------------------------------------------------------------------------- c0d2f6eb97 | David Lawrence Ramsey | 2024-02-19 16:15:14 -0600 Rework foul flame damage to scale with XL. Simplify the damage function as well. The new formula is based on the spiny damage formula, and most likely still needs adjustment. -------------------------------------------------------------------------------- 2cdf64c09c | David Lawrence Ramsey | 2024-02-19 15:21:59 -0600 Reflavour foul flame as darkness, not light. The foul glow mutation is renamed to foul shadow, and its description has been adjusted. It loses its glow-related effects in favour of a consistent umbra with radius 1-3 (dependent on mutation level). It's also removed from Meteorans. At kate's suggestion, it also conflicts with spiny, since both give retaliation-based attacks. Its placeholder tiles are now the darkness tile in UNUSED/gui for level 3, and palette swaps of it for levels 1 and 2. "Brilliance" now has an umbra instead of a halo, like the ring of Shadows, and its description has been adjusted. The rewritten lore now describes foul flame as an overpowered umbra prototype. Its tiles need to be redone (item/weapon/artefact/urand_brilliance.png and player/hand1/artefact/mace_of_brilliance.png). Foul flame's actual damage in-game is unchanged. -------------------------------------------------------------------------------- a146dc8f6d | Nicholas Feinberg | 2024-02-19 13:01:28 -0800 Fix Maxwell's revving offhands (elliptic) Too good a bug to keep... -------------------------------------------------------------------------------- f177465bdf | DracoOmega | 2024-02-19 17:12:28 -0330 Don't crash when deathbed pacifying an orc standing on the stairs They would immediately leave the level when converted, and then by the time the revival fineff fired, they would already have stopped existing. -------------------------------------------------------------------------------- 52037ea7a9 | elliptic | 2024-02-19 14:14:59 -0500 Make autofight wait for -Move to end if it wants to move towards an enemy -------------------------------------------------------------------------------- 614e6b550b | Nicholas Feinberg | 2024-02-19 11:10:05 -0800 Fix the build? -------------------------------------------------------------------------------- 98a3e4f53e | Nicholas Feinberg | 2024-02-19 10:57:46 -0800 -Stiff, +-Move (elliptic, BountyHunterSAX) Coglins' Stiff mutation did provide interesting dynamics in combat, but could be very punishing of mispresses - one tab too many could cause a very painful double turn. Try a similar dynamic with -Move on attack/cast/throw, lasting for your turn + 1 normal action. This is pretty similar in terms of tactical implications, since moving at 2.0 speed is similar to waiting for 1.0 and then moving at 1.0. The upside is that this blocks dangerous moves; the downside is that it involves more obstruction from and messaging by the UI. Let's try it out. :) -------------------------------------------------------------------------------- b960cd1172 | DracoOmega | 2024-02-19 13:52:25 -0330 Don't interrupt rest when allies take poison ticks This was additionally confusing since there isn't even any message for them taking damage this way, so it's not clear what's interrupting the player. (And it happens a lot from incidental damage in places like Snake) And while it's sad to lose an ally that way, the player also usually can't do anything about this - if they're lethally poisoned, they're just going to die. (Standing in a poison cloud does direct damage and will still interrupt, so most ways to get *more* poisoned will still alert the player) -------------------------------------------------------------------------------- b00f77f2df | David Lawrence Ramsey | 2024-02-19 10:12:00 -0600 Move foul glow to tier 2 demonspawn mutations. It needs to show up more often for testing, and it's not as game-warping as tier 3 mutations. -------------------------------------------------------------------------------- ce5c0aab1b | David Lawrence Ramsey | 2024-02-18 23:19:22 -0600 Adjust a few Donald speech lines for new Beogh. -------------------------------------------------------------------------------- 45148b779a | Nicholas Feinberg | 2024-02-18 21:16:22 -0800 Shuffle Rev colours around (DracoOmega) -------------------------------------------------------------------------------- 2ba4f54afb | Nicholas Feinberg | 2024-02-18 20:15:39 -0800 Fix: ranged attack don't 'pierce through' orbs In terms of messaging. -------------------------------------------------------------------------------- c7c9bb8ef8 | Nicholas Feinberg | 2024-02-18 20:14:25 -0800 Fix: don't count CACT_BLOCK for orbs -------------------------------------------------------------------------------- 673a13063c | Nicholas Feinberg | 2024-02-18 20:14:23 -0800 Use a new helper -------------------------------------------------------------------------------- b64034399e | Nicholas Feinberg | 2024-02-18 20:10:39 -0800 Fix: orbs aren't (divine) shields Don't treat an orb as a shield for TSO messaging purposes. -------------------------------------------------------------------------------- 709d21d5af | David Lawrence Ramsey | 2024-02-18 20:11:52 -0600 Add a few Donald speech lines for new Yred. -------------------------------------------------------------------------------- dd288483a6 | Nicholas Feinberg | 2024-02-18 17:25:33 -0800 Fix antimagic being pro-magic offhandedly (Lightli) Apply the SPWPN_ANTIMAGIC max MP penalty to off-hand weapons. -------------------------------------------------------------------------------- 0a58b4a09e | David Lawrence Ramsey | 2024-02-18 19:03:54 -0600 Fix tag_upgrade build? -------------------------------------------------------------------------------- 4a20d55004 | regret-index | 2024-02-18 21:10:22 -0330 Quick vault review and decor adjustments Some layout and gimmick reconfiguring, some rewards and monster and feature choice tweaking, increased weight rather than decreased weight to a bunch of extra-large V vaults because they're already unlikely to spawn with the layout generator in the first place, and some continued emphasis of harmlessness in some of the newer decorations. -------------------------------------------------------------------------------- 831329d5cd | regret-index | 2024-02-18 21:10:21 -0330 New decorations: caches of fruit and meat These are meant to provide the flavour of fruit trees and groves, or people discreting stashing away meals within settlements and fortresses, without the attending manifold issues of the hunger clock. Many vaults on either front end up involving the constant presence of greenery or lakes and moats to emphasize the notions of housing; this can compliment and reduce the use of either without interrupting as plants and water do, with relatively straightforward decoration that shouldn't be confusable as much else. Both of these fruit and meat piles are akin to dry fountains, not statues- they don't block fire or movement, and solely sit on the ground. They can also walked on without any effects beyond a rare message about stopping to nibble at floor food. (Most of the fruit messages are trying to be cosmopolitan, while the meat messages this time around are specifically tailored to the various animals of the Dungeon for a little more world-building. There's also a variety of species-specific messages.) In console, these are green and brown % or ÷ glyphs, the same glyphs as skeletons, which should continue to help with not flooding the screen any more than those currently do. (This also comes with a couple vaults being scaled for further locations than they currently possess, since they felt workable for other contexts.) The current fruit cache tile was made by snw-0, while the meat cache tile components go as far back as the original rltiles project. They're a little placeholdery- they feel a bit too item-like for now, though players shouldn't take too long to get used to it. These, more than any other decorative feature, would benefit from more contributions over time- getting back sultanas, snozzcumbers, and pizza would be nice, and it would also help to drift away from tiles that specifically invoke old carryable items. I'd also be up for a cache of baked goods for a handful of vaults, which could easily have some pie pile tiles for Zot.... (TODO: .rc setting for allowing fully muting the new MSGCH_DECOR_FLAVOUR, or brightening it from a current default darkgray. If such controls get in, maybe we could consider rare messages for other stuff, like walking over fountains, beside animated statues, or on top of impending cloud vents?) -------------------------------------------------------------------------------- a70f5b33bd | Nicholas Feinberg | 2024-02-18 16:03:50 -0800 More Coglin novelty titles (ragingrage) -------------------------------------------------------------------------------- 363f0df772 | David Lawrence Ramsey | 2024-02-18 17:54:43 -0600 Remove unneeded quotes from YAML files. Some have them around species name, abbreviation, short name, adjective, and/or genus; and some don't. (Mountain Dwarf has them around some things and not others.) They're read properly either way, so the quotes aren't necessary. -------------------------------------------------------------------------------- 17d16cfdc5 | Nicholas Feinberg | 2024-02-18 15:05:00 -0800 Fix: don't crash on monster ranged Oops! -------------------------------------------------------------------------------- 951292165a | Nicholas Feinberg | 2024-02-18 14:58:13 -0800 Let coglin trees dual wield The intent was to block the exoskeleton muts (dual wield, slow wield, rev wield) for forms with no weapons, but to enable them for weapon-using forms. Treeform, inconveniently, melds 'physical' muts but also wields weapons. Let it dual-wield, since it feels very weird for coglins to otherwise want to wield a shield in their weapon-holding offhand, etc. Mecha-tree! -------------------------------------------------------------------------------- 7f4458d1ef | Nicholas Feinberg | 2024-02-18 14:52:33 -0800 Leave the shadows behind (elliptic) -------------------------------------------------------------------------------- 89e69b9ebe | Nicholas Feinberg | 2024-02-18 14:51:53 -0800 Fix crash on lig ending (dolorous) With an offhanded weapon. Resolves #3557. -------------------------------------------------------------------------------- 0012f907a2 | Nicholas Feinberg | 2024-02-18 14:38:48 -0800 Fix: don't wield items twice (SentientSupper) Don't allow using the local tiles UI to wield the same one-handed weapon in both hands simultaneously. Juggling is illegal and clowns should be executed. -------------------------------------------------------------------------------- 0561d8ba88 | Nicholas Feinberg | 2024-02-18 14:36:32 -0800 Loosen up stiff coglins (Sergey, SentientSupper) Count waiting as movement for Stiff purposes, to discourage jogging back and forth while waiting for enemies to round a corner. (One must infer the coglin is jogging in place within the tile.) -------------------------------------------------------------------------------- f146ca5fe1 | Nicholas Feinberg | 2024-02-18 14:26:36 -0800 Add a very serious title (hellmonk) -------------------------------------------------------------------------------- 02c5f9f64a | Nicholas Feinberg | 2024-02-18 14:25:29 -0800 Fix: don't crash when printing stats With offhand weapons. -------------------------------------------------------------------------------- a990712c8d | Nicholas Feinberg | 2024-02-18 14:24:55 -0800 Fix: don't lose offhand ofter untransform (SentientSupper) -------------------------------------------------------------------------------- 2a2ee83d2c | DracoOmega | 2024-02-18 18:31:14 -0330 Interrupt autorest and travel when allies take damage Because autorest interrupts on fewer things than resting manually does, it was possible not to be notified of an apostle sitting in a poison cloud and have it immediately die with one button press. This is obviously quite bad. Now interrupt when any visible ally takes damage, to avoid this. I am... more than a little worried that this will create needless interruptions in regular play and that this should be more conservative, but the situation it's aimed at fixing is very bad, and it's been argued that the downsides won't come up in practice. So let's see, and then maybe try to narrow down criteria later, if it turns out there's issues. -------------------------------------------------------------------------------- 7fda0f466e | DracoOmega | 2024-02-18 18:27:09 -0330 Buff wizard apostles somewhat I intentionally kept the weight of some spells I thought would be especially useful on allies low, but in practice wizards often seem to be comparing poorly to other apostles, so I think they can stand to be more common. (This may still be too conservative?) Also make cast frequency of attack spells a little higher, give a little more hp, and also give bonus evasion that scales with apostle power (since their armour never gets especially good). -------------------------------------------------------------------------------- bd18ae22b0 | DracoOmega | 2024-02-18 18:11:20 -0330 Improve reminder for how to recruit an apostle The game already told the player how to if they had no apostles, but perhaps since the reminder came *after* the force_more for the apostle being available to recruit, it was sometimes overlooked. Now included it in the original message, colored to be hilighted more. -------------------------------------------------------------------------------- fe756443ca | DracoOmega | 2024-02-18 16:55:40 -0330 Fix formicids being interrupted from taking stairs by dispersal traps (And anyone else with stasis, for that matter) Fixes #3567 -------------------------------------------------------------------------------- baf8858e17 | DracoOmega | 2024-02-18 14:42:06 -0330 Fix Scorch steam always being attributed to the player (SentientSupper) Could cause penance when cast by a hostile apostle against a friendly one, if the latter was standing over water. -------------------------------------------------------------------------------- 767cff9cbe | Kate | 2024-02-18 15:38:25 +0000 Fix delays not being interrupted by Rising Flame It was possible to, for example, activate Rising Flame, start climbing a staircase, then have the Rising Flame go off without interrupting the stair delay. Because Rising Flame then puts a shaft underneath the player's new location, they'd automatically jump back down the shaft as part of the continued stair delay. -------------------------------------------------------------------------------- c488ab431e | Kate | 2024-02-18 15:38:25 +0000 Tweak a message And adjust spacing. -------------------------------------------------------------------------------- 758c6da2ce | grumposus | 2024-02-18 15:37:53 +0000 Make rising flame valid to use on D1 with the Orb And cause it to win the game. Closes #3519. -------------------------------------------------------------------------------- 289a535e89 | David Lawrence Ramsey | 2024-02-18 01:04:41 -0600 Don't list Hill Orcs in the aptitudes menu. -------------------------------------------------------------------------------- cd93b57ba1 | David Lawrence Ramsey | 2024-02-17 19:40:41 -0600 Fix spelling. -------------------------------------------------------------------------------- 66ff23f1a4 | David Lawrence Ramsey | 2024-02-17 19:38:57 -0600 Handle joining/leaving good gods and foul flame. Joining them makes you holy, and thus unable to use it; leaving them for non-good gods makes you not holy, and thus able to use it. -------------------------------------------------------------------------------- d0048a8123 | Nicholas Feinberg | 2024-02-17 16:58:32 -0800 Increase Foxfire Swarm damage Moving it from 1d6 to 1d8 might make it a bit more competitive with Ignis's other active. Elliptic suggested reducing the max number of foxfires from 24 to 8 (ie going from radius 2 to 1), which *would* make it easier to balance, but would be a terrible loss to the spectacle of the effect. I'd rather hold off. -------------------------------------------------------------------------------- 3fb9450a1b | Nicholas Feinberg | 2024-02-17 16:44:49 -0800 Fix: goblins are not elves (dolorous) -------------------------------------------------------------------------------- cc96a6ac99 | Nicholas Feinberg | 2024-02-17 16:08:20 -0800 New species: Coglins Wielding weapons in each hand, Coglins are puny goblins that ride magic exoskeletons into battle. They're slow and inflexible in many ways. When they stop moving, their exoskeleton will be slow to move again. When they stop swinging, their exoskeleton's strikes will be weaker until they rev back up again. And when they switch weapons, it takes them some time to re-attune their exoskeleton's spirit. But once they get going - look out! More notes on mechanics: - Dual wielding: you can choose to wield a 1h weapon instead of a shield in your off-hand. (Unless you're wielding a 2h in your primary hand.) Whenever you strike with your primary weapon, your secondary will also attack. This doesn't trigger extra aux attacks. You can dual-wield 1h ranged weapons, but mixing and matching ranged and melee weapons doesn't work. Delay is the average of the two. The order of attacks is random. - Warmup strides: whenever you take a turn that's not movement, your next movement will take twice as long as normal. Other actions (attacks, spells, etc) remain normal speed. - Warmup strikes: your ranged and melee attacks are 33% weaker until you fully rev up, which takes about 4.0 dAut of attacking enemies. - Slow wielding: wielding, unwielding, or switching weapons (in both the primary and off-hand) takes 5 standard turns instead of 0.5. The idea is to play in a similar space to formicid's 2h+shield ability. Dual wielding is expected to *usually* be stronger than wielding a 2h or 1h+shield - and if it isn't, we can buff it until it is - but gear found will sometimes prompt one to use a shield or a 2h weapon, for a shorter or longer period. That sort of 'soft' change for gear evaluation (as opposed to a 'hard' lockout on item types ala spriggan/kobold/ogre/etc) seems fun and exciting. The various downsides are intended to complement this. Dual-wielding is a big strategic upside, so the downsides are tactical, hopefully making fights feel a bit different without being overly obtrusive. (And slow-wielding, in particular, is intended to avoid excessive weapon micromanagement.) There's also an implementation of an unused 'attractivitis' mutation in this commit. We may later turn this into a generic badmut, or cut it entirely. downside, either! More notes: - Weapon names are purely cosmetic, but Esmeralda's feelings will be hurt if you say so. - Apts and attributes are early drafts and especially subject to change. -------------------------------------------------------------------------------- ed53ad6fd3 | David Lawrence Ramsey | 2024-02-17 15:27:32 -0600 Officially deprecate Hill Orcs in YAML. -------------------------------------------------------------------------------- 2c85d38dee | David Lawrence Ramsey | 2024-02-17 15:27:32 -0600 Switch Lua mutation test from HO to DE (#3551). Since DE don't have any mutations, and HO are now deprecated. Suggested by wheals. Closes #3551. -------------------------------------------------------------------------------- f317980e7c | David Lawrence Ramsey | 2024-02-17 15:27:32 -0600 Properly #ifdef out one last Hill Orc reference. -------------------------------------------------------------------------------- b72868ee7c | David Lawrence Ramsey | 2024-02-17 08:31:08 -0600 Add more god-related names to artefacts. -------------------------------------------------------------------------------- c6a9d31ccb | elliptic | 2024-02-17 03:00:42 -0500 Remove an outdated note about boomerangs not returning (SentientSupper) -------------------------------------------------------------------------------- 4f4d228785 | David Lawrence Ramsey | 2024-02-16 20:59:48 -0600 Consistently rename deprecated species' YAML. All of them now start with "deprecated-". Hill Orcs are untouched for now. -------------------------------------------------------------------------------- 3b6c037139 | David Lawrence Ramsey | 2024-02-16 20:26:12 -0600 Move species' orc names to YAML. Humans are the only ones who don't get a specific orc name, and so default to "Orc". Demigods get "Buggy Orc", since they shouldn't be able to worship Beogh in the first place. All the obsolete species get orc names, too. (Deep Dwarf is Deep Dworc because Deep Orc is already used for Deep Elf.) Also update documentation. -------------------------------------------------------------------------------- c80224b05e | David Lawrence Ramsey | 2024-02-16 19:05:06 -0600 Revive minmay's old "Brilliance" vault, adjusted. It's now guarded by profane servitors instead of angels/daevas; if "Brilliance" has already been generated, it'll now generate a randart eveningstar of draining, pain, or vampirism instead of holy wrath; and the item it generates no longer has the obsolete not_cursed property. This partially reverts commit 20c470eb4851b751f159898c8d60758f7ae9a1b8. -------------------------------------------------------------------------------- c85c4ccd42 | David Lawrence Ramsey | 2024-02-16 19:05:06 -0600 Revive "Brilliance" with the foul flame brand. Change its brand from holy wrath to foul flame, change its colour from ETC_HOLY to ETC_FOUL_FLAME, drop its other qualities aside from its +1 enchantment, give it its old halo back, and rewrite its description to add some lore about its corruption and the origin of the foul flame brand. This partially reverts commit 20c470eb4851b751f159898c8d60758f7ae9a1b8. -------------------------------------------------------------------------------- 7dcfd5f6c4 | David Lawrence Ramsey | 2024-02-16 19:05:06 -0600 Revive and rename an old elemental colour. Put the colours of ETC_SHINING back in, and rename it ETC_FOUL_FLAME. Its colours are bright enough to use for the foul flame brand. This partially reverts commit 4071159e5c0962697a6c6eb0299a3d1e46caf787. -------------------------------------------------------------------------------- 953bdd34fd | David Lawrence Ramsey | 2024-02-16 19:05:06 -0600 Add foul flame to chaos effects, rarely. Its unpredictability is fitting for chaos, and only a few monsters with demonic holiness currently have the chaos attack flavour. -------------------------------------------------------------------------------- 26e6efbaab | David Lawrence Ramsey | 2024-02-16 19:05:06 -0600 Add foul flame weapon attacks to Pan lords, rarely. -------------------------------------------------------------------------------- 2ccd7fcaca | David Lawrence Ramsey | 2024-02-16 19:05:06 -0600 Add foul flame melee attack weapon and flavour for monsters. Currently, the former's brand is banned from actual weapons; it's only for monster attacks that are treated as weapons. However, all the code needed to put it on weapons is in place. Also, update the monster bot to account for foul flame attacks and resistance. -------------------------------------------------------------------------------- 3bb25885a7 | David Lawrence Ramsey | 2024-02-16 19:05:06 -0600 Add foul flame melee attack for players. This is tied to the glowing mutation (you glow with foul flame). It triggers on attacks, similarly to the foul stench melee attack. Its functions are also modeled after those in emit_foul_stench(). -------------------------------------------------------------------------------- c1e5129a55 | David Lawrence Ramsey | 2024-02-16 19:05:06 -0600 Add foul flame. It's basically inverse cleansing flame: undead/demons take less damage, and holies and good god worshippers take extra damage. -------------------------------------------------------------------------------- 9a4668d5da | David Lawrence Ramsey | 2024-02-16 19:05:06 -0600 Rework glowing mutation into foul glow mutation. Turn it into a 3-level mutation, move it to tier 3 demonspawn mutations, mark it as good, and change its messages and description accordingly. Meteorans still keep 1 level of it, even though its nature has changed. Also add placeholder tiles for it: palette swaps of the old Darkness spell tile from UNUSED/gui. -------------------------------------------------------------------------------- 5eddc7eabd | DracoOmega | 2024-02-16 19:40:26 -0330 Fix Animate Dead zombies remaining after floor change Also broken by 0a82c8690a01462b55615d2cbd8e7497dc3b9d6c but appeared to be working correctly because of the bug fixed by 213d36726f0033a8e4beb488114cccfd39a8a707 -------------------------------------------------------------------------------- 4f8ebfe289 | Andrew O'Neill | 2024-02-16 15:08:30 -0600 Finish removing CMD_TOGGLE_TRAVEL_SPEED This removes the CMD_TOGGLE_TRAVEL_SPEED from colemak keybindings and keybind help. -------------------------------------------------------------------------------- 4ea16c4597 | David Lawrence Ramsey | 2024-02-16 14:14:05 -0600 Fix punctuation. -------------------------------------------------------------------------------- b00bd655f3 | DracoOmega | 2024-02-16 16:29:32 -0330 Nerf Light the Black torch at low piety While I am fine with Yred being a god that offers a quicker early power spike than most gods, it felt a bit TOO much - especially if the player finds an early faded altar. Light the Torch now only provides allies upon reaching 1*, and the ally tables have been adjusted slightly so wights (and especially groups of wights) will be less common at very low piety/xl. A few other things have also been nudged here or there. -------------------------------------------------------------------------------- 652cfa06da | David Lawrence Ramsey | 2024-02-16 13:34:33 -0600 Tweak punctuation. -------------------------------------------------------------------------------- e323ee73c6 | David Lawrence Ramsey | 2024-02-16 13:31:32 -0600 Fix typo. -------------------------------------------------------------------------------- 90474121c3 | David Lawrence Ramsey | 2024-02-16 13:29:07 -0600 Update species_creation.md for child_name. -------------------------------------------------------------------------------- 42642787d0 | DracoOmega | 2024-02-16 14:55:05 -0330 Unbreak telling allies to guard an area This was broken by 0a82c8690a01462b55615d2cbd8e7497dc3b9d6c changing the LoS check for allies to return to you from 'Does this ally currently have LoS to the player' to 'Does this ally ever need LoS to the player to attack', resulting in all perma-allies attempting to return to the player every single turn - whether they could see you or not. I've also carved out an additional exception to not return to you if you told them to guard an area, since this is probably what the player wants in that case. Additionally, telling allies to follow you, or recalling them, should fully end their travel behaviour. (Previously - and unrelated to the linked commit - telling them to guard an area after you'd previously told them to guard a different area would often result in them trying to run back to the first one or something outright being stuck in place, since they would still be trying to use pathfinding info from the previous time they did pathfinding) I am 100% positive travel_path is still not being cleared in all situations that it should be, so it's possible that the minor change in _handle_monster_travelling will uncover some additional bugs, but the code currently seems to assume that the monster's target will be travel_path[0], if it's travelling, and thus if anything sets its target directly, it can cause it to perpetually freeze in place by assuming it's moving to its next waypoint when it's not actually moving anywhere at all. Probably better to find any other bugs as they come up rather than leave this one here. (Probably better to refactor a lot of monster movement / behaviour code, but HOO BOY is that a tall ask...) -------------------------------------------------------------------------------- eb24b2cc03 | David Lawrence Ramsey | 2024-02-16 11:37:55 -0600 Flag non-mundane starting items as such (#3548). So that they get the proper tiles for branded/enchanted items. Closes #3548. -------------------------------------------------------------------------------- 213d36726f | DracoOmega | 2024-02-16 05:03:32 -0330 Fix Animate Dead zombies being temporary (CarefulOdds) Accidentally broken by 0a82c8690a01462b55615d2cbd8e7497dc3b9d6c Sorry! -------------------------------------------------------------------------------- e6c31236d6 | David Lawrence Ramsey | 2024-02-16 00:57:03 -0600 Fix god speech substitution syntax (#3545). The speech databases use @this@ instead of . Closes #3545. -------------------------------------------------------------------------------- d8048dd28f | DracoOmega | 2024-02-15 20:47:36 -0330 Fix Electrolunge cast message -------------------------------------------------------------------------------- d58f893b0d | DracoOmega | 2024-02-15 19:55:40 -0330 Prevent using Tukima's on apostles (Darby) Even though apostles and their bands were MF_HARD_RESET (and thus don't drop items), it was still possible to animate their weapons and then kill them to gain a copy yourself. You could even do this repeatedly (if you were willing to upset Beogh) to a friendly apostle, who would return from abandoning you with a fresh copy of their weapon. I could theoretically just have made their gear count as summoned, but that still leaves the problem of using Tukima's *before* you recruit them and then leaving them forever without any weapon. It seems unfun to let players trap themselves like that, so let's just ban casting it on them. -------------------------------------------------------------------------------- bb23cca24c | DracoOmega | 2024-02-15 19:55:40 -0330 Don't allow binding souls of phantom reflections (Darby) -------------------------------------------------------------------------------- 295baea383 | DracoOmega | 2024-02-15 19:55:40 -0330 Don't transit monsters marked as followers Normally when entering a floor, followers (ie: things taking the stairs with you) are placed before transiting monsters (ie: things that fell down a shaft earlier or were banished). But Abyss generation could place transiting monsters (sometimes multiple times?) before the normal call to place followers. Followers are placed near the player, while transiting monsters are placed anywhere, so this could result in player allies seeming to disappear when you stepped through an Abyss portal. This also had the unfortunate side-effect of not updating the companion list properly, so let's try to prevent it. but transiting monsters placed randomly on the floor. -------------------------------------------------------------------------------- a2df31511f | DracoOmega | 2024-02-15 19:55:40 -0330 Fix bound souls being saved to the companion list as hostile This was seemingly always the case, but usually not noticable as each level transit would update the saved copy (with the real, friendly one). But in some cases where a soul didn't transit properly and was recalled, it would be recalled as hostile and remain hostile forever afterward - even after being repeatedly killed! (It was theoretically even possible to farm unlimited items off a bound soul this way, by recalling and killing it over and over again) -------------------------------------------------------------------------------- 9b00542b0a | DracoOmega | 2024-02-15 19:55:40 -0330 Fix dactions that could cause Ancestors/Bound Souls to incorrectly die Because entering a new floor causes all dactions from the entire game's history to fire (see 063869c3723e ), the dactions for losing your Hep ancestor (due to piety loss/excommunication) or bound soul (due to binding a new one) could happen repeatedly. This usually did nothing, but in the Abyss in particular could cause them to simply die - a minor nuissance for an ancestor, but a permanent mysterious loss for a bound soul. Now we try to be a bit more picky about whether we actually kill something with this daction: check that the player still doesn't qualify for an ancestor, or that the bound soul we're trying to remove isn't the player's current companion. -------------------------------------------------------------------------------- 4bb08483cd | DracoOmega | 2024-02-15 19:55:40 -0330 Make companion_is_elsewhere lie less Companion_is_elsewhere relied on a manually updated list of what floor each companion was supposed to be on. This was normally pretty reliable, but there were a few cases (the Abyss in particular) where the list could THINK they were there, but were not (eg: because the map was regenerated since the player was last there) Some results of this: -Being unable to recall followers that the game THOUGHT were on the floor with you, but were not -A particularly troublesome bug where old dactions to upgrade a Hep ancestor would incorrectly think the ancestor was on the current floor (since it wasn't 'elsewhere'!) and then try to change its weapon. Except, since it was referring to a monster that wasn't REALLY on the floor, trying to access its weapon would point to a random (probably undefined) item on the floor's item list instead. Tinkering with this could create various forms of buggy item to appear and crash the game. Now, since we know we can't 100% trust the cached list, whenever the list thinks a companion is on our current floor, we double-check that it actually is. And if it is not, set its location to an invalid floor (since it's currently effectively 'nowhere') This should fix both above bugs and possibly some others. -------------------------------------------------------------------------------- 51ccb66acf | DracoOmega | 2024-02-15 19:55:39 -0330 Fix apostles being returned to you in the middle of AoE (Darby) If a kill during the earlier part of an AoE attack generated enough piety to end Beogh penance, Beogh would return your apostles to you in the middle of that attack, which could then hit them and immediately re-penance you. Make this a fineff as well. -------------------------------------------------------------------------------- 7eccf60f97 | DracoOmega | 2024-02-15 19:55:39 -0330 Preserve Beogh vengeance markers through polymorph (Oneirical) -------------------------------------------------------------------------------- 9c5f7be1a3 | DracoOmega | 2024-02-15 19:55:39 -0330 Remove Passwall armour bonus if the spell is interrupt eg: by being trampled in the middle of it. This fixes #3543 -------------------------------------------------------------------------------- e39a69d6b2 | regret-index | 2024-02-15 19:44:18 -0330 Cut another necrophage use, mildly nerf them to nerf Yred Forgot to remove necrophages from ghoul bands when I cut them from vaults in e446cd8. Bog bodies take up their weight entirely, so minimum and maximum ghoul band size has been reduced in exchange. Very early Yred is quite strong due to the many benefits at 0* needed to make the new piety gain restrictions work. Since necrophages solely exist for the bottom of Yred's raised Black Torch summons now, they can be a little weaker in both damage and health to make the snowballing a little harder at the earliest XLs working with Yred. -------------------------------------------------------------------------------- 5942d1eb2b | regret-index | 2024-02-15 19:44:17 -0330 Adjust Zig set scaling a little more Emphasize spriggan druids in Lair floors a little less, scale Tomb / Pan / Fire floors a little harder, let the non-Tar hells at the higher ends emphasize a little more of the selected monsters, and screw with some experimental quadratic scaling for Air (titans) and Earth (hell sentinels and iron giants). Further steps still need to be taken, but this continues to be a very quick way to continue to adjust megazigging. -------------------------------------------------------------------------------- b3a183b876 | regret-index | 2024-02-15 19:44:17 -0330 New decorations: sacred lotuses The opposite of demonic plants in multiple ways, sacred lotuses are holy water-bound plants that don't wither away and have sturdiness even beyond bushes. They provide some additional decorative plants of a more notable nature than the old proliferation of trees and plants themselves, and are meant to only be used in very sparing pillars and sides rather than potential blockades like most other non-hostile plants are delegated to. They're used in vaults for Elyvilon (as symbols of longevity), Fedhas (as a revered plant), and the Wu Jian Council (as a symbol of elegance and grace). In particular, the first of those provides a little more fanciness for holy themed vaults, which focus heavily on wall and statue retiling due to the rather limited breadth one can use holies when compared to the wide variety of potential unholy themes. It can also provide a little bit of fanciness to the very watery, plant-filled branches of Swamp and Shoals. They use the old thorn lotus tile by snw-0. -------------------------------------------------------------------------------- 65e31ca853 | regret-index | 2024-02-15 19:44:17 -0330 Burning bush -> scrub nettle (monkooky) There's been some concerns with the increase of decorations that some non-decorative monsters shouldn't be confusable with decorative features. Burning bushes, those weird biblical jokes, fall directly under this concern. A regular bush can already be set on fire and use the same tile as the other enemy in question without suddenly picking up the ability to shoot 3d9+ Throw Flame. They're only used in one sprint, one vault's configuration for one branch, and by Fedhas's Overgrow ability, so modifying them into something a bit less confusable should address this without upsetting balance too much. The new scrub nettle is an Australian nettle, mildly enhanced in the way dart slugs and bombardier beetles are. It uses Sting over the burning bush Throw Flame, which gives them a partially irresistable attack that actually scales notably directly with one's Invocations skill (since orc apostles can get the spell for a while anyway). In exchange, the resistance is vastly more common, they're lower HD / HP to start with, and Sting only has a range of 4 instead of 7 (not that this is any more awkward as an ally than the wandering mushrooms the ability already grants). This probably doesn't upset Fedhas balance too much- Overgrow is very expensive and used for terrain-manipulation as much as it is for turret and mushroom support. We could look into invocations not granting such a high ratio of invo skill versus HD _every_ plant Fedhas uses, if needed. It might be useful in the right heavily-constrained portal, as a introductory baby immobile in a context of Sewers already occasionally having strange numbers of plants. If the name is somewhat questioned for not seeming threatening while the bulk of immotile plants aren't, it can use the far more direct name of "stinging nettle" instead. Their placeholder tile is a deeply silly mix of the original rltiles spiny worm, the first tile for porcupines by Malwyn, and an unused "poison pollen" plant tile from wad left in UNUSED for twelve years. (If these don't work out, it might be possible to set a different plant on fire instead of bushes, or maybe make a monster that's the base for a solitary snaplasher vine to reach out?) -------------------------------------------------------------------------------- 526f7d4993 | gammafunk | 2024-02-14 20:35:28 -0600 fix: Walls in a ghost vault (EnegeticOcto) For gammafunk_ghost_abyssal_escape, it recently got the preserve_wall tag added due to its use of rock in its internal layout. Unfortunately, when this tag is present, the Vaults layout seems to replace stone wall with rock wall at some point. Until we can figure out how to fix this, have this vault only use metal and crystal for its random walls. -------------------------------------------------------------------------------- 5e32175d1f | David Lawrence Ramsey | 2024-02-14 19:00:26 -0600 Fix duplicate comment. -------------------------------------------------------------------------------- 1d7162e751 | Nicholas Feinberg | 2024-02-14 12:18:29 -0800 Fix: felids can't wield artefact weapons Broken in 4224600aead45df7c84102127e7103837e200c84. -------------------------------------------------------------------------------- 91ca388d19 | Nicholas Feinberg | 2024-02-14 12:15:14 -0800 Fix dwarven adjectives (Lici) -------------------------------------------------------------------------------- cdbe0f7f08 | DracoOmega | 2024-02-14 15:11:03 -0330 Fix one overlooked thing from the previous commit It's not clear that the source pos ever really did anything here anyway, as a frenzied monster will immediately pick a different nearby target regardless. -------------------------------------------------------------------------------- cc65242e2a | DracoOmega | 2024-02-14 15:08:38 -0330 Slightly refactor chaos_affect_defender to fix a couple of bugs Chaos_affect_defender was a member of attack, and was used for chaos-branded weapons, but it was ALSO used for chaos clouds. And this meant that clouds had to construct a fake attack just to call it. This had the consequence that there always had to be an 'attacker'. Since clouds often have no agent, the game defaulted to having the 'attacker' be the actor standing in the cloud. This was capable of causing penance in the following way. A friendly monster steps into the cloud and gets confused by it. Since they are the 'attacker' for this chaos effect, they count as having been confused by a player-friendly source for purposes of blame tracking. (This is how the player gets credited for kills done by monsters they confused). But then when this confused monster triggers the cloud again, because the source of the chaos effect (ie: themselves) was confused 'by you', YOU are considered the source of the new debuff they recieve, which counts as you attacking them yourself, as far as the good gods and Beogh are concerned. I have pulled chaos_affects_defender out attacks entirely. Now it is chaos_affects_actor() and the source is optional. It should otherwise operate basically the same as it did prevously, aside from fixing an additional bug where web effects from a chaos weapon incorrectly re-applied the damage that attack did and produced weird messages. (Note: I wasn't sure what file to put this in, so it's ended up in clouds.cc. If someone feels strongly, they could put it somewhere else, I guess) -------------------------------------------------------------------------------- 94eecf844d | DracoOmega | 2024-02-14 13:15:26 -0330 Fix Yred giving the wrong number of torch charges (Darby) I am not sure how in the world I missed those elses. But also, it turns out I missed a function that would have let me write this in a less dumb way in the first place. Whoops. -------------------------------------------------------------------------------- bc685e0f5f | patrick | 2024-02-14 11:38:59 -0500 Fix up randbook.txt The comment says that the headers for multi-spell books need to have the spell schools in alphabetical order, which was broken when Alchemy was invented. No doubt this ruined untold numbers of games. -------------------------------------------------------------------------------- fed3edf829 | Nicholas Feinberg | 2024-02-13 22:01:15 -0800 Fix an || -------------------------------------------------------------------------------- cc768c7156 | Nicholas Feinberg | 2024-02-13 21:53:56 -0800 Fix Mountain Dwarf titles (particleface) -------------------------------------------------------------------------------- 028c0f8d43 | David Lawrence Ramsey | 2024-02-13 23:01:57 -0600 Checkwhite -------------------------------------------------------------------------------- 8574905f7e | DracoOmega | 2024-02-14 01:23:09 -0330 Don't let friendly monsters use manifold assault on targets you can't see -------------------------------------------------------------------------------- 6c3d6ff0d8 | DracoOmega | 2024-02-14 01:23:09 -0330 Don't mark your own apostles for vengeance (Oneirical) Even if they *did* kill your other apostles in a momentary act of blind frenzy >.> -------------------------------------------------------------------------------- fa6ab80fcc | DracoOmega | 2024-02-14 01:23:09 -0330 Clear apostle list on game start To keep from bringing apostles from a past game into a future one. This fixes #3534 and #3533 -------------------------------------------------------------------------------- 409ee8c19d | DracoOmega | 2024-02-14 01:23:09 -0330 Reroll apostle names to avoid the player ever having two identical names Make sure that any apostle challenge does not share a name with any of the apostles the player already has, to avoid the confusing situation of having two of them named the same thing. Also remove some unneeded (or outright incorrect) code from give_monster_proper_name -------------------------------------------------------------------------------- fced3f9c7c | regret-index | 2024-02-13 22:55:30 -0330 New formless jellyfish tile (CanOfWorms) A quite pretty new tile, really. (The state of formless jellyfish themselves seems to be roughly fine after quite a few buffs since their original implementation, but they still are a very strange fit for V as a branch. Possibly they could be trimmed from such and emphasized a little more in Shoals and Slime as they mechanically and thematically fit, much more than somewhere also very close to Depths's and Crypt's vampire knights, after V gets more monsters in the future?) -------------------------------------------------------------------------------- e446cd8fad | regret-index | 2024-02-13 22:44:01 -0330 Vault review again again Header cleaning, set variety increasing, early decoration overuse reducing, later decoration use increasing, slight twitches of end balance, so on, and so forth. Of note: * Permanent bazaars no longer spawn- all bazaars are now timed. The chance for bazaars and bazaars alone confused people who haven't seen lots of them (as it's a low overall chance) into thinking they'd be portals one can revisit past the first trip. With the multitude of customized shop vaults also providing a lot more interest to shops these days, there's not too much pressure on bazaars * Necrophages have been trimmed out of vaults. Ever since rot and drain become intertwined, they don't really have any mechanical distinction beyond being an even earlier form of wight. A variety of other low-level undead fill their slots, depending on the vaults in question. I'm not removing them outright quite yet due to early Yred's xl scaling rather relying on them being present: it'd be good long-term to have a replacement for multiple early undead with their own distinguishing mechanics. Weeping skulls and giving misery protection the way we do for revenants and spectral flames might be of some use, but I'm wary of those appearing too often as is. (Maybe we could use some fixed skeleton types instead?...) * david_glass_crypt always places dread liches now, so one can't use a variety of smiting means to safely wear down any lich combinations that otherwise can't attack through the grates. It also finally places pressure plates under the tiles that will free the liches, so there's far less spoilers attached to the vault. * A few appropriately-air-themed Zot vaults that don't contain all of the downstairs or all of the upstairs now place storm talismans, regularly over the lightning rods that'd be found earlier by that point. We're already handing out level 9 spells in Zot vault rewards anyway, and it's not exactly solving Zot:5 compared to playing well enough there. -------------------------------------------------------------------------------- b47861556a | regret-index | 2024-02-13 22:44:00 -0330 Make exactly one type of fountain not count as a watery feature (elliptic) With the multitude of different decoration types added and upcoming, there is a need for more consistency between them, and regular fountains were tracked as water for a variety of mechanics while sparkling fountains did not. Fire projectiles could make steam, sufficiently strong cold projectiles could make freezing clouds, and while no vaults nor level gen itself use it nor should use it these days, technically electric eels or entire krakens could fit in a fountain. The clouds are narrow mechanical interactions (since fountains themselves aren't that common) that don't need to serve as player traps, while eels work better in actual bodies of water and krakens shouldn't fit in fountains anyway. (There's also putting out sticky flame, and the loss of that is a little sad, but also the walk to a fountain would potentially put it out before even getting to the fountain anyway. This also cuts some Waterstrike and Shoals tide interactions, but Shoals doesn't exactly need fountains to provide water there.) Fountains now consistantly just count as floor for all intents and purposes. This also removes feat_is_watery(), since it is entirely redundant with feat_is_water(). (I might consider flavour messages for walking over them in the future with an rc setting to potentially mute such, in the same vein as another planned feature, but it should probably be tested on those first.) -------------------------------------------------------------------------------- bfd232f637 | DracoOmega | 2024-02-13 22:18:27 -0330 Fix apostles still getting player Vhi's instead of monster Vhi's Seems to have gotten messed up in the rebase to master. -------------------------------------------------------------------------------- 33d090a6ea | David Lawrence Ramsey | 2024-02-13 17:37:04 -0600 Fix spelling. -------------------------------------------------------------------------------- d28b14363d | DracoOmega | 2024-02-13 19:40:15 -0330 Charge artefact text to account for Mountain Dwarf ability (ge0ff) Now it can also be a little more specific about not working on unrands, too. -------------------------------------------------------------------------------- 817a28345e | DracoOmega | 2024-02-13 19:39:06 -0330 Fix hostiles beyond able to follow the player through portals (various) This was broken by 71bd2ada001b which was only intended to let you take FRIENDLIES with you, rather than losing the old enemy avoidance behaviour. (It's possible this was responsible for a bug that caused multiple monsters to follow the player into the arena after using Okawaru's Duel ability, but I've not been able to reproduce that myself.) -------------------------------------------------------------------------------- 751ec8d2e7 | David Lawrence Ramsey | 2024-02-13 14:22:11 -0600 Tweak punctuation. -------------------------------------------------------------------------------- fdec872538 | elliptic | 2024-02-13 12:13:10 -0500 Fix reversed logic for octopode offhand punches It gave offhand punch with shield to all non-octopodes instead. -------------------------------------------------------------------------------- 598725c5f2 | DracoOmega | 2024-02-12 18:28:39 -0330 Don't fire god conducts for allies banishing enemies -------------------------------------------------------------------------------- 0af507d5f7 | DracoOmega | 2024-02-12 17:51:53 -0330 Actually fix that on UNmarshall instead of marshall That's what I get for rushing... -------------------------------------------------------------------------------- c1aaa98db6 | DracoOmega | 2024-02-12 17:41:42 -0330 Fix a crash with rescaling damage_friendly Now that damage_friendly is no longer DOUBLE the friendly damage done to a monster, and assert could be tripped if a save file with a damaged monster was upgraded and that monster was killed. -------------------------------------------------------------------------------- 3a0b63c28c | David Lawrence Ramsey | 2024-02-12 13:16:50 -0600 Fix wording. -------------------------------------------------------------------------------- 710106c67f | DracoOmega | 2024-02-12 13:31:48 -0330 Checkwhite Of course, the original branch was fine and I never thought to run it for the one new file upon rebase >.> -------------------------------------------------------------------------------- 900342706a | DracoOmega | 2024-02-12 13:00:38 -0330 Fix typoes (Oneirical) -------------------------------------------------------------------------------- 7083e1d292 | DracoOmega | 2024-02-12 13:00:38 -0330 Fix Beogh conversion HP thresholds (Oneirical) -------------------------------------------------------------------------------- 4c96c8b02c | DracoOmega | 2024-02-12 13:00:38 -0330 Give Recall Apostles at *1 instead of *3, adjust keybinds The player cannot *get* apostles until 3*, but it felt awkward for smiting to sometimes remove the ability of the player to call existing apostles between levels. Now the player gets it at 1* (but the ability will be hidden if they have not recruited any yet) Also adjust internal ordering so the default keybind for recall and smite aren't so weird. -------------------------------------------------------------------------------- d26a540e39 | DracoOmega | 2024-02-12 13:00:37 -0330 Adjust Mennas's description To account for new Orcish flavor -------------------------------------------------------------------------------- f263e331dc | DracoOmega | 2024-02-12 13:00:37 -0330 Cosmetic orcification Beogh worshippers now get a fake-mutation at 3* to indicate their orcish physical features growing in. This has custom messages to try and account for different species physiology. (I didn't make this a real mutation since I think it should ignore most things that would affect that and then it would need different message overrides for different species, etc.) This mutation remains if the player stops worshipping Beogh, but if they then worship Zin, Zin will cleanse it from them! -------------------------------------------------------------------------------- 28f58e91f7 | DracoOmega | 2024-02-12 13:00:37 -0330 Unbreak orcish follower speech, adjust some lines The code was still only giving special 'orcish' lines for followers and Beogh worshippers if you were a Hill Orc, so a huge number of speech lines could never be seen. Beogh worshippers will now always qualify as 'related' and I have edited a handful of speech lines for things that now feel out of theme (or otherwise imply that random orcs follow you, as opposed to leave you along). I also reduced the huge negative weight to allies orcs speaking, since there are now far, far fewer of them. This is far from a comprehensive dialogue pass, but should still improve things. -------------------------------------------------------------------------------- 8bc2e63c94 | DracoOmega | 2024-02-12 13:00:37 -0330 Remove a leftover from ally kills giving 1/2 XP Monsters internally track damage done to them in two categories: damage that will give the player XP, and damage that won't (ie: walking through natural clouds or being caught in the blast of another non-confused enemy). Because player allies used to give 1/2 XP, the 'XP-granting damage' value multiplied all player damage by two (since it was 'twice as good as ally damage') and did math with this basis. I have simplified this to just use a standard 1-to-1 ratio in all cases. (This incidentally fixes a bug where allies that banished enemies would grant no XP for the banishment at all) -------------------------------------------------------------------------------- a99f5f2d08 | DracoOmega | 2024-02-12 13:00:37 -0330 Fix Beogh conversion not being offered after abandoning your god Due to how the level caches whether there is a possible conversion offer on the floor upon first seeing an individual priest, if you weren't an atheist then, they will never offer it until you leave the floor and come back. (Also raise the HP threshold required for conversion to be offered to 2/3 instead of 1/2) -------------------------------------------------------------------------------- 977514b4d7 | David Lawrence Ramsey | 2024-02-12 13:00:37 -0330 Adjust descriptions of gnolls and ogres. Since orcs aren't really a species anymore, they can't be relatives, but can still be friends. -------------------------------------------------------------------------------- 4d81122c55 | David Lawrence Ramsey | 2024-02-12 13:00:37 -0330 Update the Torch status for unlit and lit states. -------------------------------------------------------------------------------- 13f15799a3 | DracoOmega | 2024-02-12 13:00:37 -0330 Properly warn Beogh players when attacking while confused near apostles This seems to have gotten broken when I made apostles themselves not get angry when attacked (since them ever being hostile messed a number of things up), but this made the warning logic no longer care that BEOGH would still get upset. Now it checks whether the monster can be angered *inside* bad_attack, which seems a more logical place for it to be anyway? -------------------------------------------------------------------------------- 90196dfee5 | DracoOmega | 2024-02-12 13:00:37 -0330 Note in the log when the player recruits an apostle -------------------------------------------------------------------------------- 5325a588fe | DracoOmega | 2024-02-12 13:00:37 -0330 Fix binding The Royal Jelly's soul not opening the vault Since Bind Soul actually *prevents* the monster's death internally (despite what the flavor looks like...), a bunch of death triggers don't happen and this was the most noteworthy one. Now binding a soul will immediately fire some death triggers. I'm... not 100% happy with this; I can't help but wonder if other death-related things should also be being process when binding a soul, but I've also not seen other specific complaints (and there's awkwardness with having the original simply die, since the bound soul needs to inherit their equipment...) -------------------------------------------------------------------------------- f359be642f | DracoOmega | 2024-02-12 13:00:36 -0330 Add ability icons for dismiss/recruit apostle (and repurpose one for BfB) The dismiss apostle icon even changes its appearance based on whether the apostle is currently alive or dead! -------------------------------------------------------------------------------- b88b685d91 | DracoOmega | 2024-02-12 13:00:36 -0330 Fix low power warriors accidentally getting throwing weapons -------------------------------------------------------------------------------- 58a3cf78d1 | DracoOmega | 2024-02-12 13:00:36 -0330 Rewrite backend handling of the player's apostles and their state The original version of this used a whole lot of different props (and even assembled some prop keys via a prefix and the monster's mid) and was generally a little unwieldy (even if it did work). I have converted this over to using a small data structure specifically for tracking apostle state. This generally simplifies code and will probably provide future benefits. It also allows me to track a 'vengeance contribution' for each individual apostle the player has, which I am using to adjust the revival formula yet again to fix a few weird cases (eg: dismissed apostles would still contribute a vengeance bonus upon vegeance completion, and the way piety needed was capped could cause 3 deaths to be cheaper than 2). **THIS WILL BREAK SAVES WORSHIPPING BEOGH PRIOR TO THIS POINT** Or rather, players with Beogh exprimental saves that upgrade to this version will probably lose the ability to revive apostles they have, and other things may go wrong. But this way, things on the backend should be better by the time we merge with trunk. I have tested most of the interactions affected by this change, but have no confidence I have squashed 100% of the bugs. It was tricky to set up in the first place, so we'll have to see if people find more of them.... -------------------------------------------------------------------------------- 0768ad7e14 | David Lawrence Ramsey | 2024-02-12 13:00:36 -0330 Adjust Yred nonliving death msg. Since the black torch is now explicitly powered by souls, not bodies. -------------------------------------------------------------------------------- 62e296f0d0 | David Lawrence Ramsey | 2024-02-12 13:00:36 -0330 Fix spelling. -------------------------------------------------------------------------------- 2336e41e9f | DracoOmega | 2024-02-12 13:00:36 -0330 Leave allies behind when taking transporters without room to place them The current behaviour when taking a transporter is that the game tries to place all monsters coming with you near the player, and then if there is not enough room for them, to place them anywhere else in the level. In some rare situations this has awkward effects: for instance, if there isn't room to place followers after a Gauntlet transporter, those followers can be placed in inaccessible bubbles of the Gauntlet instead. This is especially bad for Beogh worshippers, as it can lead to their apostles immediately dying in ways you will never be able to avenge. Instead, if there is no room to place a friendly follower near you, simply leave them behind. Note: a similar thing happens when travelling across stairs, and while it also makes sense not to have elevator vaults teleport allies across a floor, I don't think it is safe to do so in this case; we cannot choose to leave a creature behind at its original location because that floor is already unloaded - they would simply cease to exist entirely. -------------------------------------------------------------------------------- d0523255b2 | DracoOmega | 2024-02-12 13:00:36 -0330 Fix a typo (Oneirical) -------------------------------------------------------------------------------- 20b91082ab | DracoOmega | 2024-02-12 13:00:36 -0330 Try to prevent wizard apostles from shoving warrior apostles out of melee Since wizard apostles often have higher HD than warriors (for spell damage purposes), they will happily shove warriors out of the way to get in melee of enemies instead. This feels fairly bad and hurts their utility. Instead, try to make warriors take frontline priority over all other apostle types. -------------------------------------------------------------------------------- 1a7d3d2297 | DracoOmega | 2024-02-12 13:00:36 -0330 Fix a few Yred Light the Torch interactions You can now use the torch on more than a single Pan floor per game and cannot light the torch in Abyss at all. -------------------------------------------------------------------------------- ee83b44df3 | David Lawrence Ramsey | 2024-02-12 13:00:36 -0330 Fix wording. -------------------------------------------------------------------------------- a9ae0c87c7 | David Lawrence Ramsey | 2024-02-12 13:00:36 -0330 Fix typo. -------------------------------------------------------------------------------- a0f32581da | David Lawrence Ramsey | 2024-02-12 13:00:36 -0330 Fix capitalisation. -------------------------------------------------------------------------------- c1e9edfe0b | David Lawrence Ramsey | 2024-02-12 13:00:36 -0330 Add missing Torch status description. -------------------------------------------------------------------------------- 9b2ac7c21b | David Lawrence Ramsey | 2024-02-12 13:00:36 -0330 Fix wording. -------------------------------------------------------------------------------- 97a3dcafad | David Lawrence Ramsey | 2024-02-12 13:00:36 -0330 Fix typo. -------------------------------------------------------------------------------- 63503779cc | David Lawrence Ramsey | 2024-02-12 13:00:35 -0330 Checkwhite -------------------------------------------------------------------------------- 238c146a84 | David Lawrence Ramsey | 2024-02-12 13:00:35 -0330 Re-add lost typo fix. -------------------------------------------------------------------------------- 7dfd7e7624 | DracoOmega | 2024-02-12 13:00:35 -0330 Print a reminder when you kill things with Yred without a lit torch So long as your torch *could* still be lit on that floor, but was not. A couple people said this might help with sometimes forgetting to do so, and hopefully make it clearer to new players how the god works currently. -------------------------------------------------------------------------------- 4ed34f77cf | DracoOmega | 2024-02-12 13:00:35 -0330 Prevent shafting when Yred's torch is lit In practice, I think this wasn't *really* a balance concern, but enough people seemed to find that it felt bad that I don't think it's important to preserve either. -------------------------------------------------------------------------------- 131f71961a | DracoOmega | 2024-02-12 13:00:35 -0330 Remove Yred piety bonus for mostly-cleared floors This bonus was extremely small in practice (only +~1.5 extra piety for clearing 91% instead of 66%) but multiple players assumed it was larger and warped some of their play decisions around it. This isn't a desired effect, so I'm simply removing the bonus entirely (but leaving the flavor messages) If this somehow proves on overly meaningful nerf to Yred's overall piety gain, we can tweak it up in another way. -------------------------------------------------------------------------------- 9c8e3d14eb | DracoOmega | 2024-02-12 13:00:35 -0330 Replace Hill Orcs with Mountain Dwarves Now that Beogh allows worship from any species, it's been broadly agreed to replace Hill Orcs with some sort of dwarf. I'm not married to the specific name (and other people seem to care more about this), but we can go with this at least for now. Mountain Dwarves are intended to fill a similar role to the Hill Orc species they are replacing - strong heavy-armor fighters who are noticably better at casting than their Minotaur cousins (even if still middling at it in several regards). I want to lean a little harder into them being especially suited for heavy-armour casting. As such, they innately get 1/2 ER from their armour for purposes of spellcasting (but not for EV). They retain HO's noteworthy +3 invo, while also offering the first Fire Apt above +1 in the game (which old Mountain Dwarves also shared, for what it's worth). There have been numerous suggestions for an additional simple gimmicks, but I'm interested in trying out this one: unlike any other species, their cultural history as artisans for the gods lets them use enchant weapon/armour scrolls to improve randarts. They cannot improve them above the level that a mundane item of the same type could be improved, and cannot affect unrandarts at all (which are conveniently a different color these days, for clarity!). I am hoping that this gives them uniquely interesting decisions over which items to wear in a way that is different from other species without being too obtrusive about it. Capping things to normal item plusses means they still can't make items stronger than randart high-rolls already could, though it obviously increases their consistency at finding such. -------------------------------------------------------------------------------- 8b4507520a | DracoOmega | 2024-02-12 13:00:35 -0330 Tweak apostles again -Give them missing See Invis. -Improve wizards' chance for a ring (and limit it to ring types that will actually do something helpful for them). -Make better heavy armor types a bit less rare. -Adjust warrior spell lists, moving the level range of Might upward and making several other spells more common and/or available earlier. -------------------------------------------------------------------------------- 4ae1c6de6b | DracoOmega | 2024-02-12 13:00:35 -0330 Remove Touch of Beogh's effect on spell HD I've been slightly concerned this contributes to some overly dangerous early encounters, but also there's currently no good way to indicate HOW enhanced the spell damage of early wizards is. Maybe this nerfs them too much later in the game, but who knows? (Touch of Beogh retains the improved cast rate part of Brilliance) -------------------------------------------------------------------------------- 4addfe49e4 | DracoOmega | 2024-02-12 13:00:35 -0330 Let orc apostles walk on water Or something close enough to it, anyway. They basically count as amphibious in all ways, aside from being drawn on top of water, not resisting drowning, and having different xv lines. The code for this feels slightly hacky, but is minimal and localized, so probably fine. Swamp and Shouls have continued to be awkward enough for Beogh worshippers that I think it's mechanically important to do this (and the flavor fits!) -------------------------------------------------------------------------------- 8f7c6c806a | DracoOmega | 2024-02-12 13:00:35 -0330 Tweak Beogh resurrection piety mechanics a little The old system had a few weird issues in certain cases. Each apostle death added to the 'total piety needed' to trigger a resurrection, while clearing vengeance divided this 'total piety needed' by 4. But this meant that: -Clearing vengeance 3 separate times for three separate deaths gave a considerably larger benefit than having all 3 of your apostles dying at once and avenging them together -If you dismissed a dead apostle to recruit a new one and THAT died, you'd continue carrying forward the cost of the initial one who was dead. In some cases where avenging was not possible, this could defer resurrection indefinitely. -If an apostle died with no enemies around (possibly due to posion from something already dead), you would NEVER get the vengeance bonus and it would take far longer to revive them. Now, instead of dividing total piety needed, fulfilling vengeance counts as getting a large lump sum of progress, and this progress is proportional to how many apostles have been avenged. It should not matter if they die individually or all at once. Also, if a death does not have any targets to mark for vengeance, you will gain the piety you WOULD have gotten from avenging them immediately. Total piety needed for resurrection is capped (at a bit less than 3 times the cost of reviving a single apostle), so that continuously having new recruits die won't be needlessly punishing. Also, I have removed the scaling of apostle revival cost by apostle power. This had been intended to make early revivals quicker, and considered expected piety gain in lategame to be faster anyway, but anectodally, lategame apostles still die very quickly, so that may not have been necessary. Will continue to keep my eye on it. -------------------------------------------------------------------------------- 4aeb71bd7c | David Lawrence Ramsey | 2024-02-12 13:00:35 -0330 Fix punctuation. -------------------------------------------------------------------------------- c5226419f1 | David Lawrence Ramsey | 2024-02-12 13:00:35 -0330 Fix wording. -------------------------------------------------------------------------------- 62afc2ab20 | David Lawrence Ramsey | 2024-02-12 13:00:34 -0330 Fix more typos. -------------------------------------------------------------------------------- d9b01eff48 | David Lawrence Ramsey | 2024-02-12 13:00:34 -0330 Add a few more Beogh apostle challenges. -------------------------------------------------------------------------------- bede89242a | David Lawrence Ramsey | 2024-02-12 13:00:34 -0330 Move Beogh apostle challenges to the database. -------------------------------------------------------------------------------- 8341cf9762 | David Lawrence Ramsey | 2024-02-12 13:00:34 -0330 Fix typos. -------------------------------------------------------------------------------- bf95a28546 | DracoOmega | 2024-02-12 13:00:34 -0330 Fix Yred wrath summons being friendly instead of hostile -------------------------------------------------------------------------------- 61f58e8097 | brandon s allbery kf8nh | 2024-02-12 13:00:34 -0330 fix android, xcode and visual studio projects (#3517) not that the latter two likely to work afterward -------------------------------------------------------------------------------- 8281743e1d | DracoOmega | 2024-02-12 13:00:34 -0330 Fix a ~3 turn buffer before the Bind Soul debuff wears off Ending immediately when LoS was broken sometimes led to unexpectedly losing your ritual without the player even realizing that a move would put them out of sight of their target. Now give them a very short grace period before ending the Bind Soul effect. I really, really hate this code. Surely there is a better way to reduce the duration of an enchantment by a specific amount than this? I didn't want to deconstify an argument in a giant function that otherwise respects this, though.... -------------------------------------------------------------------------------- f2bdd56232 | DracoOmega | 2024-02-12 13:00:34 -0330 Don't crash on saving game after abandoning Beogh with apostles The dump was trying to get the name of the 'Dismiss Apostle' abilities so that it could show actions counts in the dump and with all apostles now erased from their internal slots, was crashing. Also: make logs count the 3 Dismiss Apostle abilities as the same ability, for action count purposes. This code is kinda ugly.... -------------------------------------------------------------------------------- 41bdf576c2 | DracoOmega | 2024-02-12 13:00:34 -0330 Don't forbid recalling allies out of the Abyss Since actually being banished internally 'kills' a follower, they shouldn't be on the companion list anyway. So all this code is currently doing (I think) is causing companions you take into the Abyss *with* you to be lost there forever. Seems unnecessary and unfun. -------------------------------------------------------------------------------- 1cc89617d9 | DracoOmega | 2024-02-12 13:00:34 -0330 (Hopefully) fix some crashes when reviving apostles that died in portals The game was complaining that an Ice Cave's exit didn't generate, which may have been because it was already used to leave from (and closed). At any rate, since the player should normally never be able to go back to the same floor of any disconnected branch again, it should be fine not to attempt to do cleanup on them... right? -------------------------------------------------------------------------------- 162f1d354f | DracoOmega | 2024-02-12 13:00:34 -0330 Fix Blood for Blood orcs disappearing on save load (Oneirical) The old interlevel recall code was cleaning them up automatically (because they were a 'divine companion' that wasn't listed as having their location be the current floor - because of course they're not real companions at all). -------------------------------------------------------------------------------- 9402a6c0be | DracoOmega | 2024-02-12 13:00:34 -0330 Fix a crash with handling ally_attacked interrupts from dead sources -------------------------------------------------------------------------------- 7d8823f397 | DracoOmega | 2024-02-12 13:00:34 -0330 Fix another arena crash -------------------------------------------------------------------------------- 5b61e976ea | DracoOmega | 2024-02-12 13:00:34 -0330 Don't give apostle challenges on the orb run (Oneirical) Oops. -------------------------------------------------------------------------------- 6e0f2b54f2 | DracoOmega | 2024-02-12 13:00:34 -0330 Fix another typo -------------------------------------------------------------------------------- 424b3b579c | DracoOmega | 2024-02-12 13:00:33 -0330 Adjust Touch of Beogh and apostle power scaling (especially early) Nudge HP of apostles down a small bit at low power, increase it a bit at high power. Change how power capping works so that getting challenges unusually early (monks in particular) does not result in them being unfairly dangerous. Change Touch of Beogh's effect on HP. Instead of a flat +50%, it now gives a bonus that scales with apostle power (capping at the old +50% by 66 pow) This is intended foremost to make early challenges less potentially unfair to weaker or unlucky characters, with just a tiny bit of boosting of lategame allies. -------------------------------------------------------------------------------- d43e904abf | DracoOmega | 2024-02-12 13:00:33 -0330 Fix Infestation angering friendly apostles It seems fine to just make friendlies immune to it, rather than just relying on them not being worth any XP. -------------------------------------------------------------------------------- 3e841c5839 | DracoOmega | 2024-02-12 13:00:33 -0330 Fix some missing Beogh/Yred descriptions -------------------------------------------------------------------------------- 58d3cb9162 | DracoOmega | 2024-02-12 13:00:33 -0330 End Blood for Blood on felid death I am very strongly side-eyeing that 'TODO' immediately below the code added here and thinking I ought to get on with implementing that in 0.32 because this feels like it's getting ridiculous. -------------------------------------------------------------------------------- 2a095079e4 | DracoOmega | 2024-02-12 13:00:33 -0330 Actually properly lose memory of all apostles on abanoning Beogh Currently, if you abandoned and rejoined, the game would let you have the same apostles back again. -------------------------------------------------------------------------------- 5d7853fcdf | DracoOmega | 2024-02-12 13:00:33 -0330 Don't crash on dismissing apostles lost in the Abyss (Oneirical) And probably those in some other places, too! -------------------------------------------------------------------------------- f21637b8b4 | DracoOmega | 2024-02-12 13:00:33 -0330 Make Hurl Torchlight not damage the player, increase range 4->5 The player was already immune if they were undead or non-living, but while I'd hoped in general that not being able to use it at point-blank range would make positioning for it more interesting, in practice I'm not sure this is happening (or that many zombie pileups allow *any* positioning that could do something useful without hitting the player). So for now, let's try it just being harmless to you. -------------------------------------------------------------------------------- 134b4720af | DracoOmega | 2024-02-12 13:00:33 -0330 Interrupt travel when player allies are attacked from out of sight Currently, while visible animations and messages happen when allies are shot from out of player LoS, these do not interrupt travel. This can be somewhat unpleasant for zombies and is deeply bad for apostles (whose deaths is a major event). Now the player should be interrupted by default when an ally is attacked by something the player cannot see. This uses the ME_WHACK behaviour_event() reaction, which should cover a great deal of offensive things used against them, but possibly not everything. I am a little concerned at this making it harder to use travel to flee a battle where your zombies are holding the line, but the positive QoL from this change is obvious. We'll see if any of this ends up being a problem. -------------------------------------------------------------------------------- 8fd3fe7888 | DracoOmega | 2024-02-12 13:00:33 -0330 Don't randomize bound soul HP in the targeter -------------------------------------------------------------------------------- 3c422697ae | DracoOmega | 2024-02-12 13:00:33 -0330 Don't turn friendly orc apostles hostile, even if you hit them Hitting them would trigger penance, which is supposed to just temporarily remove all allies, but the first ally hit could still turn hostile and NOT be removed (which caused multiple different subsequent buggy behaviours). Now they are unable to be made hostile, period. (You still shouldn't hit them) -------------------------------------------------------------------------------- 6c3fea370f | DracoOmega | 2024-02-12 13:00:33 -0330 Make dismissing divine allies on penance a fineffect If you read ?immo around orcish allies and something hit one, you would be blamed for the resulting flame cloud and given penance *in the middle of an attack*, resulting in deleting the attacked monster before the attack was done, ultimately resulting in a crash. I suspect this is the same cause as some TSO I've seen periodically, so I am moving all divine ally dismissal into a fineffect. This technically results in the player being able to get more penance at a time (by hitting multiple summons at once before they disappear), but a solution to that might be somewhat complex and I'm not sure it's necessary. I also removed some old code to protect against a crash that should no longer be necessary. -------------------------------------------------------------------------------- c998edd0f3 | DracoOmega | 2024-02-12 13:00:33 -0330 Don't issue divine challenges while taking the stairs Beogh could send an apostle at you WHILE you were leaving a level, and then get mad at you when you completed doing so (even though the player literally can't stop themselves at that point) -------------------------------------------------------------------------------- 2de81325c6 | David Lawrence Ramsey | 2024-02-12 13:00:33 -0330 Adjust Recite for Yred flavour changes. Yred is fallen now; and Lugonu, being outside both the pantheon and the dungeon, is beyond fallen. -------------------------------------------------------------------------------- 726641d81b | regret-index | 2024-02-12 13:00:32 -0330 Add some apostle names All of them are references to mythical or historical defeated converts of kings, warriors, retainers, or wild men, alluding a little to the new defeat and recruit system attached to orcish apostles. Possibly a little more could be done with this, possibly we'll just get other sorts of references snuck in eventually. Also, remove Harm as an apostle name, since it collides weirdly with the actual brand we've had for a long while now. -------------------------------------------------------------------------------- 659aec8226 | regret-index | 2024-02-12 13:00:32 -0330 Add and edit a few apostle spell tiles / descriptions / lines Sticks to Snakes was missing a description and didn't imply the double snake summon, which it now does. Several summon spells also get tiles: Sticks to Snakes gets roctavian's old tile for such, Divine Armament's tile uses the standard circle and snw-0's Tukima's Dance tile, and Summon Vermin uses eyes from Sastreii's goliath frog and roctavian's jumping spider on top of a modified version of roctavian's Summon Small Mammals. -------------------------------------------------------------------------------- cdd5ff0c81 | DracoOmega | 2024-02-12 13:00:32 -0330 Fix some Beogh status tracking being buggy when a felid dies (Oneirical) -------------------------------------------------------------------------------- 9c5a3828f8 | DracoOmega | 2024-02-12 13:00:32 -0330 Fix new status icons not displaying in webtiles -------------------------------------------------------------------------------- 7b7eff50b8 | DracoOmega | 2024-02-12 13:00:32 -0330 Fix some typoes (Oneirical) -------------------------------------------------------------------------------- edb14d6f02 | DracoOmega | 2024-02-12 13:00:32 -0330 Fix crashy Beogh wrath In a crisis of personality, Beogh would still be added to the list of gods that can punish you while worshipping them, but then remember they were not supposed to do that sort of thing anymore. Then the game would become unhappy. -------------------------------------------------------------------------------- 4bc29743d5 | DracoOmega | 2024-02-12 13:00:32 -0330 Be more consistant about announcing Beogh conversion offers The old code clearly intended the player be guaranteed to have a priest speak to them (and print a message about how to convert) the first time they were eligable. But since this was in behaviour_event() it wasn't actually guaranteed that the priest would do this on any turn. In particular, it seemed very unlikely on turns they cast spells (though they would sometimes not bother for many turns in a row for unclear other reasons). I have pulled this outside of monster behavior code entirely. When the player qualifies for the first time, they will reliably be informed at the start of their turn. (Priests still have the old 1/10th chance to mention conversion at any other eligable time) -------------------------------------------------------------------------------- d9a27e9d63 | DracoOmega | 2024-02-12 13:00:32 -0330 Fix misformatted status description (Oneirical) -------------------------------------------------------------------------------- 5303d90686 | DracoOmega | 2024-02-12 13:00:32 -0330 End Fathomless Shackles when you die as a felid (Oneirical) -------------------------------------------------------------------------------- 16b257c626 | DracoOmega | 2024-02-12 13:00:32 -0330 Fix friendly orc apostle descriptions being broken -------------------------------------------------------------------------------- ec13966b38 | DracoOmega | 2024-02-12 13:00:32 -0330 Make it more explicit how you recruit apostles When an apostle becomes available to recruit, if the player has none already, the game will print an explicit reminder about the ability you need to use to recruit them. Also added a default force_more when recruitment is available, as well as letting defeated apostles linger slightly longer. -------------------------------------------------------------------------------- 0494e2ba4b | DracoOmega | 2024-02-12 13:00:32 -0330 Remove an overlooked debug message -------------------------------------------------------------------------------- eae03d5cd5 | DracoOmega | 2024-02-12 13:00:32 -0330 Fix a logic check for Light the Black Torch being inverted Fixes being able to light the torch an unlimited number of times per floor... -------------------------------------------------------------------------------- f6bdb7c248 | DracoOmega | 2024-02-12 13:00:31 -0330 Fix Beogh species name changes not being visible in webtiles -------------------------------------------------------------------------------- 24b0147655 | DracoOmega | 2024-02-12 13:00:31 -0330 Fix tag upgrade build Overlooked these earlier. -------------------------------------------------------------------------------- 7faa43753b | DracoOmega | 2024-02-12 13:00:31 -0330 Prevent using Sculpt Simulacrum on friendly/neutral units (Darby) I considered making it prompt you and then aggro them, but this seems simplest. -------------------------------------------------------------------------------- 18fcfa04ef | DracoOmega | 2024-02-12 13:00:31 -0330 Revamp Yredelemnul Since their last revamp, Yredelemnul has felt in a mechanically troubled spot. Passive reaping can be useful, but using zombies as piety/ability payment suffers from several problems: -The player has essentially no god powers on a new floor -The opportunity cost of losing long-term allies for a short-term effect is frequently not equitable (this is especially true with Dark Bargain) -Piety is based on total HD of nearby zombies, while ability costs are based strictly on NUMBER of zombies, and the zombies to sacrifice are picked randomly, so it is often impossible for the player to even ballpark how many uses of Drain Life they have available before running out of piety -Your zombies can die out of LoS while travelling, depriving the player of god powers if they don't micromanage them -Frequently, by the time the player is in a bad situation, they no longer have the bodies left to perform any divine intervention at all All in all, it's been widely agreed that the practical problems outweigh the benefits of this system, so let's try something else entirely - specifically aimed at addressing key weaknesses of current Yred (bad on new floors, no panic button in bad situations) while adding a little more flavor. Yredelemnul is now specifically themed as a fallen 'good' god who was exile from their number and holds a grudge against them. (They always were the only evil god who actively disliked using holy weapons, and profane servitors are clearly dark mirrors of angels, so let's lean into this a little more). They specifically want their worshippers to be able to scour floors clean of life without retreat, and give a power set to encourage this. ----------------------- Post-Revamp ability set ----------------------- The player now gets an umbra upon worship, which grows with piety. Passive reaping works only upon monsters that *die inside an umbra* (it is fine if zombies kill them, but the player must be nearby). The should encourage a little more active participation in battle than spell-based necromancers often do. Formula for reaping chance has been changed a little. Base reaping chance starts out lower than before, but rises with piety. Your odds of reaping an individual zombie are inversely proportional to how many HD of them you currently control - if you have none, you will ALWAYS reap a kill. The idea is to smooth out low-rolls when a Yred-worshipper has few allies, while curtailing snowballing a little harder (especially at low piety) ------------------------------------- New 0* ability: Light the Black Torch ------------------------------------- Raises Yred's symbol aloft and begins your conquest of the current floor in their name. Immediately provides the player with multiple temporary undead servants (based on player's xl and capped by a function of their piety). This is usable only ONCE PER FLOOR, ever. Moreover, the player *only* gains Yred piety while the torch is lit and it will be extinguished as soon as you leave the floor by any means. Yred will provide a message evaluating the player's performance when they first leave a floor, as well as some bonus piety if they have killed a majority of enemies on it before doing so. This is intended to help Yred's weakest period - the start of floors when you have no zombies - while giving the player some control over when they want to start a floor 'for real' (ie: maybe they got shafted and just want to flee, maybe there were no monsters anywhere near the stairs and immediate summons would be wasted, etc.). In addition, it provides a flavorful conduct that meshes well with how zombies already want to work. ------------------------------- New 2* ability: Hurl Torchlight ------------------------------- At 2* or above, whenever the player Lights the Black Torch, they will gain a small number of charges of Hurl Torchlight that last for the rest of that floor - 2 charges at 2* piety, rising to 5 by 5*. This is a fireball-style projectile that deal appreciable non-elemental damage to living/holy/demonic creatures (ie: the same types Yred can reap) and empowers your undead minions caught in its blast - giving them short-duration Might and a little instant energy. This gives even more immediate level-starting power, while continuing the theme of 'Use your per-floor resources well' and plays interestingly with your zombie army. As Yred prizes unique souls, killing a unique will grant an additional charge of Torchlight. ------------------------------- Tweak Bind Soul as a 4* ability ------------------------------- Bind Soul was always the most unique and iconic Yred ability and this preserves the core of it (perhaps making it even more useful) while changing some fiddly parts of it. Rather than applying a limited-duration status to an enemy you are trying to bind (and thus making it rarely unpredictably fail if you missed too often, which felt bad), the soul-ripe status has unlimited duration, but breaks as soon as you lose LoS on the enemy you are binding. In exchange (and to preserve some of the risk/reward feel of the ability), you immediately lose 1/3 of your current HP to begin the binding process (but get it back if you succeed). This combination should make it feel dangerous to bind the most powerful souls, but leave the player feeling they have more agency in ensuring they do. Bound souls now have fast regeneration (a QoL fix for resting with them out of combat), and their HP is based on a function on the original monster's HP and the player's invocations skill rather than strictly 'HD x 10' which had some unintuitive effects. (Bind Soul has a better targeter that will now also inform the player of how durable their new friend will be if they take it!) ----------------------------------- New 5* ability: Fathomless Shackles ----------------------------------- Aimed to offer Yred a powerful panic button that still works even if their army has fallen apart, Fathomless Shackles is like a twisted mirror of Sanctuary. It creates a zone on the ground which slowly shrinks over time. So long as the player remains inside the zone, all enemies that share it with them will be bound in place and unable to move and will also take constant negative energy damage which heals the player for a portion of the damage dealt (capped to prevent huge crowds from being overly strong without also making reasonable numbers of targets offer too little healing). Isolated souls (ie: enemies not adjacent to any ally) take 50% more damage. Like Sanctuary, another cannot be created while the current one remains (even if it's become too tiny to be useful). ------------------------------------ Ideally, these changes make Yred more powerful, but also more fun to play. -------------------------------------------------------------------------------- 71bd2ada00 | DracoOmega | 2024-02-12 13:00:31 -0330 Allow followers to enter/be recall into portal vaults The original veto for this appears to long predate interlevel recall and I can't help but wonder if it was an attempt to prevent followers being lost forever inside portals. In any case, that time has long passed and I see no good reason to forbid a player from using apostles or bound souls in portal levels. -------------------------------------------------------------------------------- 848e6196cd | DracoOmega | 2024-02-12 13:00:31 -0330 Make Beogh/Yred recall instant again With the number of permanent allies of Beogh capped at 3, incremental recall felt rather silly. Sometimes it got all 3 of them in one turn and sometimes it took 2 (with additional messages about starting/stopping recall). This feels unnecessary. Yred still can have a larger number of zombies at once, but given that they are bound to a single floor and the mass armies that originally prompted incremental recall are a thing of the past, I think we can safely trim this code out and simplify. -------------------------------------------------------------------------------- 3f351f0dc0 | DracoOmega | 2024-02-12 13:00:31 -0330 Comprehensively overhaul Beogh Beogh has been in a somewhat troubled place for a long time. Micromanaging an army can be a tedious, fiddly process in Crawl, and yet a Beogh player is punished for not doing so by losing large chunks of their god's supposed benefit - followers getting caught on monsters out of sight of you and dying, being shot and pulled away when you're auto-travelling, or just in general behaving in ways not conducive to them living. The reward for babysitting them is also lackluster; while orcs can be powerful for a while, they fall off hard later in the game where even warlords cannot be expected to live long against serious threats. But even if that were not the case, and your allies remained extremely powerful lategame, it's arguably not good design to offer the player a god that 'plays itself' by letting you grow an army that can handle dangerous things with limited player intervention. In addition, while Beogh being restricted to Hill Orcs was a flavor-first gimmick, it was also one that limited the potential richness of the god; not everyone wants to play a hill orc, and much of the richness of Crawl is the combinatorics that come from being able to pair arbitrary gods/species/backgrounds together. And so all of that is going to change. This commit combines years of feedback, suggestions, and design discussions to create a completely new Beogh experience - one that should hopefully stick to the spirit and fantasy of what Beogh offered, while being more mechanically interesting, less tedious to play, and offering more clearly strong upsides. Major changes: --------------------------------------------------------- Open Beogh worship up to all species, reflavor Beogh/orcs --------------------------------------------------------- Beogh has received some significant rewriting to accompany this change. Rather than simply being an intolerant god of a violent people, Beogh is now explicitly a god of pariahs and the dispossessed. Orcs are not a singular species which Beogh allow to worship them, but rather *anyone who worships Beogh may rightly call themselves an orc*. The shared physical appearance seen in the orcs of the dungeon is a result of Beogh's power touching upon them over a long period of time; some of those orcs may have once been humans, elves, or even octopodes. Still outside the normal pantheon (and disliked by the Good gods), players of all species can convert to Beogh via any orc priest if they are at low health *and not already worshipping another god* (this is partially to keep the Beogh status light from constantly blinking at every player in the game forever now). In fact, a player may now access the 'Convert to Beogh' ability while confused, and doing so will provide minor healing and confusion removal. Fall to your knees and the Shepherd will protect you as one of their flock. A significant amount of descriptive text involving Beogh has been rewritten. ---------------------------------------------------- Remove nearly all existing orcish follower mechanics ---------------------------------------------------- Beogh worshippers no longer have normal orcish monsters join them. All Beogh blessings (ie: improving follower weapons, bestowing additional followers, and random healing after kills) are removed. Monsters can no longer level up. Manually gifting weapons/armour to followers is removed. The Resurrection ability is removed. Hostile orcs instead have a piety-based chance to turn good neutral, become pacified, and leave the level instead. (To preserve some of the flavor of the old system without it leading to a large army for the player) --------------------------------------------------------- Replace orcish army mechanics with a new 'Apostle' system --------------------------------------------------------- At *** piety and above, Beogh worshippers will be sent divine challenges from Beogh. These apostles are essentially randomized uniques, generated using a system that can scale their power over the entire course of the game. When you defeat these apostles in battle, you can recruit them to join you. The player may have up to 3 apostles following them at once, and may freely dismiss any of them to recruit a new one if they so wish. Apostles that die do not do so permanently, but will be automatically revived by Beogh once the player proves themselves worthy. To differentiate this repeated ally revival as much as possible from Hep ancestors, apostles do not come back over TIME, but rather based on piety gained with an additional twist: Beogh wants you to avenge their deaths. When an apostle dies, all hostiles in sight of it at the time are marked for vengeance. Killing all of the marked targets will greatly speed up the dead apostle's return (currently it cuts the total piety needed to 1/4). Thus, while it is still possible to revive an apostle killed by something you cannot afford to fight, the player is *greatly* incentivized to find a way to do so. The aim is that this system encourages the player to try and defend their allies, but does not permanently punish them for failing to do so - as well as presenting interesting difficulties when the player is forced to manage on the back foot from time to time. (Marked monsters currently also set their patrol points to the body of the apostle they were marked for, to help the player find them again. This may be a *little* weird, but I think it's worth it to avoid the fiddliness of repeatedly autoexploring a level looking for them, and I doubt it's meaningfully exploitable since it requires letting an apostle die, which is a non-trivial loss in power) Internally, the death of an apostle sets a prop for 'piety needed to revive'. If a second apostle dies before the first comes back, the total piety needed is increased. All apostles will always revive together - partially for the greater impact of gaining several refreshed allies mid-battle, and partially to reduce cycles of 'lone apostle coming back, only to immediately die because you can't defend them without other allies around to help'. As this is based on piety gain, Faith does help. Generated apostles are divided into 3 archetypes: warrior, wizard, and priest, and are generated with an internal 'power' parameter (scaling from 0-100) that controls both their stats and what items/spells they have access to. -Warriors have the most HP and melee damage and get the heaviest armour/weapons. They can know Battlecry and sometimes know a single other spell drawn from a list of self-buffs and melee-friendly skills like harpoon shot or Vhi's. -Priests have medium hp/melee power, always know smite, as well as at least one other spell drawn from a list of summoning/support spells (with a couple specialized damage ones) -Wizards have low melee power, but draw from a wide list of conjurations and hexes, as well as some self-buff and utility spells (eg: haste, blink, battlesphere) Since apostles do not grow with the player, and have fixed stats and gear, the idea is that the player upgrades their power over time by getting NEW apostles who are stronger than their old ones. Ideally, different player archetypes may favor some apostle types over others, and specific high-roll apostles will be noteworthy and keep their value even after the player finds other stronger ones. Choosing who to keep should be interesting, and hoping for a particularly good apostle exciting. But you have to defeat them first! ------------------ Apostle Challenges ------------------ An apostle challenge will be issued shortly after the player first hits 3* piety, and then every so often afterwards (based on total piety gained, and slowly down in rate somewhat based on how many challenges the player has already fought). They way they work is this: Beogh announces the challenge when it is issued. Then a randomly generated apostle (scaled based on the number of challenge previous fought, capped by your XL) will be placed somewhere a short distance outside of the player's sight (but with a valid path to the player's location). The apostle and their band (if they have one) can track the player as if the player was Marked. Leaving the floor during a challenge will place the player under a modest penance. (Beogh has been changed to not cause wrath effects on a follower during penance, but this will still deprive them of their apostles until penance is lifted.) Hostile apostles have a buff during challenges, 'Touch of Beogh', which multiplies their HP and acts similarly to a (weak) Might and Brilliance (but stacks with them). The idea was to enable apostles who were simultaneously strong enough to threaten the player when hostile, but not too strong for the player to have as allies (when they will no longer have this buff). Smite is also specifically forbidden from targeting enemy apostles (Beogh wants you to prove your own mortal abilities to them!), though their band is fair game. (I think this is suitably flavorful, but the biggest motivation is that otherwise Smite would be too easy a way to simply delete any scary apostle if you wanted to, and that feels inappropriate) The timing of challenges is not fixed. During god_reacts(), if the player has earned enough piety to qualify for a new challenge, the game checks whether circumstances are suitable. Challenges will not be issued if: -The player is on a rune floor, in a portal vault, or in Zot -The player is below 50% HP or tension is sufficiently high -Several attempts to find a valid space to place the apostle fail The first two are to reduce TOO unkind to the player (apostle challenges can be scary and they will often already have their hands full here). The third is to avoid the expense of exhaustively checking connectivity whenever this happens; if we can't easily find a spot, chances are the player will be in a better location in the near future anyway. ------------------------------------------------------- Passive ability: heals friendly apostles by doing damage -------------------------------------------------------- Both to encourage the player to step into the fray rather than letting allies handle things on their own AND to give the player better agency in keeping their apostles from dying when things go bad, dealing damage has a chance to heal friendly apostles based on the damage done. This uses similar rules to Uskayaw for determining what damage 'counts' (ie: ignoring summons, poison, etc.), but rather than any complicated threat formula simply caps the total contribution of any damage instance by the smaller of 'the remaining hp of the monster damage' and '1/2 of that monster's max hp'. This should minimize any value the player could get from carrying around rats or leaving a high hp monster almost dead and simply reward wading into a fight and hurting things a whole lot. At the end of each player turn (to minimize message spam), there is a 40% chance to take 40% of your total damage contribution that turn (if this is more than 5) and split it evenly among all damaged apostles. This is fairly substantial healing, but apostles are still vulnerable to being overwhelmed and in general encouraging the player to push forward in dicey situations instead of immediately bailing (or feeling completely doomed to save your friends) feels good. ------------------------------------------- Add a new capstone ability: Blood for Blood ------------------------------------------- To replicate some of the old feeling of leading a massive orcish army (but with less tedium and micromanagement) as well as providing the player with a powerful button when they're on the back foot (and perhaps have no apostles alive at all), I have added a dramatic new active ability at 5*. Blood for Blood costs a massive amount of piety, but summons a large number of elite orcs around the player immediately, as well as giving them a status that continuously spawns additional orcs just outside of the player's LoS and has them stream in from all directions over time. The rate of new orc spawns is inversely proportional to how many orcs remain alive (ie: you get more of them, the fewer are otherwise still alive). The Blood for Blood status lasts a long time, but rapidly decays if there are no hostile monsters in sight. This ability can definitely be enough to turn a battle completely around, BUT there is a heavy caveat to using it: you have to be standing over the corpse of a dead apostle. So not only does it require you to have lost an ally in this battle, but you need to be able to reposition to stand on them (and remember: monsters involved in an apostle slaying will patrol around their corpse afterwards, so you can't simply leave and wait for them to go away). To help with UI concerns, tiles with valid corpses are highlighted in a way that makes them clear even if other monsters are standing on them. Fight your way to your fallen kin and swear bloody vengeance in their name! ---------------------- Assorted minor changes ---------------------- -Smiting costs slightly less piety -Adjusted various descriptions ------------------- THINGS NOT YET DONE ------------------- -There's a bunch more dialogue and descriptions that need changing -The flavor-only mutations (and associated messages) of slowly turning into an orc do not exist yet. -Probably further balance adjustments! -Try to avoid giving you apostles with the same name as one you already have -Make the dismissal UI a bit clearer about which apostles are alive or dead -Replace playable Hill Orcs with a different species -Make Beogh wrath summon random apostles to fight the play -Possibly refactor storage/handling of apostles # Conflicts: # crawl-ref/source/mon-data.h # crawl-ref/source/mon-flags.h -------------------------------------------------------------------------------- 1008970e6a | DracoOmega | 2024-02-12 13:00:30 -0330 Add M_CAUTIOUS to make (selective) spellcasters less likely to approach This is intended foremost for orc apostle wizards, but I think there are a few other places where it may be appropriate (such as glowing orange brains, whose spellset is especially hurt by waltzing up to the player without even a melee attack) The way it works is that if an M_CAUTIOUS monster doesn't opt to cast a spell that turn (or use a wand, reaching attacking, etc.) but had a valid spell it COULD have cast, and is not already in melee range of something, it has a 2/3 chance to wait in place instead of moving forward. It's sort of like having a cantrip that it won't ever use in place of attacking. I am hoping this will make wizard apostles a bit better at not flinging themselves into the jaws of death. -------------------------------------------------------------------------------- de802753b3 | DracoOmega | 2024-02-12 13:00:30 -0330 Add Divine Armament, another spell to help round out apostle summons Drawing upon Beogh's long history of directly granting weapons to their followers, this spell summons a single dancing weapon. The dancing weapon an individual apostle can summon will be identical between uses of this spell can will be either an axe or a polearm (both of which I think are the more interesting options for the player to have access to) At low power, it summons either a plain war axe or trident. At medium power, it summons either a battleaxe or glaive of electrocution. And at max power, it summons either an executioner's axe or bardiche of speed. Dancing weapon power also increases between these, so that the actual power of the summon shows larger differences between tiers (and the bottom tier is suitable to offer to the player fairly early) Even weak dancing weapons could be dangerous early enemies for many players, but I think Beogh worshippers' access to smite makes them uniquely capable of dealing with these, and it will help to give priest apostles more variety. -------------------------------------------------------------------------------- 9b8e009703 | DracoOmega | 2024-02-12 13:00:30 -0330 Remove dancing weapon power's effect on weapon speed The formula that controls a dancing weapon's speed (based on power) was broken in gfb02dadd07 and meant that 100 power dancing weapons were normal speed, while ANY value lower than 100 was 1/2 that speed. Since the last Tukima's Dance revamp, the remaining places that used variable power dancing weapons were Beogh wrath (which mostly doesn't exist) and a Nemelex card. Reaching 100 power with the card was pretty attainable, but it was strange that until that point, your summon would both move and attack at half speed. I have removed the effect of power on speed entirely. Even if it did scale linearly, like the other stats do, 50% power meaning 50% damage *AND* 50% speed would be a quadratic effect on power scaling, which I don't think is desireable. -------------------------------------------------------------------------------- 0a50e047fe | DracoOmega | 2024-02-12 13:00:30 -0330 Fix multiple issues with Nergalle's spectral orc summon, revamp her flavor There was a bunch of jankiness with Nergall's summon spectral orcs, at least some of it dating back from when it wasn't otherwise possible to make spectrals of non-base-genus types (ie: only spectral orcs, not spectral orc knights). The way the code originally 'cheated' to make them look like they were higher-level orcs still causes large visible titles over the spectrals in local tiles, often overlapping with each other in unreadable ways. At the same time, the tiles were unable to display the randomized equipment the spectrals were given. The spell also didn't properly respect its own summon cap (and was wildly inconsistent about how much power it could generate at a time - '1 plain orc' and '3 orc warlords' were technically both possibilities!) The spell now always summons 3 orcs at once (its cap). It can no longer summon plain orcs. I have added custom tiles for spectral orc warriors, knight, and warlords to be used only by this spell (so that their equipment is shown). I have also made the orcs specifically spawn with unbranded polearms and unbranded armour, so that there is no need for the player to examine them each time they appear. Higher-level orcs have better base item types, but there is otherwise no randomization. At the same time, I heavily revamped Nergalle's flavor from a 'cruel and ugly sorceress' to a 'chronicler of orcish history'. Her description and all of her speech lines have been rewritten from scratch (to also better line up with the flavor of the Beogh revamp). 'Summon Spectral Orcs' is also renamed to 'Vanquished Vanguard', with the description hilighting the polearms the spectrals are given. Nergalle herself can no longer get warlords from this spell, but the spell has HD-based power scaling so that Beogh apostles at higher levels will still be able to. -------------------------------------------------------------------------------- 3bdcaaee6d | DracoOmega | 2024-02-12 13:00:29 -0330 Move monnames.txt into the monspeak database So that Nergalle can babble about randomly named orcs. -------------------------------------------------------------------------------- e2892a3d53 | DracoOmega | 2024-02-12 13:00:25 -0330 Don't let allies repeatedly cast blink/battlesphere with nothing around It was mildly amusing when a Yred bound soul might do this, but it should be a lot more regular ocurrance for allies to have these spells with Beogh now. And an ally blinking away from you right as you autotravel to another level, so that they miss travelling through the stairs with you, is more than a little awkward. -------------------------------------------------------------------------------- 6316ba047a | DracoOmega | 2024-02-12 13:00:22 -0330 Fix and simplify telling monsters to retreat, add an icon to display it Ordering friendly monsters to retreat had been partially broken for some time by the addition of more and more things (such as zombies) to the list of 'can't attack out of the player's los' - which caused them to immediately bounce back to the player as soon as they left your sight. Even worse, this made it look like they were no longer retreating, even though they still were internally and would thus ignore all hostiles. That part was fixed by 74bf07aea25d19011249c416dfe458c39cdb4042, but old code that kept allies from retreating too far ahead of the player still felt awkward in practice. I have removed the distance-based rubber-banding entirely (possibly this was a protection from when many allies would still attack out of los?) and increased the distance retreating allies will move by default. Retreating allies will now also follow the player across stairs. Finally, I have added an icon to indicate when allies are in a retreating state, which should make their behavior clearer to players. Hopefully, these improvements, combined with the change to the 'stop attacking' order, will make it easier for the player to keep their allies safe when they choose to. -------------------------------------------------------------------------------- 376ae90d61 | DracoOmega | 2024-02-12 13:00:22 -0330 Improve ally 'Stop Attacking'/'Follow Me' orders Telling your allies to stop attacking did nominally cause them to stop attacking, but was a little wonky. First of all, while it made them cancel their current targets, if something attacked them (a common occurrence in situations you'd ever need to tell them to stop attacking in the first place), they would still immediately switch back to attacking that things. Secondly, it would disable ally behavior of automatically picking targets indefinitely. If, at any point, you told your summons to 'follow you' and later ran into an enemy, they would not engage without you attacking first or directly commanding them. Not only was this invisible behavior, but there was no mechanism to cancel it (without setting the pet target some other way, such as attacking something yourself). Now, issuing a 'follow' or 'stop attack' order to allies will also prevent them from responding to attacks, but end automatically once the player has spent 50 consecutive aut outside of LoS of hostiles. This number was picked somewhat arbitrarily, but the idea was to buffer against the order ending immediately if a hostile briefly leaves sight, but still be very likely to have worn off by the time the player reaches something that could be considered 'the next encounter'. Together, this should hopefully make the order more fluidly useful for its ostensible purpose. -------------------------------------------------------------------------------- 0a82c8690a | DracoOmega | 2024-02-12 13:00:20 -0330 Refactor/rename summon_can_attack() This function (used to prevent player summons and other allies from attacking outside the player's line of sight) has gotten a laundry list of specifiers attached to it over time, as more and more things are added to it (and more oversights are corrected). The name is also somewhat misleading, since many of those things are not summons! With the Beogh revamp removing one of the last cases of a perma-friendly player ally being able to attack outside of los, I have simplified the check greatly: now it looks entirely at whether the monster is permanently friendly, with no other qualifiers. This means that charmed/bribed monsters can still fight out of sight (since their 'true' attitude is not friendly) but essentially of the existing cases in _mons_attacks_outside_los should be subsumed more cleanly. I've also renamed these functions, to be more clear with what they're doing now: monster_needs_los() and monster_los_is_valid(). I also removed a couple special-cases that don't seem necessary (spectral weapons are already banned from manual attacks elsewhere, for instance) Fun fact: due to the exact specifiers in _mons_attacks_outside_los, charmed death knights and profane servitors would previously refuse to attack out of los because they worshipped Yred.... -------------------------------------------------------------------------------- 22358aa1f4 | DracoOmega | 2024-02-12 13:00:19 -0330 Fix minor bugs with set_nearest_monster_foe and refactor slightly The iterator for letting monsters pick other monsters as foes, for some reason, used LOS_DEFAULT_RANGE, regardless of the player's current vision range. This meant, for instance, that a monster at the extreme end of a barachi's sight couldn't engage another monster from that distance. The more concerning scenario - monsters still looking 7 tiles away for targets if you're a kobold - turned out not to matter for another reason: global los is cached using the player's LoS range, so calls to monster::can_see() would still fail for overly far monsters - they would just be called against targets that they would NEVER be able to see. With that in mind, I have removed a redundent los check in _mons_check_foe, corrected this bug, and renamed an argument for clarity. -------------------------------------------------------------------------------- 0c26625034 | DracoOmega | 2024-02-12 13:00:17 -0330 Adjust Shock/Sting damage for monsters These spells don't really exist outside of ghosts (that also don't really exist) and low-level apostles, but their damage was really very bad even compared to other low-level monster spells like throw flame/frost. This raises them both fairly appreciably, but also removes a bizarrely high accuracy value for monster Sting. -------------------------------------------------------------------------------- bf7ee06084 | DracoOmega | 2024-02-12 13:00:17 -0330 Tweak monster Sandblast Make it take 1.5x as long to cast, as the player spell does. But also raise its base damage significantly. (For some reason, it was identical to Throw Frost/Flame, despite checking AC 3 times. Now it is significantly more than that.) -------------------------------------------------------------------------------- 15188589b1 | DracoOmega | 2024-02-12 13:00:14 -0330 Adjust monster regeneration enchantment and add Regenerate Other ENCH_REGENERATION was only used as part of monster Trog's Hand (which was itself used only by spriggan berserkers). Since it merely did the equivalent of setting the M_FAST_REGEN flag, this made berserkers heal exactly 1 hp per turn, instead of the ~0.48 they would have healed without it. It did last a long time, but that is frankly a pathetic amount of healing. ENCH_REGENERATION has now been co-opted for another simple monster spell. It now applies regeneration on TOP of whatever natural regen a monster has (instead of replacing it) and heals 5% of the monster's max health + 3 each turn. This should let it scale a little to the target's own toughness and be something the player can actually feel. Regenerate Other is a simple use of this (intended for priest apostles at the moment) that simply applies this buff to a random injured ally in sight. Since this also significantly buffs Trog's Hand, I have cut its duration to less than half. (But I'm not convinced it is even that interesting or relevant on spriggan berserkers, who are already nearly magic-immune in the first place, and can't even use it if they go berserk first, which they often will. Considering cutting it from them and maybe finding a new home for it in future.) -------------------------------------------------------------------------------- 02d7de5f7b | DracoOmega | 2024-02-12 13:00:01 -0330 Re-add Sticks to Snakes (as a priestly apostle spell) Good appropriate flavor and helps increase priestly variety. Summons 2 of either water moccasins, black mambas, or anacondas, based non-randomly on spellpower (so it will be consistent for each apostle). -------------------------------------------------------------------------------- fcd2887363 | DracoOmega | 2024-02-12 13:00:01 -0330 Fix ghosts/illusions not being able to see all player spells after amnesia Reading ?amnesia reduces you.spell_no by 1, but simply zeroes out the spell slot that was forgotten, without moving spells in higher slots back down. With how player spells are iterated by ghosts, this effectively meant that for each amnesia a player read, their top-most spell slot would become invisible until a new spell was learned. If a player forgot multiple spells to learn a single more expensive one (as is often the case), several of those older spells would remain hidden. Ghosts already skip over SPELL_NO_SPELL so let's just iterate the whole array. -------------------------------------------------------------------------------- 3bc30c4099 | DracoOmega | 2024-02-12 13:00:01 -0330 Let monsters cast BVC I'm not entirely happy about the number of places this duplicates code with grasping roots rather than directly sharing it. That might be a place for future refactoring. -------------------------------------------------------------------------------- 0b06cff994 | DracoOmega | 2024-02-12 13:00:00 -0330 Let monsters cast Lesser Beckoning This is actually liable to be a lot stronger in monster hands than player ones, as a non-damaging harpoon shot you can't avoid. Maybe could replace Blink Other in Roxanne's set? Either way, it's now available for Mara to torment poor unfortunate Warpers with. -------------------------------------------------------------------------------- 03f2d2ab7a | DracoOmega | 2024-02-12 13:00:00 -0330 Let monsters cast Manifold Assault (and refactor a few things) Beyond letting monsters use the spell in general, it refactors Autumn Katana's code so that it isn't mostly-copying manifold assault code in a separate way. Additionally, this refactors the special handling that both of these (and Wu Jian martial attacks) used for calculating weapon delay, so that it now relies only player_speed() and not you.time_taken. Commits dating back many years now suggest that it always should have worked this way, and I have not seen any bad results in testing all of these things with some rigor. Frankly, I'm of the opinon that you.time_taken should NEVER have any meaning in the middle of any player action, and only after the player's turn is complete.) -------------------------------------------------------------------------------- 4d0ad107bb | DracoOmega | 2024-02-12 13:00:00 -0330 Implement monster Kiss of Death And give it a better message than "The negative energy hits you." -------------------------------------------------------------------------------- 6d05f22e25 | DracoOmega | 2024-02-12 12:59:58 -0330 Split monster Vhi's into Vhi's Electrolunge Functionally very similar to player Vhi's except that it doesn't care about the distance travelled for its damage, and simply applies a flat (HD-based) amount of electric damage if the initial attack hits (rather than being a multiplier on the weapon damage). It has a different name in large part to give it a different description when examined. xv properly shows the added damage. (I also gave it +1 range compared to player Vhi's) -------------------------------------------------------------------------------- 6658dcf839 | DracoOmega | 2024-02-12 12:32:25 -0330 Heavily refactor Vhi's Electric Charge and let monsters use it This removes the special-casing involved with targeting Vhi's and runs it through a standard spell targeter instead. Also makes the spell less player-centric so that monsters can use it. I think there's room for this to see play outside of just ghosts/illusions as well. Should simultaneously fix a crash caused when a monster displaced by Vhi's triggers a dispersal trap that puts a different monster back in the charger's way. (Now it tries repeatedly to free space until space actually remains free). I think it's arguable that monsters should get a bigger damage bonus from this than players do. I may do that later. -------------------------------------------------------------------------------- 5a133617b6 | DracoOmega | 2024-02-12 12:32:25 -0330 Searing Ray monster implementation Just for ghosts/illusions for the moment, but I think this one has real potential on some other monsters (I have arcanists in mind in particular). The dynamics of a channel that can be interrupted by the player moving (either out of range or to block the beam with other monsters) feel like a good one. With this in mind, the monster version also lasts longer at higher power than the player themselves can reach. If someone dislikes this, there's always the possibility of a foxfire/marshlight split with a fancier name for the arcanist version. -------------------------------------------------------------------------------- 7f64abb3f7 | DracoOmega | 2024-02-12 12:32:25 -0330 Implement monster foxfire (for illusions and ghosts) Marshlight already used basically identical code to foxfire under the hood (just with a key for cosmetic changes to it). To make this spell less strong at the same HD, monsters cast it with half power compared to marshlight, but it otherwise works the same way. (Of course, this still scales up much more than the player spell at high HD, but that's just how monster spells work in general) -------------------------------------------------------------------------------- 815546e591 | DracoOmega | 2024-02-12 12:32:25 -0330 Let monsters cast Scorch No direct users for it for the moment, though this enables it for player ghosts and illusions. -------------------------------------------------------------------------------- a626bee456 | DracoOmega | 2024-02-12 12:28:27 -0330 Fix blazeheart cores being able to be knocked back (Oneirical) In practice, this virtually never occurred, since the core is scheduled to act immediately after the player's next turn and enemies will rarely get any action between that and it exploding, but such a rare interaction shouldn't cause an explosion to happen at a different location than the player would expect. -------------------------------------------------------------------------------- c5dd13f2a7 | DracoOmega | 2024-02-12 03:12:17 -0330 Fix a crash when !lig wears off while having a non-base default form And probably any other hostile polymorph. This was broken by 6027059026f005a40a6 (Using transform() directly will not exit a forced form, so we should make sure to manually do so first. I don't believe return_to_default_form() is called anywhere where we wouldn't want that) -------------------------------------------------------------------------------- 4625e66871 | regret-index | 2024-02-11 19:24:55 -0330 Decorate Pan a little further * Give a 33% chance to use one of the rune-themed Pan decorative vaults by nicolae in the corresponding unrand lord levels. Despite there being only four to five each for each of them, the bulk of such are all decently randomized in connectivity and pillars, while most of the rune levels outside of the rune vaults are already somewhat forgettable as their random monster sets focus more on theme than threat. (This would be a good place to get more vaults in the same style, which would allow increasing the overall odds.) * Add four more small vaults to the overall decorative vault pool, pushing it to about 14 non-specific vaults and 17 direct references. * Give an additional 20% chance to use one of the general decor vaults throughout the regular Pan floors. It's not the highest quantity for a technically infinite number of levels, so the chance isn't set that high, but the vaults available are both reasonably variable and they'll be frequently unseen due to the rapid rate most people dive Pan anyway. * Use the current flat chances of small blood fountain vaults to add an additional chance for decor corresponding directly to the current Ds enemy gods worshipped- demonic trees for Lugonu, WALL_UNDEAD bone rock for Kikubaaqudgha, and scintillating statues for Makhleb. -------------------------------------------------------------------------------- 6027059026 | wheals | 2024-02-11 20:12:10 +0200 Fix location effects when transforming (#3274) In addition to the flying and diving messages mentioned in the issue that were never printed, the all-important "Floosh!" got skipped when swimming players left a flying form. -------------------------------------------------------------------------------- aa9fc57931 | wheals | 2024-02-11 20:12:10 +0200 Combine swimming and water-safety for forms Since they are now the same. -------------------------------------------------------------------------------- f394fe61d4 | wheals | 2024-02-11 20:12:10 +0200 Let statues swim (#3081) They were already half-swimming, in that Merfolk and Octopode statues got their stealth bonuses while underwater. -------------------------------------------------------------------------------- 3737fec271 | wheals | 2024-02-11 20:12:10 +0200 Start shapeshifters with active talisman (#3494) -------------------------------------------------------------------------------- e5b9942ccf | Nicholas Feinberg | 2024-02-11 08:56:57 -0800 Parenthesize (wheals) -------------------------------------------------------------------------------- 93939002d8 | SentientSupper | 2024-02-11 08:56:14 -0800 Bugfix corrosion display for weapons in webtiles It was displaying 4 times the corrosion for weapons -------------------------------------------------------------------------------- ad12e124b7 | Nicholas Feinberg | 2024-02-11 08:55:51 -0800 Add SentientSupper to the CREDITS -------------------------------------------------------------------------------- 159c032296 | regret-index | 2024-02-11 03:27:26 -0330 Fix tag upgrade for submerging removal -------------------------------------------------------------------------------- 6f326f69ea | CipHuK | 2024-02-10 22:21:09 -0800 Stop asking for dragon armour toll from draconian As draconians do not use dragon armour, it is not a big deal for them to pay such small price to enter trove -------------------------------------------------------------------------------- 028e34cad9 | Nicholas Feinberg | 2024-02-10 22:06:10 -0800 Give krakens rArcjolt (hellmonk) Reduce the damage that krakens (and other tentacle-creating monsters) take from multiple hits to their tentacles in the same attack. -------------------------------------------------------------------------------- 465344b4ef | Nicholas Feinberg | 2024-02-10 21:48:40 -0800 Clean up remaining submerge code Resolves #3504. -------------------------------------------------------------------------------- dfa216537b | Monkooky | 2024-02-10 21:48:37 -0800 Remove (tentacle) submerge Submerge as a mechanic introduces very unique special cases that must be guarded against throughout the code. The untargettability it grants requires a special check in several targetters, and the ability to temporarily coexist with monsters makes removing the enchantment very complicated. Right now the only monsters that can submerge are tentacle segments, for whom the ability is fairly uninteresting. Preserving submerge for tentacle segments is decidedly not worth the technical debt it incurs. This does not touch the tile drawing code; it may still be possible to see 'submerged' tentacles if a tentacle somehow gets disconnected. There may be vestigial code for drawing other submerged entities. -------------------------------------------------------------------------------- 7d2b172a6e | SentientSupper | 2024-02-10 21:19:13 -0800 Change how rCorr interacts with corrosion stacks on the player Protecting yourself against corrosion feels bad because of how inconsistent it is. Each stack of corrosion on the players reduces AC and slay by 1. Quadrupled most sources of corrosion to compensate. Having corrosion resistance will halve the number of stacks applied to the player instead of a coinflip chance to prevent the status entirely. -------------------------------------------------------------------------------- dd6c86a88c | Zhang Kai | 2024-02-10 21:13:23 -0800 Update godspeak.txt -------------------------------------------------------------------------------- 1c9add51e8 | Zhang Kai | 2024-02-10 21:13:23 -0800 Update montitle.txt -------------------------------------------------------------------------------- 0617a3dc7d | Zhang Kai | 2024-02-10 21:13:23 -0800 Fix clouds.txt -------------------------------------------------------------------------------- 88f2fc3365 | Zhang Kai | 2024-02-10 21:13:23 -0800 Update status.txt -------------------------------------------------------------------------------- 6c123904f3 | Zhang Kai | 2024-02-10 21:13:23 -0800 Update spells.txt -------------------------------------------------------------------------------- 5640b269d8 | Zhang Kai | 2024-02-10 21:13:23 -0800 Fix ability.txt -------------------------------------------------------------------------------- 8acc429591 | Zhang Kai | 2024-02-10 21:13:23 -0800 Update monsters.txt -------------------------------------------------------------------------------- 2c310156bd | Zhang Kai | 2024-02-10 21:13:23 -0800 Update skills.txt -------------------------------------------------------------------------------- 4c714f3379 | Zhang Kai | 2024-02-10 21:13:23 -0800 Update features.txt -------------------------------------------------------------------------------- 601a84782f | Zhang Kai | 2024-02-10 21:13:23 -0800 Update gods.txt -------------------------------------------------------------------------------- f76145dc59 | Nicholas Feinberg | 2024-02-10 21:10:03 -0800 Make offhand punches UC only (various) Most people seemed to assume they already were, so there's a strong intuitiveness argument, and they are vanishingly rarely relevant with weapons. This also solves certain elf-related problems. -------------------------------------------------------------------------------- accdc7a51e | Nicholas Feinberg | 2024-02-10 21:04:58 -0800 Revert "Revert "Temporarily evert "Simplify off-hand attacks""" This reverts commit 95b6ac8b5ca23ae5db383e8efd33fbd561136ce6. -------------------------------------------------------------------------------- 5e8725010d | Nicholas Feinberg | 2024-02-10 18:35:13 -0800 Fix spectral outgoing damage Spectral weapons were doubling the player's damage, not increasing it by 1.7x. ;_; -------------------------------------------------------------------------------- 35ecbacc28 | elliptic | 2024-02-10 21:06:35 -0500 Don't cheat the player out of a shop in st_orc_town -------------------------------------------------------------------------------- 54dcad9685 | patrick | 2024-02-10 20:58:19 -0500 Add a bunch more options to randbook.txt I added a bunch of alchemy terminology to go with the new spell school. Then I entered a thesaurus fugue and added a bunch of synonyms, especially for the spell school adjectives. I also added a bunch of other titles. Enjoy! -------------------------------------------------------------------------------- 4224600aea | Nicholas Feinberg | 2024-02-10 17:02:06 -0800 Let evil players wield good weapons Blocking undead and demonic players from wielding weapons of holy wrath was very fiddly - lots of annoying corner case code around entering and leaving Death Form. Achieve the same flavour with less annoyance by just disabling the brand while players are dead, rather than blocking wielding entirely. -------------------------------------------------------------------------------- 04fe69798e | Kyle Rawlins | 2024-02-10 17:05:11 -0500 fix: add some gem asserts These solve nothing for me, unfortunately. But they would make crashes for an out of bounds access here (which is possible by providing NUM_GEM_TYPES to these functions) less cryptic. -------------------------------------------------------------------------------- 39ddab2b6a | regret-index | 2024-02-10 18:32:05 -0330 More non-player spells tiles + juggernaut skeleton placeholder The latter is meant to help quickly distinguish them from the other giant skeletons in Depths, pairing together snw-0's juggernaut helmet with roctavian's large humanoid skeleton. It looks... very silly- the helmet's on _really_ tight- but it's rather important for necromancer bands and Crypt and Gloorx's level, so it will do for now. The spell icons continue to be a little placeholdery in terms of stitching together and editing currently extant tiles, but it should continue to help to have anything distinguishing besides pawprints. Sources: * Confusion Gaze: snw-0's Mass Confusion and the original rltile project's See Invisible spell. * Ensnare: Pete Hurst's cobweb tiles. * Eruption: snw-0's Upheaval. * Forceful Invitation: white_noise's exit stairs from Lair branches. * Injury Bond: Bloax's Corona tile + Sastreii's Injury Bond status icon. * Plane Rend: white_noise's exit stairs from Elf, V, Slime, and Crypt. * Stunning Burst: ontoclasm's Paralysis icon + roctavian's Lightning Bolt. * Slug Dart: snw-0's dart slug + roctavian's Stone Arrow projectile effect. * Virulence: CanOfWorms's resistance and vulnerability mutation tiles. * Warning Cry: The original rltiles project's Projected Noise. * Woodweal: Sastreii's regular trees + ontoclasm's heal wounds. Also, Ghostly Sacrifice uses the Ghostly Fireball tile, since we're still using Iceblast's tile for Seracfall, and monster Blinkbolt now uses the Player blinkbolt tile. -------------------------------------------------------------------------------- a5a6d979e4 | Nicholas Feinberg | 2024-02-10 13:25:20 -0800 Simplify some local tiles mouse UI There's no longer any reason to wield non-weapons other than goofing, and the mouse UI doesn't actually let you do so, so remove support for ctrl-clicking to unwield scrolls, potions, etc. Also, don't bother checking to see if weapons are throwable or evocable etc. They haven't been for a while. :) -------------------------------------------------------------------------------- 1929dd4202 | Nicholas Feinberg | 2024-02-10 13:25:20 -0800 Further wield/unwield weapon refactors -------------------------------------------------------------------------------- e57e94b799 | Nicholas Feinberg | 2024-02-10 13:25:20 -0800 Remove the adjust_time_taken param Mostly unused and kind of clunky. (The alternative is clunky too, mind you.) -------------------------------------------------------------------------------- c02482bde3 | regret-index | 2024-02-10 02:25:01 -0330 More adjustments for some recently-changed late uniques * Norris's killratio is doing quite poorly since his return, in some part due to trying to avoid the same Paralysis that was seen as redundant in his original removal but also not successfully getting AF_SLEEP due to potential multiplier one-shot spikiness. He went from a resistable Drain Magic to an irresistable but proportional mp drain in d00db9e cutting out Brain Feed for Brain Bite, and that's another distinguishing aspect we can keep working with when he's already intersecting a little with other water themed monsters as is, so I'm pushing his antimagic component even further by replacing Brain Bite for Draining Gaze's extremely dramatic 0-30 mp range. More focusing on destructive magic is definitely less time spent on peace and contemplation of death, and it emphasizes a threat distinct from most late uniques. (This also comes with a somewhat silly tile for Draining Gaze and new messages + some resorting within monspell.txt.) * Frederick is missing the fighter tag, despite having been buffed to deal more melee damage than several other uniques in the same range with conjurations also (Norris, Jory, Sojobo). He's been doing decently after the 0.31 release and the tweaks of b247575 / b730325 / 1baa85e, so I'm nudging his damage down slightly (50 -> 44) in exchange for a little consistency with surrounding uniques in getting an accuracy improvement. * Boris can use equipment while regular liches can't, for whatever reason, and always spawns with a robe. As a little more of an incentive to actually kill him rather than park him on a floor, and to give more distinction between attempts beyond the orb run or the luck of other spawns, I'm giving him a randart robe every time he spawns, guaranteed to be at least +2. He spawns quite late, so it's rare for people to want to switch over to a robe if they didn't have a decent extremely light body armour already, but it lets e.g. casters refight Boris repeatedly to find Archmagi (and then possibly die to orbs and misery). -------------------------------------------------------------------------------- 14f8b2e1af | David Lawrence Ramsey | 2024-02-09 11:34:01 -0600 Add another fruit name to artefacts. -------------------------------------------------------------------------------- c02fa2a002 | regret-index | 2024-02-09 04:11:30 -0330 New decoration: mystic cages In the footsteps of conduits and on a different track than the divine and demonic statues prior, these are meant to start providing inobtrusive decorative features reflecting a relatively more regular life inside of the dungeon beyond mostly empty rooms filled with enemies milling about. Mystic cages are metal statue redefinitions as kennels and enclosures for many pets: the hounds of gnolls and orcs, the menageries of vampires, the experiments of various wizards, the hypothetically tamed beasts within Vaults, and so on and so forth. With how often there's a mix of given intelligences in randomized generic floor spawn sets, it's easy to miss a vault deliberately pairing given monsters together if noise makes them wander or split- these can help straightforwardly imply such with minimal effort. The mystic cage tiles are a mild edit of the tile for Maxwell's Etheric Cage, made by CanOfWorms, removed back in 0.25. -------------------------------------------------------------------------------- f7c527a163 | regret-index | 2024-02-09 00:45:15 -0330 Part one of megazig buffing - scale them faster The first ziggurat in each game is in a good place. Even three-rune characters can dip into the first few floors for reasonable rewards compared to Depths itself, while extended characters can try their luck even without L8/L9 conjuration spells for reasonably further. Megazigging, unsurprisingly, has been strangely affected by spells, gods, and items over the years since 62fe6c3. While megazig design shouldn't take any priority over the rest of Crawl, it's clear that most floors fall to Gozag, Ignition, orbs of mayhem, Powered by Death or Djinn HP, talismans of death, and the occasional fallback of autopenetrating javelins to the point of a certain tedium. Only Silence, Sap Magic, and the occasional hundred Seraphs manage to roll much of any chance to kill the player. While I wanted to provide some variety with minimal effort or codebase burden for a niche group of zig delvers, it is clear that most of the raw numbers of megazigs don't really threaten without luck considering the 100 or 200 zigs results the top delvers have. They can play older versions if they want to grind raw numbers, but for future versions, I'd like to even out this difficulty across floors some more and make the practice somewhat more of an accomplishment overall by making zigs past the first all fairly more lethal. The first step of several planned steps for megazig buffing is to ramp up the current scaling. Zig completion's effects on monster choices is tripled in most cases and doubled on monster placing in floors. Floors won't always max out before hitting double-digits (due to increasing HD inherent to those monster choices), but around Zig 9 they usually can, and this also emphasizes the danger of several other sets before one can completely max out elemental skills or reliably have all of the unrands to work with. The floors with silent spectres, pan lords, or ghosts all don't scale those monsters quite as fast as the others, though. (Also, slip in some buffs to a few loose floors. Of particular note: quicksilver elementals for dispelling haste are now emphasized monsters in Dis and Vestibule sets, draconian stormcallers and scorchers are emphasized in draconian sets to rain down Upheaval + damnation, and Pan floors now scale to emphasize just tier-1s and demonspawn.) -------------------------------------------------------------------------------- 2d33c3cfaf | Nicholas Feinberg | 2024-02-08 10:48:16 -0800 Fix Gastronok's corpse (FPSBOSSFIGHT) Broken in 5b44be1ddb685f4f29a3c56d8fed4afaf7c9e86f. -------------------------------------------------------------------------------- 9dbbe29261 | regret-index | 2024-02-07 22:55:20 -0330 Tweak and add some monster dialogue Assume cats are very small, that mummies can't smell, and that we've got something less meta to weep about. It's going to take a long time to get kill lines for most generic monsters, but nicolae- and DracoOmega have some good ones for killer klowns. -------------------------------------------------------------------------------- 3e06421dc0 | regret-index | 2024-02-07 22:25:54 -0330 Fix webtiles tile animations Broke in aef1140 adding more animating tiles, properly handled now. -------------------------------------------------------------------------------- ad68cc1cce | regret-index | 2024-02-07 22:23:56 -0330 First fresh vault review for 0.32 The usual scaling sets much more versus depth, reducing long tails of absurd rolls for monsters, cleaning up headers to fit a more consistent house style, so on and so forth. One particular point that'll fit into these recurring vault reviews from hereon is that with more decorative features added and to be added, early crystal appearances and granite statue counts will be regularly reduced to compensate- there's far too many uses of such in early D for them to stand out as decorative any more or for it to stand out in dangerous vaults past the earlygame, which can do with some trimming down in exchange for some of these fancier options. A few other things of note: * Some hells ambushes have been nerfed a little, with added cover and slightly lower monster counts. While extended can and should be quite cruel to players, there's a big difference between even the recent branch buffs and immediately ambushing a player with adjacent paralysis and damnation or making melee characters wade through 5+ curse skulls in an open layout, considering the * evilmike_ambush is now nerfed in a variety of branches, by using hand-picked spawns usually from the given branch it spawns in. The sheer hostility of the vault was less of a concern when far more of the later branches had far more harmless spawns in them, but this was heavily aggravated by the revision to hell's sets and the introduction of things like Blink Allies Encircling and berserkable tmons. Most of the branch placements still have sheer volume and a few notable threats at such high quantities, anyway. * Air zigs now use wind drakes and ironbound thunderhulks, to add a little more variety. -------------------------------------------------------------------------------- 77eb882913 | regret-index | 2024-02-07 02:15:44 -0330 Reflavour Ijyb into an artificer While we don't need to represent every single last past and future player option available, one background lacking much for monster representation already has a perfect fit for it. Ijyb is distinguished by always having an early high-tier wand since 1a4ba80, much like Artificer's wand of iceblast. While a hypothetically more deliberate artificer unique would want for more items to use, a unique with an early strong one can avoid handing out too much loot at once and also avoid the heavy burden of making non-wand evokers work for monsters. Ijyb also has a variety of old lines like "Me kill you!" and "Die!", deeply generic lines that can be easily replaced with repurposed, long-unused lines written up for Pakellas. Ijyb's new title is the Inquisitive. Her description and dialogue now emphasizes her experimental homemade wand (thus also explaining how she has one so early in D) as well as using her foes as new test subjects. She still keeps her usual manner of speech despite the new vocabulary, which should help give her somewhat distinct dialogue overall, too. None of Ijyb's stats are themselves are changed, since she's already plenty dangerous. Maybe she should always have a club and not a coinflip chance for a dagger, like Artificers start with? -------------------------------------------------------------------------------- b47733332d | elliptic | 2024-02-06 21:36:13 -0500 Don't look at movement delay when computing Vhi's Electric Charge delay Spriggans, nagas, and Chei characters don't take an unusual amount of time for any other translocations. Vhi's is more controlled than Blink or Passage (and Passage does usually involve some walking to actually use), but it is still restricted enough in use that I don't see a problem with letting it be a fast way for nagas or Chei characters to reposition in certain situations. If necessary, it seems much easier to justify Chei hating this spell than to justify this spell looking at movement delay. There were also some weird interactions previously with Vhi's being slower to cast for humans in shallow water and faster with swiftness active, etc. -------------------------------------------------------------------------------- 9fbf7fb75a | regret-index | 2024-02-06 19:25:10 -0330 More non-player spell tiles A lot of kinda placeholdery re-uses of old tiles or old styles, but almost anything is usually better than the current generic icon. Sources: * Awaken Forest: Sastreii's regular tree tiles plus snw-0's berserk icon. * Berserk Other: DD's old Evoke Berserk tile. * Corrupting Pulse: Denzi's original tile for wretched stars. * Legendary Destruction: Roctavian's Fireball tile, snw-0's recolouring of that for Iceblast, and aidanholm's recolouring for Ghostly Fireball. * Mindburst: Ontoclasm's disint / mindburst wand icon, plus snw-0's old Brain Feed icon. * Roll: Sastreii's rolling boulder beetle tile. * Summon [many things]: The old rltiles summon icon on top of: roctavian's redbacks (Summon Spider), roctavian's edit of coolio's emperor scorpions (Summon Emperor Scorpions), roctavian's Executioners (Gloorx's spell), roctavian's edit of ontoclasm's hell sentinel tile (Dispater's spell), roctavian's tzitzimimeh (Ereshkigal's spell). * (Also, some replacements of tile choices for Summon Drakes (using snw-0's recolour of roctavian's death drake), Summon undead (snw-0's jiangshi tile), and the four standard Summon Elemental spells (using ontoclasm's tiles for each). * Cleansing Flame, Corrupt: The current invocation ability tiles for them, both by snw-0. * Debugging Ray: snw-0's cancellation tile over DracoOmega's bombardier beetle edit of Bloax's goliath beetles. This also slightly tweaks the Cleansing Flame description to not mention invocations skill when a monster has the spell. -------------------------------------------------------------------------------- 6e397d8a7c | David Lawrence Ramsey | 2024-02-06 15:24:25 -0600 Add missing "Dog" status description. -------------------------------------------------------------------------------- 4b40a1289b | Nicholas Feinberg | 2024-02-06 13:02:11 -0800 Tweak bsig desc (CarefulOdds, regret-index) -------------------------------------------------------------------------------- 8a9189f6be | Rytis Petronis | 2024-02-06 10:09:26 -0600 fix acc display of throwing slaying bonus (#3343) this will div_rand_round beast form slaying for accuracy displaying otherwise [Committer's note: Squashed, and shortened initial commit message. Closes #3343.] -------------------------------------------------------------------------------- cc018136db | regret-index | 2024-02-06 12:34:44 -0330 Fix placeholder BB boulder tile (SentientSupper) 5b44be1 accidentally used the base boulder beetle tile instead of the rolling one. We still could use an actual distinct tile for this in the style of its spell icon (something more geometric), but for now, this both makes it properly spherical and also now animates it. -------------------------------------------------------------------------------- 1704d4baff | regret-index | 2024-02-06 12:34:44 -0330 Unbrace -------------------------------------------------------------------------------- fac0567ad4 | wheals | 2024-02-06 14:28:14 +0200 Fix a crash when the player gets mighted by chaos brand -------------------------------------------------------------------------------- 2e8054a333 | regret-index | 2024-02-06 00:58:27 -0330 Make Xom give more chaos brand, adjust chaos brand Xom amusement Hasting and mighting hostile monsters with chaos now sometimes lightly amuses Xom to allow more managing Xom mood by using the now more usable chaos brand. Since that brand is more usable by players and less lethal from monsters, we can share it a little more often in Xom's actions. Xom now overrides any non-holy weapon brand of monster weapons when chaos branding weapons, rather than only touching unbranded weapons. Chaos shouldn't be so quite limited, and it makes it more likely to find more usable chaos weapons. (Still not handing out chaos missiles though, since that clogs up inventories and chaos nets act deeply strangely. They've been slightly cleaned up for the sake of Chuck, though they still need unifying with chaos weapons and BEAM_CHAOS eventually.) Also, Beogh's slated to not involve giving equipment gifts to orcs in a future rework, so orcs don't need to have it be invisibly randomly blocked. -------------------------------------------------------------------------------- 3087d83e6e | regret-index | 2024-02-06 00:58:27 -0330 Buff Maurice Will (ragingrage), nerf Erica Erica leapt up from a ~4.4% killratio to a ~9.4% killratio after b730325 over the course of the 0.31 tournament, which was a lot more than the desire to push her to the pre-octofying recent killratio of ~5.7%. She gets a minor Will nerf (as octopodes don't have any particular Will advantage over other species) and most (but not all) of her melee and EV increases reverted. Contrariwise, while Maurice is doing a lot better for the antimagic bite in sheer damage terms, he's still doing merely okay for a pre-Lair unique at 3.1% killratio. Vine Stalker gets boosted Will compared to baseline species, so he can get a minor Will buff. (Also, fiddle around a bit more with Maurice speech lines on the new flavour front.) -------------------------------------------------------------------------------- 32696db3d1 | regret-index | 2024-02-06 00:58:27 -0330 Lower the contrast on bedeviled crystal tiles (PleasingFungus) The fancy graphics on top of a wall tile is already plenty without needing to quite catch the eye so much for being just a retiled / redescribed wall, I suppose. The more colourful originals will sit in the git history anyway for others' potential use, and the desaturating also sells corruption in its own fashion. -------------------------------------------------------------------------------- af751e2436 | DracoOmega | 2024-02-05 22:30:09 -0330 Fix players being naked and refactor The addition of a mirrored weapon tile category caused a bunch of code that calculates what order to draw player paperdoll parts to work incorrectly. And trying to fix it uncovered FOUR DIFFERENT PLACES that were duplicating a handmade list and logic for determining this order. I have consolidated these into a single function, and also attempted to reduce some other duplicated logic in the process. (I think a little more couple be shaved off, but it was less clear whether some of the other differences were important or not) -------------------------------------------------------------------------------- 1a93b60f7d | DracoOmega | 2024-02-05 19:05:08 -0330 Revert "Revert "Enter the mirror dimension"" with a fix This reverts commit 35313b3b0401f36c7d3da60decceb00c3a9668e6. An uninitialized variable seems to have been the cause of build problems. -------------------------------------------------------------------------------- 70af1cc7e0 | Zhang Kai | 2024-02-05 14:10:13 -0800 Update spells.txt -------------------------------------------------------------------------------- cfad4d882d | Zhang Kai | 2024-02-05 14:10:13 -0800 Update mutations.txt -------------------------------------------------------------------------------- cbc441926e | Zhang Kai | 2024-02-05 14:10:13 -0800 Update mutations.txt -------------------------------------------------------------------------------- 288a8eea13 | Zhang Kai | 2024-02-05 14:10:13 -0800 Update wpnnoise.txt -------------------------------------------------------------------------------- 9fa2045b72 | Zhang Kai | 2024-02-05 14:10:13 -0800 Update wpnnoise.txt -------------------------------------------------------------------------------- 9bb898f744 | Zhang Kai | 2024-02-05 14:10:13 -0800 Create wpnnoise.txt -------------------------------------------------------------------------------- b18a041c26 | Zhang Kai | 2024-02-05 14:10:13 -0800 Update shout.txt -------------------------------------------------------------------------------- ab21dbf0b5 | Zhang Kai | 2024-02-05 14:10:13 -0800 Update monspell.txt -------------------------------------------------------------------------------- 47820993c2 | Zhang Kai | 2024-02-05 14:10:13 -0800 Update unrand.txt -------------------------------------------------------------------------------- b395becbbf | Zhang Kai | 2024-02-05 14:10:13 -0800 Update tutorial.txt -------------------------------------------------------------------------------- 24aeb8fce1 | Zhang Kai | 2024-02-05 14:10:13 -0800 Update status.txt -------------------------------------------------------------------------------- 9394785459 | Zhang Kai | 2024-02-05 14:10:13 -0800 Update spells.txt -------------------------------------------------------------------------------- db81703f1b | Zhang Kai | 2024-02-05 14:10:13 -0800 Update species.txt -------------------------------------------------------------------------------- 78019320dc | Zhang Kai | 2024-02-05 14:10:13 -0800 Update skills.txt -------------------------------------------------------------------------------- 7189f9785e | Zhang Kai | 2024-02-05 14:10:13 -0800 Update mutations.txt -------------------------------------------------------------------------------- 2699e95f02 | Zhang Kai | 2024-02-05 14:10:13 -0800 Update monsters.txt -------------------------------------------------------------------------------- d3b20e54b6 | Zhang Kai | 2024-02-05 14:10:13 -0800 Update items.txt -------------------------------------------------------------------------------- ed181fcaab | Zhang Kai | 2024-02-05 14:10:13 -0800 Update gods.txt -------------------------------------------------------------------------------- 5344a817ef | Zhang Kai | 2024-02-05 14:10:13 -0800 Update features.txt -------------------------------------------------------------------------------- 18cdba413a | Zhang Kai | 2024-02-05 14:10:13 -0800 Update clouds.txt -------------------------------------------------------------------------------- 21a18ad617 | Zhang Kai | 2024-02-05 14:10:13 -0800 Update branches.txt -------------------------------------------------------------------------------- 18257a444a | Zhang Kai | 2024-02-05 14:10:13 -0800 Update backgrounds.txt -------------------------------------------------------------------------------- 301c3d356d | Zhang Kai | 2024-02-05 14:10:13 -0800 Update ability.txt -------------------------------------------------------------------------------- c7ef563f12 | advil | 2024-02-05 15:53:11 -0500 fix: improve some rltiles error messages -------------------------------------------------------------------------------- 35313b3b04 | Nicholas Feinberg | 2024-02-05 12:51:22 -0800 Revert "Enter the mirror dimension" This reverts commit 42a248e5ca1fbb01cd6a4bc39afc052bf682d3cf. This reverts commit 8649878a938f6e263d233149ee192d4ca934b401. -------------------------------------------------------------------------------- 8fd5419284 | elliptic | 2024-02-05 15:38:00 -0500 Rename maybe_random_div to maybe_random2_div So that I stop being confused by it. -------------------------------------------------------------------------------- a335ffa919 | advil | 2024-02-05 12:46:42 -0500 refactor: generalize some feature description code 2c8f65ca5f32ac introduced some code to try to allow redefined features to be conditioned on layouts, for the sake of Dis statues. This code made various assumptions like: there is always a layout, a level always has vaults, and a layout is always at position 0 of the level vault vector. bc18a39e1d331e tried to fix some of these assumptions, but didn't really handle the case where a level has no vaults at all (can be true in the abyss), which leads to an empty level vault vector. (Accessing position 0 of such a vector may fail to crash under various compiler and runtime circumstances...) This commit refactors to (i) reuse previously existing, slightly more robust code to find the vault at a position, and (ii) adds a function to try to more robustly find a layout if one exists. It's unclear to me whether the position 0 assumption was or wasn't safe if there is a layout (it wasn't guaranteed, but may have been true in practice), but this code doesn't make it. As far as I can tell this works with the dis statue case. -------------------------------------------------------------------------------- 42a248e5ca | Nicholas Feinberg | 2024-02-05 07:52:04 -0800 Fix an unsigned comparison (Monkooky) -------------------------------------------------------------------------------- 8db1b9f803 | Nicholas Feinberg | 2024-02-04 22:38:04 -0800 Rework attack delay Rather than special casing many places where we *don't* want to change time after a melee attack, make melee attacks run time only when it *does* change. -------------------------------------------------------------------------------- 672eff3212 | Nicholas Feinberg | 2024-02-04 18:01:30 -0800 Refactor more band leader code -------------------------------------------------------------------------------- c8c0bed1ba | DracoOmega | 2024-02-04 17:55:10 -0800 Refactor testing of band follower/leader relationships A bunch of multi-line checks to props were being repeated in several places, which are now more nicely wrapped up in a couple simple monster methods. Also splits the MF_BAND_MEMBER flag (which was effectively only used to make band members talk 1/10th as often...) into MF_BAND_FOLLOWER and MF_BAND_LEADER in preparation of some future behavioral tweaks to make it less easy to pull followers away without their bands noticing. -------------------------------------------------------------------------------- fd3f6d62af | DracoOmega | 2024-02-04 17:53:40 -0800 Make ability_name return string instead of const char* I want to do some dynamic name construction inside that function, and it's a lot more straightforward that way. -------------------------------------------------------------------------------- 63ff0dcbff | DracoOmega | 2024-02-04 17:53:09 -0800 Fix minor wizmode bug with xp calculation It still thought pacified monsters were worth 1/2 xp. -------------------------------------------------------------------------------- 8649878a93 | Nicholas Feinberg | 2024-02-04 17:49:42 -0800 Enter the mirror dimension Instead of hardcoding a hand-made set of flipped weapon tiles, generated flipped versions of every single doll weapon tile and use *those* for dual-wielding monsters. (Ettins, blademasters, 2hos, etc.) Arguably, we should use this tech for Frances? I'm not sure exactly how, though. Preparation for steel elves. -------------------------------------------------------------------------------- 5f43475211 | regret-index | 2024-02-04 20:05:32 -0330 Hide the "report this" metal statue description on banishment Since it can't inherit the vault or layout's description or tile when being moved to the Abyss. This also might also help with abyss_walk test crashes? -------------------------------------------------------------------------------- 722a80f8b5 | regret-index | 2024-02-04 19:59:27 -0330 Don't let Throw Ally throw tentacles (Lici) If an iron giant throws the tentacle tip, it will cause a disconnecting sever. If it throws the tentacle segments, an unattached tentacle segment will sit on the floor for one turn before disappearing the next. Either way, this is definitely undesired behaviour we can avoid in the slim cases of Zot trap eldritch tentacles or charm / scrolls of summoning plus Malign Gateway in Dis and a tiny number of vaults. -------------------------------------------------------------------------------- 668cce9384 | regret-index | 2024-02-04 19:59:27 -0330 Fancify Zot and Pan a little more This adds some experimental new bismuth-styled crystal tiles for Zot, with a custom rainbow palette and a faint square impression from ontoclasm's old labyrinth tiles- meant to reflect the varied elements and chaotic nature of Zot. This also makes a bunch of trees and plants in Zot always place as petrified, demonic, or withered- a lot of Zot monsters mention being quite ancient (liches, moths of wrath) or primordial (orbs of fire) or both (proteans), so leaning a bit more into being a realm sealed extremely long ago feels rather appropriate compared to getting rather normal greenery clashing with most of Zot's default palette, also. Zot should be dramatic! (Also, threw some conduits in pan_disco_hall and fixed a missing floor colouring there.) -------------------------------------------------------------------------------- 95bf75a7d5 | Nicholas Feinberg | 2024-02-04 15:24:54 -0800 Unbrace -------------------------------------------------------------------------------- bc18a39e1d | Nicholas Feinberg | 2024-02-04 15:24:43 -0800 Don't crash in the abyss_walk test (DracoOmega) Like the Abyss itself, this code unsettles me. -------------------------------------------------------------------------------- 5b1be31b7c | elliptic | 2024-02-04 16:20:38 -0500 Make groups of monsters handle diagonal chokepoints more consistently Sometimes a monster that can attack the player will instead walk to the side to let a friend move forward and help. For example, when fighting a pack of yaks near the corner of a corridor : ##### : #.YYY : #@### : #.### the lead yak has a 50% chance of moving west into the corner instead of attacking the player. This behavior didn't work right in one particular type of situation: : ###YY : ###YY : ..Y## : .@.## : ...## It used to be that the lead yak would never move south or west in such a situation, even though in the similar situation with an extra wall : ###YY : ###YY : ..Y## : .@### : ...## it would have the expected 50% chance of moving west. (There was a similar issue as well with the player moved one square north in the preceding two diagrams.) This commit tries to fix this, so you will no longer be safe fighting one yak at a time in the second diagram above. Other behavior is hopefully unchanged. Note that in the situation : ###YY : ###YY : .@Y## : .#.## : ...## the yak will still never move south - this is because currently monsters will only change their move by a 45 degree turn, not a 90 degree turn as would be needed here. The goal of this commit isn't to make groups of monsters as smart as possible, but just to fix a single weirdness/bug with the old behavior. -------------------------------------------------------------------------------- 29182dc2f9 | regret-index | 2024-02-04 17:40:32 -0330 Ghost / illusion Starburst -> Bolt of Fire This follows the same spirit as Necrotise -> Pain, Confusing Touch -> Confuse, Curse of Agony -> Agony, Dragon's Call -> Summon Dragon, and so on, of being very close in sharing the same core mechanic (penetrating fire beam here) while being awkward for monsters to get directly (they'd shred all of their allies, aligning in the 8 directions is awkward for mobile monsters). Helps continue to maintain Illusion Card and Mara Illusions, plus continues to help player ghosts not fall too hard behind from the present day. Also, slightly resort the translated spell list in ascending spell-level order, since this list is starting to get kinda long. -------------------------------------------------------------------------------- d980ff3818 | regret-index | 2024-02-04 17:40:32 -0330 Add a Ghoul title In the spirit of ccc5534 and e618eea and so on, it feels suiting to have the current strongest of the corporeal undead anthrophage monsters be reflected in the player titles too. Nicely dramatic for anybody who wants to max out a -2 apt, anyway. -------------------------------------------------------------------------------- 0d27ed53bc | Nikolai Lavsky | 2024-02-04 23:59:56 +0300 task: remove the 0.31 trunk tournament reminder This reverts commit e66fa4eb29bf7b720200d5fbfce887e1803ce131. -------------------------------------------------------------------------------- 4c9cb3f8dd | yrdzrfxndfvh | 2024-02-04 14:40:18 -0600 Add "Royal Mummy" title -------------------------------------------------------------------------------- 5b44be1ddb | Nicholas Feinberg | 2024-02-04 12:34:40 -0800 Move monsters into YAML For hopefully better readability and editability, without having to cross-reference obscure fields. -------------------------------------------------------------------------------- 0f96f66c9d | David Lawrence Ramsey | 2024-02-04 14:33:06 -0600 Add C, J, R, and U death messages (Oneirical, #3452) Jiyva's messages only make sense if the player left a corpse, so they're adjusted for that. -------------------------------------------------------------------------------- 6d6becde81 | David Lawrence Ramsey | 2024-02-04 14:33:06 -0600 Add Hepliaklqana and Ignis death messages. -------------------------------------------------------------------------------- 59d7447d90 | David Lawrence Ramsey | 2024-02-04 14:33:06 -0600 Make all gods use death messages if available. This restructures _god_death_message(), and renames it _god_death_messages(), since it can now display multiple messages. The Xom message, the Gozag gold message, the Okawaru duel message, the Beogh heretic priest message (extended to account for if you ever worshipped Beogh, and calling you an apostate instead if you abandoned him), and the Nemelex death message (now only shown if you left a corpse) are displayed after any death messages from the database. -------------------------------------------------------------------------------- 10d5f734ec | David Lawrence Ramsey | 2024-02-04 14:33:06 -0600 Add database key handling to god death msgs. The default death message for any god will be "@God_name@ death". Anything specific to leaving a corpse, having undead holiness, or having nonliving holiness is specified by the appended keys "corpse", "undead", and "nonliving". Add a few god speech aliases to account for this. -------------------------------------------------------------------------------- 8b38da208c | David Lawrence Ramsey | 2024-02-04 14:33:06 -0600 Put holiness god death msgs in the database. -------------------------------------------------------------------------------- ef299f28a6 | David Lawrence Ramsey | 2024-02-04 14:33:06 -0600 Save monster holiness for undead/nonliving. Don't check it multiple times, since it affects several god death messages. -------------------------------------------------------------------------------- 76c4a70de9 | David Lawrence Ramsey | 2024-02-04 14:33:06 -0600 Move simpler god death messages to the database. Currently only Fedhas. -------------------------------------------------------------------------------- 855f1f9822 | David Lawrence Ramsey | 2024-02-04 14:33:06 -0600 Save whether the dead player left a corpse. Don't check it multiple times, since it affects several god death messages. -------------------------------------------------------------------------------- 6a9e7a72c1 | David Lawrence Ramsey | 2024-02-04 14:17:07 -0600 Add Nemelex to Recite's list of chaotic gods. -------------------------------------------------------------------------------- 3be09a196a | regret-index | 2024-02-04 16:44:56 -0330 Adjust V calls for Forceful Invite, Plane Rend Since aa1e17a, ironbound thunderhulks have ended up twice as high in the kill statistics as any other monsters worldbinders summon, despite being slightly below the average summon choice in weight- they got buffed not much later in 59a505c, and are currently one of the most effective killers in the branch of V itself. Worldbinders now summon ironbound frosthearts instead, which may have autohit attacks but also hurt for less damage while respecting more AC and being much easier to resist. Still should be interesting to reposition and restrategize around. As a different home for thunderhulk summoning, Ds corrupter Plane Rend loses vault sentinels- who aren't very likely to hex even the lowest Will species at xl 27 as Pan expects, with only 19% against having a single peice of Will gear- and swaps in those thunderhulks instead, which can at least blast Pan explorers somewhat reasonably instead. -------------------------------------------------------------------------------- aee7bb2a12 | Nicholas Feinberg | 2024-02-04 12:03:50 -0800 Checkwhite -------------------------------------------------------------------------------- 3ce9459eb3 | Nicholas Feinberg | 2024-02-04 12:03:31 -0800 Hide removed items in ?/i (elliptic) -------------------------------------------------------------------------------- 7569c349a0 | Nicholas Feinberg | 2024-02-04 12:03:19 -0800 Fix automagic while caught (noisytoot) Yuck :( -------------------------------------------------------------------------------- 7d43067348 | Nicholas Feinberg | 2024-02-04 12:02:59 -0800 Make skeletons eternal It seems weird that skeletons rot away in the presumably finite time that the player spends within the dungeon, and it's cool to leave more of a trace of your presence when retracing your tracks. Since skeletons are purely decorative now, let's leave em around. Some argument for removing the ridiculous and complex corpse decay system entirely, but I don't have the heart. -------------------------------------------------------------------------------- 95b6ac8b5c | Nicholas Feinberg | 2024-02-04 12:02:49 -0800 Revert "Temporarily evert "Simplify off-hand attacks"" This reverts commit cbf77bbcfcd59d85fcee38741aa2897316b9d79d. -------------------------------------------------------------------------------- 1854ded1b6 | elliptic | 2024-02-04 15:01:57 -0500 Deep Elf: Air Magic apt 0 -> +1 (SentientSupper) This is a relic of the days when High Elf existed and this served to help differentiate between them. -------------------------------------------------------------------------------- aef1140ae2 | regret-index | 2024-02-04 16:31:19 -0330 New decorations: magic conduits, bedeviled crystal These are both highly variable pieces, meant to reflect spell schools and demonic planes, to serve as magical varieties of decoration beyond the usual emphasis of clouds or longer lengths of plain crystal walls. The former are all further metal statue types of miscellaneous magic collecting devices, with a slightly different orb, different palette, and names each for all the spell schools. (Translocations is grouped together with Summoning, as we have few workable translocations themes for vaults.) These conduits help a couple of magical portals and branches beyond the recent occasional presence of bookcases- Ice Caves, Volcanoes, Wizlabs, Snake, Elf, Crypt, and Zot. They also provide some more workable flavour for the spell-gifting gods who don't give spellbooks, Kiku and Vehumet, plus a small number of particularly magic-focused vaults deeper on- across Vaults and Depths. The latter is a different tile and description for crystal walls, and serve as links to the various demonic planes of regular games and extended for a multitude demonic vaults without all of them leaning too hard on demonic vegetation or lava (as clashes with quite a few other themes). They don't actually spawn inside Hell / Pan / Abyss themselves, but there's a large number of demonic vaults across D, Depths, Zot, and so on that can reasonably fit a little window into Cocytus or Pan or the Abyss. The conduits are a mix of snw-0's first spell icon for Battlesphere, the rltiles original iron golem, and a variety of subtle overlays using ontoclasm's item type icons. The bedeviled crystal combines quite a few parts- roctavian's old lugonu altar, snw-0's grey crystal recolouring, jpeg's original strange machine for Tukima's wizlab, and depending on the crystal: dd's lava, snw-0's recolouring of roctavian's floor_frozen, Denzi's cobalt_stone + wall_bars + floor_demonic, roctavian and due's edits of Denzi's iron walls, and the original rltiles work on floor_nerves. -------------------------------------------------------------------------------- f7c557ff5a | regret-index | 2024-02-04 16:27:14 -0330 New decoration duo: silver statues, scintillating statues We've got a small number of god / theme statues around already, like Gozag and TSO's golden saint statues. This could be extended further for both flavour and visual variety purposes, and so these two follow suit. The former are metal statue of order, law, security, and stasis. These are obviously used in vaults for Zin, but also employed in the Vaults, a place full of metal, disciplined guards, and rather monotonous features and terrain beyond sparing glass or bookcases. (Yes, there's undead in the branch, but these statues aren't direct links to Zin, and guards in different areas can have different faiths. Think of the Crypt as being actively sealed away inside the branch.) The latter are rainbow stone statues, representative of chaos and chance. There's enough Xom and Nemelex vaults for them to fill out a respectable number, alongside some klown-centric vaults in Zot and a rare flashiness component for Gauntlet exteriors. Worth of note is that this comes with a couple of highly chaotic Xom and Lugonu vaults being made consistently traversible and instead emphasizing these fancy animated statues, removing the need to fill them with no_tele_into spaces and letting them serve as properly transparent rather than vetoing at random. The former combines the sparkles of roctavian's Zin altar, Denzi's silver star without that altar's hand in front of it, and the pedestal of ontoclasm's old silver statues before those were turned into obsidian statues. The latter uses ontoclasm's statue plinths alongside CanOfWorms's pieces from Xom's chessboard. (If we make more evokers in the future, they probably should shift further yet from what the either of those did, anyway.) (This also removes the no_random vault tag, used literally nowhere besides wizlab_cigotuvi's doors, because it didn't work for any non-door purposes and the support for it also made animations themselves not consistently work. This also does a fair bit of header clean-up and updating for some of the enemy using vaults, chaotic or not.) -------------------------------------------------------------------------------- 2c8f65ca5f | regret-index | 2024-02-04 16:27:14 -0330 Make and use a hidden metal statue feature We've got a pair of explicitly metallic statue types in vaults that don't actually deconstruct into metal: iron statues in Dis, and golden statues in both TSO and Gozag vaults. Further updates will add another two statues that are also clearly not made of rock. Metal walls behave noticeably differently from rock walls- alongside the relatively unimportant matters of LRD messages / damage and Shatter difficulty, most relevantly they're also not diggable. Statues ostenibly made of metal can pick up these properties, especially when reserved for rarer theme vaults; it also heavily reduces the subvault hacking needed to set two different statues with two different descriptions within the same vault. The tile flips upside-down snw-0's DNGN_STATUE_TRIANGLE tile and recolours it with ontoclasm's impish iron statue tile, though both the base feature and the tile both shouldn't be seen by default- the regular metal statues themselves __are not to be used by vaults__, and instead as bases for specific vault flavoured statues. This also mildly edits raw_feature_description in directn.cc to accomodate letting layout code use set_feature_name, so the iron statues in Dis's layout_subdivisions have the same iron statue name and description as all of the vaults in the branch do. This probably shouldn't be too much of a concern regarding preserving given vault flavour versus given layouts, since we're not otherwise usually changing feature names for entire layouts too often. -------------------------------------------------------------------------------- cb1c6d8acb | regret-index | 2024-02-04 16:27:14 -0330 Juggle around console statue and fountain glyphs The more decorative statue types we add to the game and the more vault-exclusive custom statues still linger around, the more awkward it is that monster statues share a glyph with decorative feature types. They don't really trick people between the monster list and autoexclusions, anyway, though their flavour as an actual monster is already flavour enough. This moves monster statues in console from 8 to I- immotile non-plants. This should help those still sticking to ASCII deal with future decorative statue type additions by splitting them up so 8 stays as an entirely decorative glyph. Also, in unicode, this moves decorative statues, from 8 to ß- the eszett still looks like an 8, but either unicode mode tends to avoid using alphanumeric characters for anything that isn't a monster. Somewhat seperately, in ASCII fountains share a glyph with runes and misc evocables, which is completely absurd. I'm moving it to -, since there are plans for other dungeon installations that don't block movement or projectiles and that can reasonably share the same glyph. It's hopefully not too confusable with _, which frequently have changing colours, anyway. -------------------------------------------------------------------------------- fab9c5ac03 | regret-index | 2024-02-04 16:27:14 -0330 Make Nemelex Xobeh count as chaotic (but not evil) If Makhleb is a chaotic god for offering random blasts plus providing summons of neqoxecs and cacodemons, then surely Nemelex also counts as chaotic- much bigger and wilder potentially-unpredictable blasts, mass enemy polymorph, and outright providing Pandemonium lords as well as those same malmutating demons as summons. Nemelex doesn't count as evil here, though, following the demonic chaos precedent of Xom. This currently just angers Zin when abandoning them for Nemelex. It does make another upcoming decorative feature have a little more use, though. -------------------------------------------------------------------------------- 56a75c70eb | Nicholas Feinberg | 2024-02-04 11:31:13 -0800 Pass weapon into ranged attacks Constify more things, and don't assume that the weapon being used to fire is the same weapon that the attacker is holding in their primary hand. Preparation for steel elves. -------------------------------------------------------------------------------- c5f5bd7300 | Nicholas Feinberg | 2024-02-04 11:28:18 -0800 Fix missing blowgun tile for unrand -------------------------------------------------------------------------------- e84ba5949b | Nicholas Feinberg | 2024-02-04 11:26:52 -0800 Remove unused function -------------------------------------------------------------------------------- 79f8f80802 | Nicholas Feinberg | 2024-02-04 11:20:21 -0800 Remove support for antique wielded tiles Not a lot of folks wielding rods or darts lately, for some reason. -------------------------------------------------------------------------------- 58955fab79 | advil | 2024-02-04 11:03:18 -0500 docs: tweak WSL webtiles docs For WSL 2, there are apparently some IP address complications. This commit attempts to address them... -------------------------------------------------------------------------------- 058985b245 | DracoOmega | 2024-02-03 02:42:53 -0330 Fix dactions not being processed after level peek (Darby) Each level stores an index into the global list of scheduled dactions that reflects 'the last daction that was done on this level'. The idea being that whenever you reenter a level where you've already been, it will use this index to process only the 'new' dactions that have been added since you were there last. The problem is that (for some reason), the dactions_done wasn't actually being marshalled properly, but the game was assuming that it was impossible to save a floor without all dactions being caught up. And this is distinctly NOT the case in at least one situation (and maybe more): level excursions! Essentially, making a level excursion to any floor would cause any dactions scheduled (but not yet processed on that floor) to never happen there. An easy way to demonstrate this is by pulling Kirke to another floor, away from her hogs, and killing her there. Then peeking back at the old level. If you did this, and then returned for real, the hogs left behind would never transform back, since the excursion had made the game save that floor's dactions_done as 'total number of dactions that exist'. This potentially affects countless things, in a wide variety of stuations. Even doing things with the shopping list triggers level excursions, which would have invalidated daction state on the floor with the shop, I'm pretty sure. This fix is a very simple one, and seems to work (and feels like what this code always should have been). But it's possible I'm overlooking something, of course, and it can't be as simple as it seems. Fingers crossed? -------------------------------------------------------------------------------- a30500b4d3 | regret-index | 2024-01-26 02:45:38 -0330 Catch a missing Depths gem (GnomeSayin) evilmike_zot_entry_gauntlet doesn't use the same standardized function of zot_entry_setup like the other zot entry vaults do because it uses a different monster set than the others. As such, it was missed in 866d48a, which was mostly checking the presence of that function being called. I edited Zot gem placement in 2f004bd, but I missed out on this one also because I was just editing the use of that function. (I also didn't catch it in afdcd2b adjusting a lot of gem placement, because it wasn't one of the rune branch uses as I was worried about at the time). Sorry, everybody who missed out on the gem this way. I'll fit another review of smoky and midnight gems into the next big vault review for the early start of 0.32. -------------------------------------------------------------------------------- ec2d92a32c | Implojin | 2024-01-24 18:41:06 -0600 fix: Apply attack delay to WJC rampage kills (Undo) 7bd419a0e5 introduced a bug where if the player killed their rampage target during WJC postmoves, that move would take zero delay and fail to end the turn. Using this bug, the player could equip seven-league and a high damage weapon like the lochaber axe or dark maul, and bounce around the screen making zero delay WJC attack moves. move_player_action implicitly assumes that either an attack or a movement will be attempted if it's being called: In this case, after 7bd419a0e5, its movement attempt was being blocked, and there was no target monster left to attack, so it eventually just returned without applying time_taken or ending the turn. This commit hopefully fixes the bug, by applying attack delay and ending the turn if our rampage target dies during WJC postmoves. -------------------------------------------------------------------------------- 2adb59ae06 | gammafunk | 2024-01-23 19:15:46 -0600 fix: Serpent of Hell placement in Dis (Sar) The subvault dis_grunt of iron_city_of_dis had bad substitutions that could sometimes replace the glyph used for the SoH with some other definition. I've reworked the substitutions to (1) always place the SoH if Dis is its target branch, (2) randomize placement between the two locations for the SoH the map uses, and (3) retain the slight randomization of the spawn location in the rune chamber regardless of whether SoH places on this map. (cherry picked from commit 3a7656b989bb67f3439edfef999a82b942910c4d) -------------------------------------------------------------------------------- 5c88369fb2 | Nicholas Feinberg | 2024-01-23 08:53:58 -0800 Remove a duplicate description (regret-index) -------------------------------------------------------------------------------- b04dd89b9b | Nicholas Feinberg | 2024-01-22 21:01:54 -0800 Don't crash on bad mut names (regret-index) -------------------------------------------------------------------------------- abbd88f42e | Nicholas Feinberg | 2024-01-22 20:59:20 -0800 Fix two misnamed mutations (regret-index) -------------------------------------------------------------------------------- 6a59d0303a | Nicholas Feinberg | 2024-01-22 20:58:17 -0800 Fix ?/u showing potion of (regret-index) potion of mutation is not a mutation named potion of. -------------------------------------------------------------------------------- d9ff480968 | DracoOmega | 2024-01-21 00:01:23 -0330 Don't let spectral weapons get free hits every now and again Actual triggered attacks by spectral weapons were handled by spectral_weapon_fineff, but it was still possible for the spectral weapon monster to randomly path into the player (or, presumably, something else). And since all it takes in Crawl logic to initiate an attack is 'trying to move into something we're not aligned with'), this would cause an attack. Potentially multiple attacks in a row, in fact. Since we never really want fight_melee to happen for spectral weapons, this specifically blocks that. (We could just reduce their speed to 0, but the sight of them dancing back and forth feels a minor shame to lose, I think) -------------------------------------------------------------------------------- 36ad0d86fd | DracoOmega | 2024-01-20 23:59:25 -0330 Fix a very strange crash involving Vehumet wrath and quivering plasma beam If Vehumet wrath triggered while the player had plasma beam quivered, the game would reliably crash. The exact cause of this is a bit complicated and also complete nonsense. -God wrath creates an 'avatar' monster to serve as the origin of hostile spell effects against the player. This avatar uses MONS_PLAYER_SHADOW (for some reason...), which is invisibly placed at the player's own position -The force_more that happens when god wrath triggers causes the UI to refresh, which causes a recalculation of whether the quivered spell has any visible targets (so that it can be dimmed if it does not) -Calculating visible targets for beam-based spells involves firing a tracer at every single tile in LoS (including the player's own position!) until it finds one that hits anything hostile to the player. -Plasma beam's tracer IN PARTICULAR fires a second beam at each spot, immediately after the first, without resetting the tracer's state (to account for monsters that may be immune to electricity but not fire) -Because of some weirdness that I do not like, beam::agent() specifically checks if there is a MONS_PLAYER_SHADOW at the player's position, and then if the beam's source_id is MID_PLAYER, it returns the player shadow instead (this is somehow needed to make player shadows not copy the brand on player launchers for mimic ranged attacks...) -Seperately, code that makes player allies stop beam attacks short if they would hit the player checks specifically that the agent() is a monster and that the beam is friendly. And then, when it would otherwise hit the player, 'rewinds' the beam one tile and stops it 'right before'. All together, what causes the crash is: -Plasma beam tracer tries aiming at the player -Plasma beam's agent is hijacked by the Vehumet wrath avatar, since one currently exists -The beam's agent is now a monster (Vehumet), but the beam itself IS STILL FRIENDLY (because it's a player tracer), so it tries to regress the ray one tile to avoid hitting the player. -And because it's plasma beam, it repeats this a second time without resetting the beam and tries to regress a second time and then the math becomes very unhappy A bunch of shadow mimic stuff is kind of a mess, but for now just verify that the MONS_PLAYER_SHADOW standing beneath the player is actually their shadow and not the shadow of a vengeful god who has decided to add some variety to their day and assault the player's patience instead. -------------------------------------------------------------------------------- 74fbe469d6 | gammafunk | 2024-01-20 00:01:55 -0600 feat: A spell icon for Martyr's Knell (Sastreii) (cherry picked from commit 5a2aebc5c2ff56217ad0f224068f0e939ed537ac) -------------------------------------------------------------------------------- 978bd804de | elliptic | 2024-01-19 17:34:00 -0500 Fix found gems shattering not being hidden by default (without more_gem_info) It still leaves a note and milestone regardless of the more_gem_info option, but the note is hidden unless the option is turned on. -------------------------------------------------------------------------------- e66fa4eb29 | Nikolai Lavsky | 2024-01-20 00:12:24 +0300 task: 0.31 trunk tournament reminder -------------------------------------------------------------------------------- efbe487952 | gammafunk | 2024-01-18 21:39:18 -0600 task: Update the debian changelog for 0.31.0 (cherry picked from commit 5180dd6056c141b7ef092b4df485498114467054) -------------------------------------------------------------------------------- 9740d1a105 | gammafunk | 2024-01-18 21:38:47 -0600 feat: New small abomination tiles from Sastreii Tweaks to the blue one to make it look less like an abyssal tree, color tweaks to the other one, and a new variant added. (cherry picked from commit 2b8753d7e0eaf7b277a50fd64ef26e6b134fe243) -------------------------------------------------------------------------------- 8eac1daf1a | regret-index | 2024-01-18 19:16:20 -0330 unbrace -------------------------------------------------------------------------------- d77652238b | regret-index | 2024-01-18 18:47:54 -0330 Deal with some teleport islands Possibly water_maze_lemuel doesn't need the scrolls of teleportation after it gets a hatch, but it does also make early unspoiled enlightenment into the spiral guaranteed to be worthwhile, so I guess it's fine. -------------------------------------------------------------------------------- fa3d79c85d | regret-index | 2024-01-18 18:44:16 -0330 Don't make firewood slow down ally travelspeed (CarefulOdds) Something about demonic plant caution and brainless zombies goes here. -------------------------------------------------------------------------------- 86f1af28a2 | Kyle Rawlins | 2024-01-18 09:36:41 -0500 docs: md fix for webserver changelog From using this changelog format on other projects, I've learned that there's variation in whether a list is supported without a blank line following a previous paragraph (github rendering supports this, but many automated tools do not). This moves the changelog to the stricter format. -------------------------------------------------------------------------------- eba56dac1e | Kyle Rawlins | 2024-01-18 09:32:04 -0500 docs: update webtiles server changelog -------------------------------------------------------------------------------- 7c03013a13 | Kyle Rawlins | 2024-01-18 09:30:14 -0500 feat: error when python is past eol This is intended to provide some feedback to server admins. For now this error is toothless, but it won't be forever. (The version will need manual updating, unfortunately.) -------------------------------------------------------------------------------- 6ae6769602 | gammafunk | 2024-01-17 11:49:30 -0600 doc: Some changelog tweaks (nicolae) (cherry picked from commit c680215f6857a8aaf79f7ad4b0617d79fa5d988e) -------------------------------------------------------------------------------- daabb59e76 | Nikolai Lavsky | 2024-01-17 11:26:47 +0300 docs: fix default value for `more_gem_info` This option defaults to false, see 407de8339. -------------------------------------------------------------------------------- e526923d97 | regret-index | 2024-01-17 03:29:22 -0330 Add Abyss runelights to default monster_item_view_features settings They're very important to not miss, and monsters are placed on top of them in multiple different Abyss rune vaults. -------------------------------------------------------------------------------- 28bc0835a1 | regret-index | 2024-01-16 19:26:03 -0330 Catch lost Lair gems, adjust a Spider gem baedc58 did fix placing too many runes in the Arachne spider end (since I missed the corner placements in afdcd2b), but also easily places the gem quite far away from the rune. With some thorough clean-up of the vault header, I've also reconfigured the vault slightly to have a proper arrangement of gems placements close to rune placements. Also, the spreee of edits in 866d48a accidentally made wormcave fail to place the gem on occasion, if the double-small-Lair-end workings chose it as the second (but not the first) of those double-Lair-ends. Additionally, if Crawl fails to place two smaller Lair ends as it rarely does, then it wouldn't place the Lair gem at all. Both of these have been fixed, the latter by placing it in the first Lair end the game places just in case it doesn't succeed in placing the second. -------------------------------------------------------------------------------- 89e19f1974 | Sean Dewar | 2024-01-15 10:26:04 +0200 Add missing description for Okawaru's "Receive {Weapon,Armour}" ability -------------------------------------------------------------------------------- b74e046682 | 910rd | 2024-01-14 23:44:13 -0330 Add spell icon for Martyr's Knell -------------------------------------------------------------------------------- dc043339e7 | DracoOmega | 2024-01-14 23:25:51 -0330 Try to clarify Martyr's Knell's summon cap The summon cap of 1 applies only to the shade itself, and NOT to any flayed ghosts that might later be created. I feel this is mechanically necessary for the spell to not feel bad (since renewing your defensive benefit - or even recasting the spell by accident - would instantly wipe out most of what your flayed ghost could have accomplished). But multiple players expressed that they felt mislead by the spell description still saying "You can sustain at most one creature summoned by this spell." so I have decided to make the description more explicit (with a rather ugly special-case >.>) -------------------------------------------------------------------------------- 542084ee55 | DracoOmega | 2024-01-14 23:22:34 -0330 Tweak Sculpt Simulacrum's numbers Reaction to this spell has been a bit mixed, with many believing that the situational nature of the delay isn't worth the payoff. There's been discussion of revamping a few aspects of the spell, but since we're in feature freeze, I am going to just make modest numerical changes. Originally the ice blocks were deliberately fragile, since I thought that might give them interesting situational considerations, but it feels like the delay alone provides that. I have now made them quite durable instead, so that it's less likely your attempt to create summons will be distrupted by damage - and in fact they may sometimes offer a defensive benefit. I've also increased the summon duration from 2 to 3. It explicitly did not want the summons to be so long-lived that the typical use-case was to create them from the tail end of one battle so that you could bring them into the next one. That is how necromany operates and I wanted this to be as different-feeling as possible in that regard. But 3 is still pretty common for regular summons, so hopefully fine. We'll see how this incarnation feels across the length of 0.31 -------------------------------------------------------------------------------- d26e512322 | DracoOmega | 2024-01-14 22:43:05 -0330 Display damage modified by Might/Weak/Idealise in monster descriptions Showing both base and current values, to make it unambiguous to the player that Might isn't additionally added on TOP of this. -------------------------------------------------------------------------------- baedc5810e | Implojin | 2024-01-14 10:07:35 -0600 fix: Don't place 5 runes in a spider vault Looks like this was an oversight in afdcd2bc08. -------------------------------------------------------------------------------- 7fc57aa741 | Aliscans | 2024-01-13 21:14:13 +0200 Improve how search handles artefacts. Instead of returning artefacts where the name & prefixes match, or where the artefact description matches, return artefacts (from inventory, floor or shops) which match with all three things combined. -------------------------------------------------------------------------------- abc238812c | Rytis Petronis | 2024-01-13 21:13:26 +0200 removes ability to start repeat sequence with armour equip commands The repeat command doesn't allow other multi-turn commands such as wield weapon or wear jewelry, so this makes the behaviour unified. -------------------------------------------------------------------------------- dfb5f862aa | wheals | 2024-01-13 21:08:10 +0200 Refactor -------------------------------------------------------------------------------- 18b7feefb4 | wheals | 2024-01-13 21:05:01 +0200 Show real file name for rc errors (#2536). -------------------------------------------------------------------------------- 414e8e9f11 | DracoOmega | 2024-01-13 13:38:16 -0330 Fix a possible crash with casting Sticky Flame at very low power If spellpower was less than 10, it was possible for the div_rand_round to result in random_range(1, 0) which asserts. Having less than 10 power when casting a level 4 spell is pretty implausible in most circumstances, but apparently doing it in Shadow Form can help... -------------------------------------------------------------------------------- e934b4519a | Nicholas Feinberg | 2024-01-12 22:24:44 -0800 Fix a teyepo (cool 3) -------------------------------------------------------------------------------- aaba7af156 | Nicholas Feinberg | 2024-01-12 22:07:39 -0800 Cut some less-notable changes (gammafunk) -------------------------------------------------------------------------------- bffa963729 | Nicholas Feinberg | 2024-01-12 21:49:40 -0800 Continue unmaking Meteorans (various) -------------------------------------------------------------------------------- 72778bb224 | DracoOmega | 2024-01-13 00:12:21 -0330 Don't lie about Yred bound soul hp It is perhaps surprising to some people that bound soul hp doesn't care about the hp of the original monster, but (like all dervied undead) is purely a multiplier of the original's HD. 8d68a812144 misleadingly made bound souls' description state the original's hp, (which was much less than their actual hp for many souls, while being also much MORE than various lategame unique souls). Yred is slated for significant changes in 0.32, and more transparency for how much hp a bound soul will have is part of that. But in the meantime, xv should at least reflect the current state more accurately. -------------------------------------------------------------------------------- b1ac2c5b25 | DracoOmega | 2024-01-13 00:06:07 -0330 Fix a few errors in the changelog -------------------------------------------------------------------------------- 0d8cb65f81 | Nicholas Feinberg | 2024-01-12 17:34:15 -0800 Hide all traces of the time machine (Cilian) Shh! -------------------------------------------------------------------------------- 23ea822b79 | Nicholas Feinberg | 2024-01-12 17:21:59 -0800 Finalish changelog update -------------------------------------------------------------------------------- a7cece931a | Kyle Rawlins | 2024-01-12 09:35:48 -0600 docs: update changelog for 0.30.1 Historically we actually count the fixes, but this is a bit annoying to do and doesn't really provide much useful info to anyone. Comitter's Note: Cherry-picked from 713bb673 and added 0.30.1 to the debian changelog as well. -------------------------------------------------------------------------------- dde2bdd852 | Implojin | 2024-01-12 02:11:00 -0600 fix: Don't default autopickup useless evokers 29cbedb7bc enabled default autopickup for elemental evokers, but wasn't checking whether they were useless or forbidden; under gods with ally restrictions or forbidden conducts like Oka/Ru/Zin, this was picking up evokers that couldn't be used. This commit lets default evoker autopickup respect useless and forbidden items. -------------------------------------------------------------------------------- 952d896825 | Nicholas Feinberg | 2024-01-11 23:10:20 -0800 Partial changelog update -------------------------------------------------------------------------------- 5cb510d322 | regret-index | 2024-01-11 18:26:26 -0330 New Fugue and Blazeheart spell icons (CanOfWorms) Both of them are good work, as usual. Re-alphabetized a little of summoning and necromancy in dc-spells, while I was adding new spells there. A lot of these tiles listings need some heavy reorganizing, honestly. Wereblood's icon is now used for monster Battlecry, as something rather important to notice on a rather wide variety of different monsters, and as something which reasonably fits as a shouting face. -------------------------------------------------------------------------------- 1a3bd5dcfb | Aliscans | 2024-01-11 21:17:50 +0200 Fix InvMenu::load_inv_items(). Repair the function which lost secondary hotkeys in the previous change. -------------------------------------------------------------------------------- c8d6b64c82 | Aliscans | 2024-01-11 21:17:50 +0200 Make "!" in the identify scroll menu identify the first unknown potion. Print (e.g.) "select first with '!'" in the menu to warn the player. -------------------------------------------------------------------------------- 4e6510e29d | Aliscans | 2024-01-11 21:17:50 +0200 Tell the player about MF_SECONDARY_SCROLL in menus. If MF_SECONDARY_SCROLL is set, state in any menu "subtitles" that object class keys (such as ? or /) move to an item in its section. This was not previously communicated. Add MF_SECONDARY_SCROLL to equip/unequip and identify menus. -------------------------------------------------------------------------------- 688b343257 | DracoOmega | 2024-01-11 10:32:59 -0330 Fix pacified good neutrals not acting like they were pacified This is currently done to nearby orcs when you first accept a Beogh conversion. I assume it was intended that they actually become pacified or the could wouldn't have called mons_pacify(), but in practice this didn't actually work, since for some reason monsters needed to have BOTH the pacified flag AND be true neutral. -------------------------------------------------------------------------------- d28174fed3 | DracoOmega | 2024-01-11 10:32:47 -0330 Fix a slew of frightening issues with pacified monster pathing Pacified monsters were intended to path directly to the nearest level exit and then leave the level. Sometimes they did this! And some other times, deeply broken things happened. Where do I even begin... First of all, there was a small chance each turn for a pacified monster to give up on whatever exit it was moving towards (1-in-40 for human intelligence monsters and 1-in-120 otherwise). The comments implied that this was intended to help 'stuck' monsters look for a different staircase instead, but the code never let them ACTUALLY look for a different one. Instead, it would cause them to just start wandering vaguely in the general vacinity of the nearest exit instead (possibly more than LoS range away from it). Maybe they would randomly step on it at some point! But probably not. (Also, if they were far enough from the exit at this point and mindless, they would likely just wander around where they already were) Also, if they rolled the random chance to stop moving towards an exit, that exit would also become unusable to all subsequently pacified things (until either ALL exits on a floor got marked that way, or the code hit a 1-in-20 chance when trying to find an exit for a pacified monster to regenerate the cache from scratch). So they could give up, and then also cause future monsters to ignore nearby stairs, too. Also, for some reason, the code considered teleport traps as valid 'exits' from the level, but it was only possible to trigger them 'leaving' by stepping on one if they were also wearing -tele items (since otherwise they would teleport before the 'leave level' check happened. If they landed nearby, they would keep on walking into the trap over and over again, trying desperately to accomplish something useful. If they DID have a -tele item, on the other hand, stepping onto the trap would cause them to cease to exist without even a message. And most terrifyingly of all: the code used a cache of level exits on a floor to avoid having to search for all of them each time a monster was pacified. BUT THIS CACHE WAS NOT DISCARDED IF YOU LEFT THE FLOOR. This meant that pacified monsters would try to path towards where exits were ON A PREVIOUS FLOOR, and not the current one. And if they actually reached the coordinates of one of those, they would simply vanish without a message. As near as I can tell, this has likely been broken in this way for a very, very long time. Anyway! The code is different now. The cache is properly regenerated on each new floor, monsters actually attempt to do a pathfinding check when looking for an exit (to avoid the very real original problem of just being stuck staring at an exit across water until they rolled the slim chance to started wandering in place instead). They will even look for another exit if the one they are moving towards becomes inaccessible during their journey (detected somewhat crudely by 'has passed a turn without a valid step forward', which isn't perfect, but is a hell of a lot improved). If there are somehow NO exits they can path towards at all, they will properly give up on trying and just wander around. The odds of being in a completely disconnected spot (ie: on the other side of deep water) and then this changing later (eg: by something teleporting them) feels slim enough not to worry about it. Also, teleport traps no longer count as valid exits. (Shafts and Gateways to the Infinite Horrors of the Abyss still do, because they're funny) -------------------------------------------------------------------------------- cbf77bbcfc | Nicholas Feinberg | 2024-01-10 10:26:49 -0800 Temporarily evert "Simplify off-hand attacks" I forgot we're in feature freeze. Will merge this in 0.32. This reverts commit ba2c541246222192d693b6520cb875a9e2dbfda5. -------------------------------------------------------------------------------- ba2c541246 | Nicholas Feinberg | 2024-01-10 10:25:25 -0800 Simplify off-hand attacks Off-hand attacks' trigger chance scaled on UC and on XL, unlike all other aux attacks, which scaled only on XL (if anything). This felt inconsistent (a punch scales on UC but a kick doesn't?), and was confusing for players who misunderstood the UC skill descriptions and thought off-hand punches were more than a consolation prize for being shieldless. Change their trigger to scale purely based on XL instead. (Damage still scales based on UC, for now, but perhaps should also be XL based.) It'd be great to add a description for these somewhere - no idea where it'd live. Ideally there'd be both a manual section and somewhere in-game where you could learn more about your current off-hand damage and chance. -------------------------------------------------------------------------------- 54f21dcd01 | Implojin | 2024-01-10 10:35:21 -0600 Remove some obsolete autopickup lua This code was added in a35564097f (2015) to prevent autopicking multiple elemental evokers, which have generated only once per game since 5db6f66fbb. -------------------------------------------------------------------------------- 29cbedb7bc | Implojin | 2024-01-10 09:18:53 -0600 Autopickup elemental evokers by default Excluding the horn of Geryon, because it doesn't currently exist on the \ menu, and we want players to be able to manually disable these if desired. Possibly the horn should be enabled in both places, since it is treated internally as an xp evoker, but I'm not touching that here. -------------------------------------------------------------------------------- beaec30b81 | DracoOmega | 2024-01-09 19:26:10 -0330 Let monsters cast ensnare on other monsters (Oneirical) I overlooked this when scanning for other 'low damage beams with side-effects' since there isn't actually a corresponding zap type in the list. -------------------------------------------------------------------------------- a12eea24be | DracoOmega | 2024-01-09 19:05:56 -0330 Avoid a rare crash with eleionoma/witch wand creation (PleasingFungus) The exact cause is still a bit obscure, but it seems like if they drop a wand that is your last unID'd wand, and that wand was also on your shopping list, it can cause a level excursion that wipes out the still-dying monster's data before their death is finished processing. I'm still not satisfied with this, as it's unclear why it only triggers for the LAST wand (and not 100% of the time, even then), but this still seems to greatly improve the situation. -------------------------------------------------------------------------------- e65d87d18d | Nicholas Feinberg | 2024-01-09 09:33:25 -0800 Make ribbon worms catch their breath (Monkooky) Reduce serial ensnare spam. They need some time to grow new guts, even with that M_FAST_REGEN! -------------------------------------------------------------------------------- d52d5dbe6e | Nicholas Feinberg | 2024-01-09 09:32:25 -0800 Give a gem an unswirly (Ge0ff) -------------------------------------------------------------------------------- 4aaf141004 | DracoOmega | 2024-01-08 15:22:25 -0330 Forbid -cast and spell school enhancers on the same randart -------------------------------------------------------------------------------- 890cdf5628 | Nicholas Feinberg | 2024-01-07 22:53:33 -0800 Don't label Lom Lobon a minor threat (cool2) ?/m monsters are MTHRT_UNDEF. -------------------------------------------------------------------------------- 9787180647 | Nicholas Feinberg | 2024-01-07 17:30:47 -0800 Autoquiver throwables on pickup again (advil) Broken in b92c8fe61fd27051bdea34e1b4cbf590aca69b95. Resolves #3344. -------------------------------------------------------------------------------- 8663dec9be | Nicholas Feinberg | 2024-01-07 16:31:30 -0800 Fix dgn_farthest_from (ihatemudryk) The old code did not work - it was a broken implementation of a breadth-first search. Incidentally, it would also crash if it was passed a beacon with just one adjacent tile, or two beacons with no adjacent tiles. (But that was mostly unrelated.) Resolves #3460. -------------------------------------------------------------------------------- 7d6f0aea37 | Nicholas Feinberg | 2024-01-07 15:40:33 -0800 Fix fleeing orb spiders' bloodlust (ZillyBean) Firing positions are not relevant when fleeing. Resolves #2992. -------------------------------------------------------------------------------- 996d7381b2 | Nicholas Feinberg | 2024-01-07 15:22:30 -0800 Adjust tentacle description (acrobat) Sigh. Resolves #3458. -------------------------------------------------------------------------------- 60c5cc7444 | Nicholas Feinberg | 2024-01-07 14:49:33 -0800 Fix Bai losing her blood too soon (acrobat) Only drop talismans (and jewellery, etc) after she dies, not just when she transforms into a dragon. Resolves #3455. -------------------------------------------------------------------------------- 6e05a210f3 | regret-index | 2024-01-07 15:31:02 -0330 Catch a different missing silver rune (Darby) -------------------------------------------------------------------------------- 2b2087bae8 | regret-index | 2024-01-07 15:18:57 -0330 Catch a missing silver rune (CarefulOdds, Darby) Might be a good idea for objstat to also track runes just in case anybody does another big overhaul of all the V:$ quadrant subvaults or anything else extremely long. Also, I feel obliged to say it's kind of dumb how long we've kept the tradition of "O" being the rune glyph / branch entrance glyph since it was not longer hardcoded to dynamically turn into the right entrance / rune so very very long ago and it's so easy to read it as a 0. -------------------------------------------------------------------------------- bec6b6ccbf | Nicholas Feinberg | 2024-01-06 22:40:01 -0800 Fix: don't crash in \ (lowenheim) How did no one else report this?! Resolves #3404. -------------------------------------------------------------------------------- 1c3f895ad5 | Nicholas Feinberg | 2024-01-06 22:29:55 -0800 Limit GDR application (DracoOmega) We have never used GDR on triple or proportional AC types, and I doubt we ever will. Rip out the code. Resolves #3426. -------------------------------------------------------------------------------- a0385a40c4 | Nicholas Feinberg | 2024-01-06 22:24:53 -0800 Fix bound monsters being swappable (acrobat) Resolves #3454. -------------------------------------------------------------------------------- 17a54de940 | Nicholas Feinberg | 2024-01-06 22:07:25 -0800 Refactor Sigil of Binding -------------------------------------------------------------------------------- 1b3c7e429d | Nicholas Feinberg | 2024-01-06 22:00:39 -0800 Fix sturdy frame description (acrobat) Resolves #3457. -------------------------------------------------------------------------------- 94871bc2e8 | regret-index | 2024-01-07 02:06:14 -0330 Fix an occasional connectivity bug -------------------------------------------------------------------------------- e7908ec95f | Nikolai Lavsky | 2024-01-07 00:40:01 +0300 fix: don't gain extra lives after losing gems Due to a missing `break` in 7c67ea8c8, every time the power of Zot shattered a gem, a note about gaining an extra life was added to the morgue. -------------------------------------------------------------------------------- 300232130d | regret-index | 2024-01-06 17:23:54 -0330 Adjust a few small monster bits The withered plant description adjusting their age versus the branch they spawn in wasn't working properly, which this fixes. Also, this reorganizes some of monspeak.txt into proper alphabetizing, and friendly laughing skulls via Yred now still speak on occasion. -------------------------------------------------------------------------------- 3d35757396 | regret-index | 2024-01-06 17:23:28 -0330 Nudge up kobold blastminer ranged damage (Monkooky) While these are meant to be anti-melee monster experiments, the current low damage of blastminer arbalests (less than orc warriors with arbalests) makes it entirely plausible for sufficient AC characters to kill them via poison darts rather than closing in and risking getting bombarded. This is an unideal state for a monster as deep as Orc and involves some kiting, so they're getting a slight nudge up of ranged damage (but not Bombard damage) to try and discourage such tactics. Bombard is still a much bigger focus of threat for the monster, anyway. -------------------------------------------------------------------------------- e0997bbf37 | regret-index | 2024-01-06 17:09:49 -0330 Placeholder: rename + retile hard mode ice cave entries This distinguishes easy and hard ice caves explicitly in game by making the latter's entry feature be "glacial archways" to "a glacial chasm". This also adds a new, higher-detail tile by Sastreii. Currently, this is only a vault-defined feature name using a fragile hack for the current branch-based difficulty split (as of fc7f089). In the next version, we would like to make easy and hard mode portals (ice caves or other future settings) lead to entirely different branches that happen to share the same maps (e.g. said "Glacial Chasm"), rather than having the current opaque hard cut-off. Adding new branches is beyond the scope of currently being in feature freeze, however, so this is a somewhat incomplete adjustment for now. It should still be an improvement, in that it explains to newer players that there's any signifncat difficulty split at all. -------------------------------------------------------------------------------- e08a94be7c | DracoOmega | 2024-01-06 09:11:17 -0330 Fix some more possibly-uninitialized variables -------------------------------------------------------------------------------- ea8d852952 | DracoOmega | 2024-01-06 08:49:07 -0330 Avoid a divide-by-0 -------------------------------------------------------------------------------- 515db51633 | DracoOmega | 2024-01-05 19:06:46 -0330 Remove a long-unused zap type -------------------------------------------------------------------------------- 5eddcf2448 | DracoOmega | 2024-01-05 19:06:46 -0330 Fix monsters refusing to use pyre arrow / meph breath on other monsters This is a very hacky stop-gap fix because I don't want to do the deeper code refactoring that would be involved in a better fix after feature freeze. But the gist is that monsters would refuse to use these against other monsters because the tracer says that they would inflict 0 damage (even though the primary reason to use them is for their post-hit effect) Currently, because AC is rolled during monster-vs-monster tracer checks, low damage attacks can randomly be ruled irrelevant, even when their side-effects would be very relevant. In practice, many of these do enough damage that this is unlikely to occur (ie: quicksilver bolt, bolt of devastation, and klown pies all do 3d20), but this may also be an issue with some zaps with sufficiently low impact damage. In future, it would be good to unify all 'apply a non-damaging effect from a non-enchantment beam' into a single place that can check if a target is eligable and then apply it, instead of the scattershot approach of checking things in multiple different places (and sometimes via string comparison!) This could even include the great mess that is monster cloud code! But for now, this appears to fix the most immediate problem, and hoppefully shouldn't cause any new ones. -------------------------------------------------------------------------------- 8f5e8aebd6 | regret-index | 2024-01-05 01:30:13 -0330 Emphasize only intelligent monsters activate net traps Whether or not this is a weird behaviour we entirely want to keep, we might as well clarify the current specific behaviours of net traps (always player-centric, only human-intelligence monsters activte it) in their description. I'm of two minds to keep this- it's extremely idiosyncratic and unexpected compared to other traps, but removing it would make two ossuaries and Zot:5 and Tomb all toss even more nets indefinitely at players. Might be worth considering a limited activation count and some context of only monsters activating it, in 0.32. -------------------------------------------------------------------------------- b20b95014f | regret-index | 2024-01-05 01:30:13 -0330 Catch some missing V:$ gems (DracoOmega) Figured out with the power of objstat looking for gems and some long, meticulous hunting. Also slightly adjusted some other gem positions and left a comment on not accidentally leaving behind too many 'k' glyphs for the gem subvault to properly find. -------------------------------------------------------------------------------- df1f1dc8e9 | Implojin | 2024-01-04 22:12:43 -0600 Move Barachim in the manual (Darby) Ba are intermediate at character select, but were listed in the manual under advanced. -------------------------------------------------------------------------------- e50629dacd | DracoOmega | 2024-01-04 23:21:48 -0330 Teach objstat about gems So that we can run tests to verify that it will place all of them 100% of the time. -------------------------------------------------------------------------------- 3c05fc5d25 | regret-index | 2024-01-04 22:12:50 -0330 Catch some missing Elf:$ gems (Flugkiller) I don't really know why two of these later vaults were giving out better rewards and counts than the others, nor why two of the earliest vaults don't use the same standardized loot distribution and guardians vaults both before and after them use. Should review and standardize these item amounts more in the future. -------------------------------------------------------------------------------- a8702eb40a | regret-index | 2024-01-04 21:17:27 -0330 Barachi and Oni dummy monster tiles (Sastreii) We've accumulated so many nice tiles for player-species dummy monsters it'd be nice to have more than one pan lord vault and a few entry vaults use them. Even if they need to be kept out of actual monsters for players to fight, and we've got a preponderance of early vaults showing off monsters behind glass, maybe some idea will come up some day. (Maybe some more bazaar customers off in the far distance of layouts that aren't nearly so cave-like?...) -------------------------------------------------------------------------------- afdcd2bc08 | regret-index | 2024-01-04 20:29:26 -0330 Indefinite widespread vault review Of note: * Barachi, gnolls, armataurs, djinn, and oni are now all in the various species zoo arrival vaults and the one pan vault. * Crypt:$ gets a 33% chance to place a talisman of death, replacing the old evokers pile that struggles with the evoker count limitations these days. Death form is extremely expensive, skill points wise, and there's not much left of a regular 3-rune game for such a drop to be too useful, but it can be another enticing reason to visit Crypt and might make more characters actually try out extended beyond those already ready for it. * Some shard shrikes were trimmed out of a variety of vaults. We have a couple more reasonable ice enemies at this point compared to when they were added, and there's been too much leakage of hells as is. * wizlab_doroklohe gives a single charge of digging and a single scroll of revelation at the start, now, to forewarn its exact contents. It also has messages directly pointing at the walls for the countdown. * Gems have been taken off the exact same space as the runes in the branches with both, so they can sparkle on their own seperately of the runes and so apportation UI / casts don't work awkwardly against them. This will need more testing to make sure I didn't misplace any V gems... -------------------------------------------------------------------------------- e90ac80ac4 | yrdzrfxndfvh | 2024-01-04 20:29:06 -0330 buff ice ziggurats (#3401) [Committer's notes: Simulacra in ziggurat previously called directly from HD versus the ziggurat's abs/depth, which would end up getting stuck later on shrikes and two of the giants. The specified list for simulacra is a good idea, but it is too much of a malevolent meme for zig dippers to possible instantly explode against a 20-headed hydra simulacrum. Used a different specific list instead. Also, wendigo do in fact overlap too much with Cocytus. Rather than pull further from Cocytus, use ice monsters that don't- ironbound frosthearts, and walking frostbound tomes. Both are probably still fine for Ziggurat dippers, and one of the layouts places the start of the floor by a wall. Closes #3401.] -------------------------------------------------------------------------------- 41d5ff3e7b | DracoOmega | 2024-01-04 19:12:16 -0330 Fix Peanut Brittle pies not actually vitrifying monsters Also fix a trivial inconsistency in durations. Fixes #3399 -------------------------------------------------------------------------------- 55fdcbfc7f | DracoOmega | 2024-01-04 18:47:45 -0330 Fix alchemy miscast text in spell descriptions (Picklenugget1) It should say that they can poison you, but inflict 'alchemy damage' >.> Fixes #3451 -------------------------------------------------------------------------------- a2fd7aa73c | DracoOmega | 2024-01-04 18:23:54 -0330 Prompt the player before stepping onto a binding sigil I don't like the code duplication in this function. Probably could use some refactoring at some point. -------------------------------------------------------------------------------- 4e53e8b332 | DracoOmega | 2024-01-04 18:22:45 -0330 Fix Gozag/Yred worshippingers being unable to cast Sculpt Simulacrum It doesn't use corpses anymore, so there should be no conflict. -------------------------------------------------------------------------------- 532432118c | DracoOmega | 2024-01-04 18:22:16 -0330 Fix orb spiders being able to move a little while asleep No code specifically keeps sleeping monsters from moving. It's just that their target (ie: 'where I'd like to move') is set to themselves. M_MAINTAIN_RANGE monsters try to move towards firing_pos instead and this was not set, so when put to sleep they would still move to their next intended destination before stopping. This fixes #2972 -------------------------------------------------------------------------------- a3383bade6 | regret-index | 2024-01-03 21:01:23 -0330 Add some of nicolae-'s Crypt & Orc vaults from PRs #3325 & #3326 nicolae- has been very preoccupied during 0.31's development period, and wasn't able to finish updating either pull request in response to feedback. He's assented to me fitting in vaults from these two pull requests that would require minimal to no editing for 0.31, and I have done here. Hopefully, in the fullness of time, he'll be free enough to update and finish the rest of those pull requests' contents. -------------------------------------------------------------------------------- 1bbaa075f8 | regret-index | 2024-01-03 19:43:03 -0330 Mildly reorganize orc.des and crypt.des Mostly some quick headers and splitting decorative vaults from monster vaults. We're not very close to the minimum branch-unique decor count for either branch (somewhat arbitrarily: 20 for one floor, 27 for two, and 54 for four), but there's decorative vaults inbound for both of these, and it'd make future assessment for such be much faster. -------------------------------------------------------------------------------- 5526595cd0 | regret-index | 2024-01-03 18:58:42 -0330 Remove a testing weight for D:15 Whoops. Sorry. -------------------------------------------------------------------------------- 39cc6bdce3 | yrdzrfxndfvh | 2024-01-03 18:07:04 -0330 a couple more ziggurat pillar changes (#3402) [Committer's notes: Even if we were to allow nameless horrors outside of miscasts, they're very redundant and boring when there's already a very long list of summoners also available. Animated armour is also very boring as a hostile monster due to its glacial movespeed, and trying to solve this by giving it more HP is extremely undesirable as one-off behaviour. The other stuff is good. Alongside from leaving out those singled-out components, I did a little bit of reformatting, clean-up, and sprucing up. Closes #3402.] -------------------------------------------------------------------------------- 1b1bae75ae | regret-index | 2024-01-03 17:29:05 -0330 Deal with rude bazaar customers plus other vault monster attitude weirdness Okawaru worshippers and those that sacrificed love both now get messages about the good_neutral bazaar customers leaving as soon as the player arrives, rather than having to fight them all as hostile monsters. For those who have neither excuse yet killed completely friendly people for the experience and piety, there's actually been a long-standing bug. Friendly, neutral, and good_neutral monsters placed via vault monspec, as opposed to any other means or source, would still give rewards for killing them. Monsters placed this way are now marked as not giving rewards, so now nobody gets xp or piety for attacking the bazaar customers, Elyvilon altar quokkas, or the Zot hot tub draconians. Ease up on the murder sprees. -------------------------------------------------------------------------------- 7be0f4f3a5 | Implojin | 2024-01-03 10:49:13 -0600 Improve Serpent's Lash rampage behavior (sdynet) After 961fd35ebc, making a rampage attack across a one-tile gap while serpent's lash was active (e.g.: @.o) wouldn't consume serpent's lash. Instead, the player would make a rampage move, followed by an attack, using attack delay. The new behavior was surprising to players: Prior to 961fd35ebc, the same setup consumed a serpent's lash charge, moving with 0 delay. Here we allow rampage moves ending in an attack to trigger serpent's lash, which should bring the behavior more in line with player expectations. This could be simplified while better respecting WJC encapsulation by calling the full WJC post moves here, but that would trigger whirlwind twice for these one-tile move attacks, which might be a bit much re: balance. -------------------------------------------------------------------------------- 93c622d222 | yrdzrfxndfvh | 2024-01-03 01:43:13 -0330 add a vault for each hell branch (#3425) [Commiter's notes: No draconian shifters in Gehenna, sorry. They're too off-theme and clash with the vault's own desire to have monsters call down damnation. Alongside some general clean-up, I also specified statue tiles in the Gehenna vault, lowered the monster spam with randomization in the Cocytus vault and gave it pharaoh ants over necromancers so soul-binding is far more likely to happen, tossed out the plain lich who can't IOOD or bolt of cold through the Tartarus spectral snake pile, and buffed the Dis orange crystal count to be less trivial after luring the motile monsters out. Closes #3425.] -------------------------------------------------------------------------------- 8ca8a6932e | regret-index | 2024-01-03 01:43:13 -0330 Lower protean progenitor Will (Prakerore) They had Will 180 to match titans as a nearby giant, but the other high tier giants added well after those (juggernauts, iron giants, tainted leviathans) all only have Will 120. It should be reasonable to make proteans fit the same notion- even 27 Evocations doesn't make charm or para wands get better than 12% success rate, and more dedicated hexing already has big other concerns in Zot (like orbs of fire and electric golems). Plus, reading a scroll of vulnerability in Zot comes with lich-shaped trade-offs for now, and may come with additional problems in the future. -------------------------------------------------------------------------------- 8e2b85f8ed | Edgar A. Bering IV | 2024-01-02 20:08:37 -0800 fix: dont place a god altar with polyominoes This was meant to be `b` not `B` -------------------------------------------------------------------------------- 7e4722a024 | Implojin | 2024-01-02 19:30:36 -0600 Fixup a rampage assert ba8647c523 moved this assert before the rampage move it was intended to guard against. -------------------------------------------------------------------------------- ba8647c523 | DracoOmega | 2024-01-02 21:27:29 -0330 Move an assert somewhere it can actually theoretically trigger -------------------------------------------------------------------------------- e1511139a1 | regret-index | 2024-01-02 21:06:35 -0330 Experiment: give bazaars non-hostile monster customers While it's good for variety's sake and flavour's sake to have portals that don't contain any monsters, bazaars could do with a little more fanciness than their current very old style and roster for decorations. It'd take a fair bit of effort to add more decorations to each individual bazaar map, since there's over forty of them, but there is one relatively unique and cute option available with relatively minimal effort: Other customers! They're att:good_neutral, which means they won't attack players, won't follow them out of the portal, and won't provide xp or piety if the players are jerks. The choices here are all quite weak for Bazaar depth, so it's unlikely carting hostile monsters into the bazaar would be even slightly worthwhile; those choices are also monsters representing both branches and other player species, kind of. It should also give the place a little more liveliness compared to other empty places like Temple and troves, suiting for its explicitly busy state. For now, there's 1-3 customers per bazaars, with a 1 in 27 chance for 4-6 customers. TODO: Idle bazaar customer dialogue. -------------------------------------------------------------------------------- e0190472d0 | regret-index | 2024-01-02 21:01:25 -0330 Trim a bit off of Aizul's deeper depths (Ge0FF) Following the spirit of 005a376, Aizul's got good dangerous appearances in the Lair branches and a pre / post Lair branches Elf, but falls off later on as player XLs go up and innate Willpower can stave off her Sleep casts. With around a ~0.3% or worse killratio in Vaults, Depths, and Crypt, and with plenty of other late uniques around to provide variety, she can slither away from all but the first two floors of Vaults and be better off. -------------------------------------------------------------------------------- 4ceaed913a | regret-index | 2024-01-02 21:01:25 -0330 Tweak Pan Lords a little more, yet again * Summon Vermin gets swamp worms and goliath frogs over redbacks so it's tangibly different from Summon Spiders + hell rats. It'd be nice to have some unique actually cast this spell in the future- we've managed to mostly de-emphasize summoning uniques in the newer designs these days... * Pan lord random brands add AF_DRAG to the list, because dragging somebody away from a staircase during the orb run is good, and because they already got trample in f39bf5d. * Pan lords now get Plasma Beam, Vitrify, move the no-longer-piercing Metal Splinters (81a9d5b) from AOE spell rolls to bolt and projectile conjurations spell rolls, lose a duplicate Bolt of Devastation chance, and lose Iron Shot for Bombard because they've already got both LCS and Metal Splinters. * A variety of Pan lord AOE spells (and some ghost spells like CBL, Malign Gateway, and Plasma Beam) now result in them giving more experience, since most spells of their spells already did such. Commit messages in e.g. f6a566e is correct in that the specifics of this list are rather weird, but this should properly show the danger and reward the xp for both ghosts and Pan lords as seems to be its main coherent focus. I also tried to sort the spell sets in a few lists a little better: (hexes -> summoning -> buffs -> conjurations (fire -> ice -> earth -> air -> necro -> alchemy) -> the rest). -------------------------------------------------------------------------------- f47e9a2960 | DracoOmega | 2024-01-02 20:34:59 -0330 Fix blastmote knockback (and maybe other things??) not clearing water hold If the player was knocked back by a blastmote explosion, it would not end a water elemental engulf that was currently in progress, even if it knocked you away from them. Curiously, this wasn't true if the water elemental was the one knocked back instead. I am going to go on record here and say there are FAR TOO MANY similarly named functions for moving players and monsters around, which check some different subset of different properties (and sometimes call each other, but sometimes don't). It's not at all clear to me which you are even SUPPOSED to call in different situations (is it clear to anyone?) and given the breadth and complexity of different checks performed for movement, I think it would be nice to do some heavy refactoring of this. ...some day. -------------------------------------------------------------------------------- 72ca9f7c6f | DracoOmega | 2024-01-02 20:34:59 -0330 Fix a terrible interaction between Noxious Bog and quicksilver Casting Eringya's Noxious Bog simultaneously created bog tiles around the player and gave a status that made the player immune to these, *but those two things were not otherwise linked*. This meant that if the player lost the status (due to drinking !cancellion or being hit by quicksilver), the bog would remain, but they would lose their immunity to it - often swiftly dying in the process. Since the bog is supposed to be radiating from the player's magical effect in the first place, instead immediately remove the bog if the player loses the status prematurely. -------------------------------------------------------------------------------- e2c2431d72 | DracoOmega | 2024-01-02 20:34:59 -0330 Give Protean Progenitors (and flesh) rPois, give flesh fast regen (r-i) In the theme of many giants representing a different elemental school of magic, consider progenitors the 'alchemy giant' and give it the appropriate resist (this also makes them safer from green drac clouds) Also, aspiring flesh were always intended to regenerate at the same speed as their protegenitors. -------------------------------------------------------------------------------- 9d92c49a05 | DracoOmega | 2024-01-02 20:34:59 -0330 Very slightly reduce the odds of chaos polymorph (regret-index) -------------------------------------------------------------------------------- 508479e61e | DracoOmega | 2024-01-02 20:34:59 -0330 Fix a minor bug with mons_has_attacks() Only treat AT_WEAP_ONLY as an attack if the monster actually has a weapon. (xv even hides that the monster has an attack at all if it isn't wielding one) -------------------------------------------------------------------------------- 4bb3443018 | DracoOmega | 2024-01-02 20:34:59 -0330 Block Chaos weapons from using Might/Weak on monsters with no attacks Mostly using similar logic to what BEAM_MIGHT itself uses. (Which is why it can stack Weak but not Might, even if that otherwise feels quite arbitrary. Not likely to matter in practice, though.) -------------------------------------------------------------------------------- 4d2d64e67e | DracoOmega | 2024-01-02 20:34:59 -0330 Describe goliath frog acid damage in xv It's a little unfortunate that this is still slightly lying, since that's only how much damage *players* can take from it and not other monsters, but probably that is better than showing nothing at all. -------------------------------------------------------------------------------- 5715333c33 | David Lawrence Ramsey | 2024-01-02 15:53:59 -0600 Add Yred death message for nonliving players. Djinn and Gargoyles can't be zombies or join the undead harvest. Message suggested by regret-index. -------------------------------------------------------------------------------- bdd0a2a65a | regret-index | 2024-01-02 18:18:19 -0330 Caster tile updates by Sastreii Some magical effects in the left hands of some monsters sort of clashed with the possibility of listing effect icons in that specific corner- notably including haste, lost soul ghostliness, or icebound souls. These new tiles should reduce those concerns for casters of each: arcanists, necromancers, deep elf death mages, and ancient liches have all been adjusted. -------------------------------------------------------------------------------- 6f9dbf35b3 | regret-index | 2024-01-02 18:08:02 -0330 No more deriving undead from the already undead Currently, the vast bulk of undead can't be used to make derived undead. The exceptions are highly idiosyncratic, and are mostly later additions of flavour-wise corrupted monsters that happen to leave corpses. There's long-established precedent for even corporeal, corpse-leaving dead to not rise yet again with the necrophage / body body / ghoul glyph, and it makes a lot more sense for all undead to not get a third chance at shambling around from both flavour and mechanical perspectives. I am thus preventing vampire mosquitoes, ghost crabs, death scrabs, and tainted leviathans from being possible zombie fodder. This does once more make Tomb that little bit harder, since death scarabs actually make for quite strong undead minions (losing battiness, keeping a high speed, and available in constant swarms). I do feel a little conscientious about such, but Tomb should be addressed on very different grounds than through this very weird, inconsistent, and unexpected behaviour. -------------------------------------------------------------------------------- 98767d6fda | regret-index | 2024-01-02 17:54:56 -0330 Adjust species -> class recommendations re: Alchemy In-game background recommendations are generally looking for positive apts. They were untouched in the Transmutations + Poison merger into Alchemy. Gargoyles went from 0 Poison to -2 Alchemy, which makes most of the starter spells difficult enough that they probably shouldn't be recommended it. Felids always had -1 in Poison and still, but they lost their fast movement for kiting purposes and we don't recommend every caster background for Felids. Tengu also lost their fast movement and had their -2 Transmutations plus 0 Poison averaged to -1 Alchemy, which also leaves that species + background a bit worse off. All three are no longer recommending Alchemist after first choosing the species. In return, I'm tentatively adding Vampire to the list of those recommended Alchemists. They went from +1 Transmutations plus -1 Poison to +1 Alchemy, which makes for a decent enough start- note that Vampire is already recommended Ice Elementalist and Earth Elementalist, both with +0 apts in the corresponding elements. They have -3 Conjurations and -2 Fire, but +0 Air should allow reasonable Mephitic Cloud casting, and they can still easily throw around Olgreb's Toxic Radiance. Whenever they find it, they'll also be good casters of Alistair's, Eringya's, and especially Yara's given spells. -------------------------------------------------------------------------------- fc7f089eb7 | regret-index | 2024-01-02 17:08:14 -0330 Very slightly trim Ice Cave and Ossuary ranges Prior to the introduction of Depths, the Ice Cave difficulty split in D was a coinflip on a random midpoint floor of D (D:14 or 15) and always set to hard when deeper than that. The coinflip was removed in b4d244a, but 183a740 reintroduced the notion by making D:14-15 contain hard ice caves. This was done due to the bottom of D being not very far away from having to explore the Lair branches themselves, where those are always set to hard. Over time, there's been confusion about which of those floors contains hard ice caves- the D:13-14 threshold neither uses the very last floor of D, nor does it stop at the thresholds use for placing Orc or Vaults. It especially doesn't help that at the current juncture, in-game nothing is actually explained about harder ice caves outside of noticing what particular monsters one faces- it mostly matches to specific branch ranges, but falters on this exact point. While there's been discussion about using different names for features and the sidebar for distinguishing this difficulty split ("ice grottos"?), there's also been some discussion about how ice caves strangely stretch out one element for a long chunk of the game itself, to the point of using specific ugly thing colours, draconians, and monsters mostly unique to V or Cocytus. It doesn't help that there's not any time gap between most of when one can encounter easier versus hard ice caves, either. While I actually have some interest in stretching out the easy versus hard portal concept further in the future, most of it would feature much wider divides than D:13 versus D:14, anyway. With all of this considered, I'm cutting out the D:14 and D:15 ice cave spawns entirely- it should introduce a tiny bit of a gap, reduce the pressure ice caves have for spawning so often, and removing the confusion for 0.31 which floors of D can contain which ice caves difficulties. Also. Ossuaries are in a very awkward part of the game in some ways- a D:4 character and a D:8 character can be very far apart just in terms of finding chain / plate, a non-starter weapon, or being able to reliably cast a L3 or L4 spell instead of L2. While it's good to feature them early as a portal to shake up the most-often-seen early game, and since they got so such a recent rebalancing and set updates, later ossuaries still rarely feature any much for threats. In lieu of adding idiosyncratic difficulty scaling to the lot of them, I'm instead trimming the very last floor of ossuaries for now- it makes their range the same amount of floors as Sewers, and the deathrate for D:8 ossuaries over the past three versions is a paltry ~0.5% anyway. This comes with very slightly more chance to see Ossuaries on D:6 and D:7, to somewhat make up for the lowered overall Ossuary count. -------------------------------------------------------------------------------- 005a376ed2 | regret-index | 2024-01-02 06:16:14 -0330 Trim off a bit of Kirke and Josephine's depths Both of them have current killratios very weak in Lair branches, and they both spawn much earlier currently in Lair itself. Josephine doesn't really need the first floor of any of the Lair branches, where wraiths will completely fall off- it's probably a remnant of when she got the standard variable necromancer bands and before she was moved to also spawn in Lair. Meanwhile, it's thematic to have Kirke in Shoals, but she doesn't need to keep spawning past the first floors of any of the Lair branches when she already has D and Lair as placements themselves. -------------------------------------------------------------------------------- 5ff9445e89 | regret-index | 2024-01-02 02:42:28 -0330 Alter more branch vault fanciness * Stone walls in Zot by default now match the wall colours of the Zot floor they're on. There's interest in getting much fancier tiles for Zot stone eventually, but this should help it a little for now. * The new stone walls and floors in Depths have been adjusted in miniscule, slightly more varying amounts. -------------------------------------------------------------------------------- e431911d44 | regret-index | 2024-01-02 02:04:09 -0330 Once more, yet more, widespread vault review Header house style consistifying, redundant line cleaning, so on and so forth. Of note: * Depths entrances are now the other main category of vault that place any of the new Depths stone floor tiling and columns. * Nerfed volcano_village's rare chance to place three or more hell hogs. * Burial acolytes are more consistently tagged patrolling (to try to stay with their zombies) and aren't placed on D:4 anymore. * There's been some concerns that Brain Bite is a pretty complicated mechanic to be mostly showcasing so early as Sewers with little other chance to read or see it. To offer other chances for newer players to parse the mechanic with less pressure, there's now a rare chance each in two Xom overflow altars and a Trog overflow altar to see them in early D, but nowhere else of note. * The old orb chamber minivaults, which are currently acceptably very dangerous in terms of just filling the old orb guardian positions with random floor spawns, now consistently have different floor tiles and colours as a bit of warning in advance they're very dangerous. Some fraction of them had magenta stone glass, but not all of them, so it might as well be consistent between the each of them. * spin_cycle gets another update to keep Lair branch out-of-depths (spriggan berserkers, salamander tyrants) out of the D:15 spawn and refocus it back to intelligent bands as was the explicit point of the long depths-scaling band-making function. * Spider ends no longer use a generic grey brick wall tile for stone, since Spider got branch-unique tiles in 5baa6b7 and we might as well actually use those in their main branch use. (This also means no WALL_SANDSTONE in the tomb end, since most other uses of that are for rock walls and not stone anyway.) * nicolae_gadget_shop now has 4 items, not 8. The current rotating sets for evocables make it very awkward to take most of the entire dungeon's miscellaneous evokers inventory in one possibly very early shop. * Louise in Depths Abyss entrances has been replaced with double occultists, rather than moving her far too late than she should be. Should work on a quick batch of variety for that neglected set, maybe. * _crystal_crosses_colossus is now less symmetric (with one open "arm"), has an updated monster set for all the newer monsters since its conception, and is also a rare option to spawn on D:15. * wizlab_cigotuvi offers slightly less potions of mutation, no longer offers beast talismans, and makes the lower tier talismans randarts. * door_vault and its variation's opaque runed door outside is now transparent (and runed). This doesn't effect the actual inside disconnected doors, which are still opaque and not revealing the contents. Shouting isn't strong enough to reveal the insides, though any louder source will, but this was already somewhat lost after scrolls of revelation were added anyway. A lot of the newer playerbase has been trained to only care about the now very common clear runed doors, while there's only about two vault sets and one regular one using opaque runed doors at this current juncture (and the former two are now losing it). It's still plenty of a mystery and a joke, if not more so, to see a box of one big runed doors containing only regular doors at first glance. * Bog mummies have a placeholder tile of the old bog body tile by Bloax rather than mixing mummies with spells and mummies without them distinguished in tiles solely by a floating title / sidebar difference. -------------------------------------------------------------------------------- 618ab1f346 | Nicholas Feinberg | 2024-01-01 14:15:28 -0800 Restore ribbon worm regen (Lici) Still too easy to cruelly pelt them with stones from max range elsewise. -------------------------------------------------------------------------------- de110550cb | David Lawrence Ramsey | 2024-01-01 13:34:16 -0600 Fix spacing. -------------------------------------------------------------------------------- 487c6999dc | DracoOmega | 2024-01-01 14:10:31 -0330 Remove a left-over reference to Ghost Moths healing from draining gaze (They stopped doing this against players a little while ago, but still could heal from draining other monsters) -------------------------------------------------------------------------------- eeface34f9 | DracoOmega | 2024-01-01 14:10:31 -0330 Very, very slightly boost the base HD of mana vipers -------------------------------------------------------------------------------- 7a8a475ec2 | DracoOmega | 2024-01-01 14:10:01 -0330 Have AF_ANTIMAGIC apply 50% more stacks to monsters with none The antimagic formula is kind of lopsided, in that short durations of the effect also have dramatically reduced effectiveness even for the brief while it lasts. It's been suggested that the formula itself could use some revisions, but I'm reluctant to touch something that upset the balance of player antimagic weapons so close to freeze. This commit is MOSTLY aimed at boosting Summon Mana Viper for players - it doesn't affect the player behind hit by them, or antimagic weapons at all. But ideally it makes it a bit easier for the viper to apply enough antimagic to actually do something without also boosting its damage. (Mana vipers themselves are slated for a possible rework in 0.32, but this can act as a stopgap until then) -------------------------------------------------------------------------------- 0319aaedb4 | DracoOmega | 2024-01-01 13:57:35 -0330 Greatly increase Laughing Skull spawn rates in late-D and Crypt For some reason, they were essentially the least common monsters in the normal spawn list for both places (and vanishingly unlikely in D). If we're going to add a shiny new monster, let's let people actually encounter them! (Band placement means that the Crypt ones will be a lot nastier than D, if anyone is curious from the numbers) -------------------------------------------------------------------------------- 1a631d31ac | DracoOmega | 2024-01-01 13:57:35 -0330 Update Passwall's description to include the new AC bonus And also rewrite a little, since I think the old description implies to new players that you get more movement control in the rock than you actually do. -------------------------------------------------------------------------------- 5a0b83f448 | gammafunk | 2024-01-01 01:01:23 -0600 fix: Handle bad plus values in item specs When making weapons or armour via an item spec, don't allow plus values that would crash (over 30 on armour worn by monsters) or cause item error messages (over 30 on weapons or armour). These plus checks should be unified and include items for which plus does nothing, but I'm not doing that now, since avoiding wizmode and monster crashes is the main goal. I've also made the monster armour assert checking the plus use <= 30 as its condition instead of < 30, since the former is used by debug_item_scan(). -------------------------------------------------------------------------------- 569d6c7dce | David Lawrence Ramsey | 2023-12-31 20:09:23 -0600 Move Agony spell quote to Curse of Agony. And make Agony use it too, since it's the monster version of the same spell. -------------------------------------------------------------------------------- 0302df589c | David Lawrence Ramsey | 2023-12-31 19:01:18 -0600 Fix erroneous comment. Inugami phantom mirror duplicates don't give a penalty if they die, but they're not the same as inugami clones. -------------------------------------------------------------------------------- 69dc257577 | Nicholas Feinberg | 2023-12-31 14:37:02 -0800 DELETEME -------------------------------------------------------------------------------- ad166cc88d | Nicholas Feinberg | 2023-12-31 14:33:39 -0800 Describe monster explosion damage (regret-index) -------------------------------------------------------------------------------- f4f160f642 | DracoOmega | 2023-12-31 16:22:46 -0330 Fix a crash (hopefully) -------------------------------------------------------------------------------- 8c38f09004 | David Lawrence Ramsey | 2023-12-31 13:29:44 -0600 Give EEs Conjurations instead of Alchemy (#3444). Since Passwall (now level 3) no longer uses the latter, and Stone Arrow (level 3) uses the former. -------------------------------------------------------------------------------- cc20369e73 | DracoOmega | 2023-12-31 15:53:52 -0330 Fix Vehumet not supporting Sticky Flame (Oneirical) After I moved it out of conjurations, I forgot to give it the destructive flag. -------------------------------------------------------------------------------- e6ad0bb64a | Nikolai Lavsky | 2023-12-31 22:04:40 +0300 feat: darken non-present monster resists on webtiles As a followup to 0c084823, this commit adds support for colour tags in descriptions. -------------------------------------------------------------------------------- cae8a03998 | DracoOmega | 2023-12-31 15:30:13 -0330 Adjust some monster tracer behavior to be friendlier to the player Previously, while monster tracers factored in the resists of other monsters when calculating friend/foe hit values, they would never do this for players. This meant that allied monsters wouldn't realize that bolts of draining/venom were harmless to undead players and refuse to ever fire them through the player (although this is a behavior we constantly see them do with other monsters). Since it should be entirely helpful to let allies do this, allied monsters now consult harmless_to_player() when determining whether to worry about hitting you. Additionally, allied monsters with penetrating beams of any kind that are NOT harmless to you, will stop their shot immediately before it would hit you - passing through as many monsters as possible up to that point. This sort of behavior was attempted in 72347fce6 and then reverted in 98e7288b7fd because it stopped all allied piercing beams at their first target regardless of whether this mattered. This commit attempts to be a little more specific and only stop them when it DOES matter. (Short-circuiting beam tracing like this feels just slightly sketchy to me, but in preliminary testing, it appears to work fine) -------------------------------------------------------------------------------- 330b8c2b23 | regret-index | 2023-12-31 03:44:38 -0330 Reduce charmed / bribed allies' reckless disregard for collateral damage There's some old, odd code that reduces the foe_ratio value for monsters casting spells- basically, how worthwhile it is to hit allies versus hit foes, by evaluating them against each other with collective HDs and XLs- if the caster has an only temporary attitude change. This was originally meant as flavour and balance for both Summon Greater Demon (where successful summons were hostile but temporarily charmed) and Control Undead (which was never permanent)- if they already will become hostile eventually, then they could hypothetically be fine with "accidentally" hitting the player. Since we have neither of these any more, it is instead a strangely opaque component of wands of charming and Gozag bribes that those affected will ever-so-helpfully hit almost any number of players and allies as collateral damage. This is unideal behaviour for being completely unexpected as a downside to either, so this special-casing has been cut. TODO: There's some interest in further reducing the capacity for allies of the player to hit the player- see 98ec557 and 98e7288. This would need a significant undertaking to rewrite the current use of foe_ratio due to it being set constantly elsewhere and also being used for hostiles versus the player as well as allies alongside the player. Removing it entirely without a lot more supporting code makes either monsters be willing to hit as many others as possible if this also hits the player, or it'd be possible to stand by a rat at all times to prevent any spells being cast. Either way, it's still quite fundamental for how fire giants, de sorcerers / high priests, and dr scorchers don't fireball themselves. Probably this could all do with some preliminary work, but not so close to 0.31's release. -------------------------------------------------------------------------------- 7bd419a0e5 | Nicholas Feinberg | 2023-12-30 10:59:48 -0800 Don't lungepage recklessly (Hal) If you rampage toward a monster and then kill it with lunge, don't continue by moving into its tile. Even if we prevented moving into deep water or lava, this could still result in the player moving into traps, dangerous clouds, or exclusions, all of which seem like potentially nasty surprises. Let's settle on a destination tile when we start the move and then stick to it. -------------------------------------------------------------------------------- 0d58f7cc60 | Nicholas Feinberg | 2023-12-30 09:11:49 -0800 Fix weird name bugs (Cilian) If you enter an invalid name ('/') then hit * to randomize your name, clear the "that's a silly name!" text and state. Don't allow hitting * to randomize name while being prompted about overriding an existing save. Feels nonsensical and surprising - answer the question first! -------------------------------------------------------------------------------- fc755a3201 | David Lawrence Ramsey | 2023-12-30 09:20:39 -0600 Add extra zombie quote (yrdzrfxndfvh). Closes #3403. -------------------------------------------------------------------------------- 274590c540 | David Lawrence Ramsey | 2023-12-30 09:20:33 -0600 Add dreamshard necklace quote (yrdzrfxndfvh). -------------------------------------------------------------------------------- 4574a07c27 | David Lawrence Ramsey | 2023-12-30 08:50:00 -0600 Fix a few quotes. Tweak the bracketed part of one Order of the Stick quote, properly mark one Calvin and Hobbes quote as spoken by Calvin, and make both the Calvin and Hobbes quotes use the same style. -------------------------------------------------------------------------------- b1e071b2f0 | David Lawrence Ramsey | 2023-12-30 08:50:00 -0600 Add Brain Bite spell quote. -------------------------------------------------------------------------------- 91cac6e7f7 | David Lawrence Ramsey | 2023-12-30 08:04:35 -0600 Update docs for humans' new +0 Exp mod. -------------------------------------------------------------------------------- 43313d8a59 | DracoOmega | 2023-12-29 23:47:04 -0330 More heavily nerf Blazeheart Golem The golem seems to be pretty popular! It also seems to be too strong. Since the exploding part of it is the most mechanically flashy, I've aimed most of this nerf at its melee attack. It loses AF_FIRE entirely. It gains a bit of base attack damage in exchange, but this should still be a significant reduction in damage. Its attack now also removes 1/3 of its hp on impact, instead of 1/4, meaning it will fall apart more often and also need to be recast more often for the same damage output. I've also reduced its AC a little (though I'm not really sure much this matters in either direction) Let's see how it feels after this. -------------------------------------------------------------------------------- 0899f109bd | DracoOmega | 2023-12-29 23:47:04 -0330 Mildly nerf Call Canine Familiar Primarily by increasing its death timer from 6-11 turns to 13-21. Without the draining involved, this was likely overly generous. If the player feels 'stranded' without it sometimes, they is probably an acceptable problem for letting the dog die. Also reduce its AC by 1, and its attack by ~1 at higher power. -------------------------------------------------------------------------------- 8d97d346d7 | DracoOmega | 2023-12-29 23:47:04 -0330 Reduce duration of Bolt of Devastation's Will/2 against players (acrobat) It mirrored the duration of Strip Resistance, but being much easier to apply, it could possibly stand to be shorter. -------------------------------------------------------------------------------- af9025df8f | DracoOmega | 2023-12-29 23:47:04 -0330 Buff Staff of Earth melee damage Staff of earth's gimmick was that its melee checked triple AC, but had higher base numbers than other enhancer staves. In practice, this mostly meant that in all practical situations, it was the weakest staff - and often significantly worse than the other AC-checking staff, conjurations. It used to require ~20 earth / 15 evo just to tie with a staff of conj against AC 5 enemies, when the vast majority of lategame enemies had significantly higher than that. Conjurations was the 'generalist' staff - rarely the *best* staff against an enemy, but always far from the worst. The enemies earth was best against barely existed - or were too low threat to matter. Enemy AC tends to just be too uniformly high in later parts of the game. So instead, let's replace the 'resist' it checks with 'is the target flying'. This draws on analogy with Shatter, while being much simpler: flying targets take 1/3 damage, but its base damage is higher than conjurations (though moderately reduced from its value before this commit). This means it will be better than conj against all enemies which do not fly, and substantially worse against any that do - much like staff of fire is much better than conj against all enemies without rF and much worse against those that have it. -------------------------------------------------------------------------------- 1724605f31 | DracoOmega | 2023-12-29 23:47:03 -0330 Buff Naga Ritualists A generally underperforming monster, with a flashy spell that had extremely low numbers. Old ritualist OTR did 1d4 impact damage + 2d3 poison per turn to the player, for a couple of turns. This is now raised to ~1d6 + 2d7 poison per turn (and may last marginally longer). Virulence also got a slightly higher power multiplier. -------------------------------------------------------------------------------- d120b57d70 | DracoOmega | 2023-12-29 23:47:03 -0330 Buff/refactor Concentrate Venom / curare and beam poison application Concentrate Venom had a bunch of strange wrinkles to it. It straight-up replaced the poison application of poison spit and AF_POISON attacks with curare code, which *itself* had a few odd wrinkles. Some examples: -Monsters with any rPos were immune to curare, so enemies with concentrated venom were flatly nerfed against them (as they would normally have had a 1-in-3 chance of applying poison) -Monsters could sometimes inflict more poison with their attacks by default than curare could, so concentrate venom could make them apply LESS poison -Curare had a 1 in 3 chance to apply to a player with rPois, but the poison from it applied through a codepath that checked that 1 in 3 again, even though the direct poison damage did not. Meaning 1 in 3 hits of curare wouldn't actually poison the player at all, even while otherwise affecting them. -Concentrated poison spit wouldn't print a 'You resist.' message even when you DID resist all its effects (and when a non-concentrated version of the same attack would print a message) -Curare had a 'levels' argument and additional code around this, despite the fact that in all cases, levels was 2. (This is a remnant from when you could needlestab - something removed in 2018) Beyond all its weirdnesses, concentrate venom also didn't feel very impactful. So this commit includes some buffs as well as cleanup. A spell/attack affected by concentrate venom now applies the full poison it would have originally dealt IN ADDITION to the curare effect. AF_POISON attacks (which normally trigger 1 in 3 times) now trigger 1 in 2 times with the buff active. And the buff itself has a longer duration. Curare code is cleaned up a little, there's no longer the weird double-reduced change of applying only the poison to an rPois player, and I also changed the message for monsters being hit by curare to more closely match the message against players (instead of '[monster] convulses' which was oddly close to holy wrath.) Additionally, I increased the amount of poison-over-time that BEAM_POISON applies to the player. I don't expect this to have too dramatic an effect (a player can always drink !curing if rolls are bad), and should have the biggest effect in Snake, which could probably use a gentle buff. -------------------------------------------------------------------------------- 81a9d5bdf2 | Nicholas Feinberg | 2023-12-29 17:04:30 -0800 Turn off splinters' piercing There's no obvious reason that they pierced (their description and theme didn't read as obviously piercing in the way that a Bolt of Fire does), and there's no mechanical need for them to, either. (The piercing effect on metal splinters dates back to pre-Stone Soup!) -------------------------------------------------------------------------------- 1b70e30f2a | Nicholas Feinberg | 2023-12-29 15:52:39 -0800 Add a TODO -------------------------------------------------------------------------------- 0fffd28697 | Nicholas Feinberg | 2023-12-29 15:49:55 -0800 Fix the build..? (geekosaur) -------------------------------------------------------------------------------- 7df4bd0979 | Nicholas Feinberg | 2023-12-29 15:45:56 -0800 Fix: don't fuzz pals' tracers if invis (acrobat) Just as the player can see their invisible allies, let your allies know where you are, even when you're invisible. Resolves #2892. -------------------------------------------------------------------------------- 28235c32bf | Nicholas Feinberg | 2023-12-29 15:31:29 -0800 Add Manifold Assault animation (Jeremy) -------------------------------------------------------------------------------- 961fd35ebc | Nicholas Feinberg | 2023-12-29 11:37:07 -0800 Enable WJC + rampage Not really sure why this was disabled. Reverts 3b7de120b3c. -------------------------------------------------------------------------------- 2966ba1ece | Nicholas Feinberg | 2023-12-29 11:18:17 -0800 Refactor kpath (gammafunk) Try to make the logic clearer. -------------------------------------------------------------------------------- 88dc79e8f5 | Nicholas Feinberg | 2023-12-29 11:08:09 -0800 Remove who (geekosaur) -------------------------------------------------------------------------------- bad02465ae | Nicholas Feinberg | 2023-12-29 11:00:39 -0800 Cut volcano_overflow When one creates bold and innovative gimmicks, sometimes they work out. This was not one of those times. -------------------------------------------------------------------------------- 47440f1d08 | Nicholas Feinberg | 2023-12-29 10:58:59 -0800 Make collision death messages less awkward Arguably! -------------------------------------------------------------------------------- 395ea6166f | Nicholas Feinberg | 2023-12-29 10:53:38 -0800 Fix: know kows -------------------------------------------------------------------------------- 86c3eabce0 | Nicholas Feinberg | 2023-12-29 10:48:25 -0800 Double naga poison spit dice (regret-index) Instead of doing nothing, sometimes do something. -------------------------------------------------------------------------------- b9fef29221 | Nicholas Feinberg | 2023-12-29 10:48:25 -0800 Re-reduce ribbon worm XP Match old worm XP. Meant to include this in the original ribbon worm commit but forgot to amend. -------------------------------------------------------------------------------- a2f466ef2e | DracoOmega | 2023-12-29 14:23:49 -0330 Fix new ghostly icon on Webtiles (Ge0ff) -------------------------------------------------------------------------------- cbffd4cd76 | DracoOmega | 2023-12-29 13:59:05 -0330 Repurpose unused simulacrum status icon for lost soul revives Due to a bug, this icon was never used for simulacrum anyway, so I have recolored it to repurpose as an icon indicating things that have been revived by a lost soul (and thus are now undead, cannot be revived again, etc.) since it already looked so appropriate for that. -------------------------------------------------------------------------------- bdf0704f8b | gammafunk | 2023-12-29 09:51:31 -0600 fix: Trove logic for checking skills (CarefulOdds, CipHuk, WizardIke) The function trove.spell_skills had typos in skill names dating back to 2010, and these functions are use in veto checks for troves that give specialized equipment. I haven't investigated how this code wasn't giving these errors all this time, but this commit fixes the skill names. Additionally I've added the Ranged Weapons skill to the weapon skill check, since the relevant weapon troves are happy to give out ranged weapons. I've also reindented the lua and slightly refactored. Fixes #3430. Closes #3434. -------------------------------------------------------------------------------- a9fbd17ea5 | regret-index | 2023-12-29 06:09:02 -0330 Add Sastreii's new Depths tiles A branch-specific version of stone for all of Depths, to which I added a quick plainer variant to reduce a bit of noise when a lot of stone walls are visible at once, as well as new ground floor tiles and dramatic columns for statue-replacements, now employed in most of the ever-iconic Depths encompass vaults. The floor tiles and columns hould be reasonable for other vaults, old and updated or new, to specify or leave out as their theme fits. It should be used sparingly for particularly dangerous and large vaults, though. Also, to try to help with branch appearance differentiation, don't use these tiles or columns outside of the context of Depths itself. (Maybe sometimes the Depths entrance in D would be fine?) (This also came with a little bit of vault clean-up. Should do some more for the sake of gems and vault header standardization eventually...) -------------------------------------------------------------------------------- e0622b2318 | Nicholas Feinberg | 2023-12-28 23:05:04 -0800 Expel worms' innards Worms have long been a troubled monster. As a slow melee monster, they tended to do approximately nothing to any but the most arrogant and foolish players. Careful players would simply kill them from range with rocks or whatever else comes to mind. (See eg 8f025e602fb57e for an attempt to partially address this.) Retheme them to ribbon worms (real life creature) and make them ensnare the player. Reduce their damage and remove their fast regen as compensation. I'm very unsure whether this will do anything, but it seems worth a shot. -------------------------------------------------------------------------------- b37faac87e | Nicholas Feinberg | 2023-12-28 22:35:45 -0800 Maybe fix a crash -------------------------------------------------------------------------------- 3db28f3c96 | Nicholas Feinberg | 2023-12-28 22:11:24 -0800 Update the mailmap for dolorous -------------------------------------------------------------------------------- 79c7dd0eeb | David Lawrence Ramsey | 2023-12-28 23:38:59 -0600 Add more colours of Oni player base tiles. Since oni also come in yellow, green, and black. -------------------------------------------------------------------------------- 358e972e7c | David Lawrence Ramsey | 2023-12-28 23:26:23 -0600 Allow polymorphing monsters into uglies. All the other ghost demon types are unsuitable for polymorphing (unique, undead, nonliving, flagged with M_NO_POLY_TO). Pan lords are technically not unique, but they might as well be. -------------------------------------------------------------------------------- 63d5b5648c | David Lawrence Ramsey | 2023-12-28 23:26:00 -0600 Allow cloning of uglies and dancing weapons. Ghost demon monsters can now be cloned. As for the others, named monsters still aren't clonable, which rules out Pandemonium lords, player ghosts, and player illusions; conjured monsters still aren't clonable, which rules out spectral weapons; and inugami are explicitly not clonable because you don't get the usual penalty if the inugami clone dies. -------------------------------------------------------------------------------- b6db4fbaf3 | gammafunk | 2023-12-28 23:05:38 -0600 fix: The ikiller field for aspiring flesh These attribute their ikiller to the protean progenitor that spawned them, but the ikiller field should have prefixes like "spawned from" etc stripped so just the indirect monster name remains. This prefix didn't match any existing pattern of the ones we already stripped from ikiller, so I'm adding a new pattern stripping rule. -------------------------------------------------------------------------------- 96aa2eae3f | David Lawrence Ramsey | 2023-12-28 22:28:53 -0600 Consistently capitalise Human in species descs. "Humanoid" is left unchanged. -------------------------------------------------------------------------------- 39c5316367 | David Lawrence Ramsey | 2023-12-28 22:28:21 -0600 Fix changelog typo. -------------------------------------------------------------------------------- ec74395fc0 | David Lawrence Ramsey | 2023-12-28 22:28:21 -0600 Consistently spell the plural of simulacrum. -------------------------------------------------------------------------------- e8925a3f95 | David Lawrence Ramsey | 2023-12-28 22:28:21 -0600 Fix typo in new Sculpt Simulacrum description. -------------------------------------------------------------------------------- f9f310993c | David Lawrence Ramsey | 2023-12-28 22:15:49 -0600 Tweak description of At MP-regen (Implojin). -------------------------------------------------------------------------------- 95e4157dad | David Lawrence Ramsey | 2023-12-28 22:15:49 -0600 Mention Armataur rolling MP-regen in the manual. -------------------------------------------------------------------------------- be66496138 | DracoOmega | 2023-12-28 23:14:49 -0330 Unbrace Will I ever remember to do this before I push things? I'm guessing: no -------------------------------------------------------------------------------- 6cad3da956 | DracoOmega | 2023-12-28 23:11:19 -0330 Actually tag Sculpt Simulacrum as unholy (Darby) -------------------------------------------------------------------------------- d0b3b2ae9f | DracoOmega | 2023-12-28 23:11:19 -0330 Fix blazeheart golem being ironically unable to follow slow players (Darby) Due to some timing weirdness, blazeheart golems could keep up with normal speed players, but were entirely unable to do so for slow ones. (This is essentially because moving sufficiently slow would cause multiple turns to pass by the time the golem got another action, at which point it would go "Oh! The player isn't adjacent to me and hasn't been for several turns! I should turn off." This check is now from the golem's time perspective instead, and is approximately "If the player was next to me at either the start or end of my turn, I remain active." and it only turns off after both checks are consecutively false. (This probably also plays slightly nicer with its slow attack?) -------------------------------------------------------------------------------- 8901a676bb | DracoOmega | 2023-12-28 23:11:19 -0330 Timeout binding sigils that leave the player's sight This isn't intended so much as a nerf as it is to prevent a complained-about situation of an unseen monster stumbling onto a sigil you left behind and then showing up for the first time with swiftness on it. -------------------------------------------------------------------------------- 2dea6e066b | DracoOmega | 2023-12-28 23:11:19 -0330 Don't crash on placing boulders outside of casting Brom's There's been some desire expressed to use stationary ones as decorative features in vaults. And at any rate, it probably shouldn't crash the game if you place one in wizmode by accident. -------------------------------------------------------------------------------- 867c55e3b0 | DracoOmega | 2023-12-28 23:11:19 -0330 Don't drunken brawl if your weapon would place you under penance (Darby) -------------------------------------------------------------------------------- 9c3b9a8043 | regret-index | 2023-12-28 22:13:16 -0330 Seriously update docs/develop/spells.txt This is an immensely old document, referring to many removed schools and removed spells, mostly unchanged from seven years ago in f9017aa. Maybe it's mostly unused, but it's still sitting around in the source. I'm giving it a pretty quick first draft update. Almost anything is better than still referring to Charms or demon-summoning or the time when like 66% of Earth spells were Transmutations. At some point, maybe one of the devs who originally worked on positional magic can update this further with more precise philosophy, but it's at least a document actually attached to Crawl compared to version-specific Github pages. -------------------------------------------------------------------------------- 324eae3c28 | Nicholas Feinberg | 2023-12-28 16:14:20 -0800 Tighten various gem timers The intent is that gems should be reachable by average players, but shouldn't be routinely encountered during 'normal' (full clear, non rushing...) play. Let's poke at some gems that have seemed a bit too easy to pick up thus far. -------------------------------------------------------------------------------- 74ab47f370 | Nicholas Feinberg | 2023-12-28 16:09:53 -0800 Cut accursed CMD_TOGGLE_TRAVEL_SPEED Mindless busywork. Begone! -------------------------------------------------------------------------------- cda7ceedc9 | Nicholas Feinberg | 2023-12-28 16:09:52 -0800 Match ally speed outside combat (elliptic) As a UI convenience, make allies speed up to match the player's move speed if there are no enemies nearby. This is a common minor pain point for players (needing to hit ctrl-t to match travel speed), and there's no reason players should need to worry about it. This should hopefully be mostly transparent and unnoticeable for players. -------------------------------------------------------------------------------- 8a4046af8c | DracoOmega | 2023-12-28 18:14:28 -0330 Don't place players under penance for blazeheart golem's explosions (Darby) Similar logic to how guardian golem used to work - you still get xp for the explosions, but your god will not be bothered if an ally was careless enough to stay in the blast zone. -------------------------------------------------------------------------------- d7e1f54061 | DracoOmega | 2023-12-28 18:14:28 -0330 Make Sculpt Simulacrum less buggy when trying to sculpt krakens (Darby) Since kraken can only occupy tiles that blocks of ice cannot, it would look like you were making a simulacrum like normal, and then it would disappear in a puff of smoke when it came time to 'hatch'. Now instead, if the simulacrum that is being created cannot occupy the ice block's tile, it tries to pick a random nearby one instead. Kraken simulacra are far too much fun to simply forbid people make! -------------------------------------------------------------------------------- 0872b9eb7f | DracoOmega | 2023-12-28 18:14:28 -0330 Don't turn friendly blocks of ice hostile when hit (CarefulOdds) The simulacrum that came out of it would still be friendly, but a block of ice should not appear especially troubled by anything you do it. -------------------------------------------------------------------------------- 48da474f17 | DracoOmega | 2023-12-28 18:14:28 -0330 Don't let Sculpt Simulacrum produce simulacra of tentacles (Darby) More confusingly, the kraken tentacle simulacra would also be using the kraken simulacrum tile instead of their own?? -------------------------------------------------------------------------------- d74043ad92 | DracoOmega | 2023-12-28 18:14:28 -0330 Don't create a flayed ghost when killing your own martyr (Darby) Hitting them would normally cause them to instantly disappear, like most summons, but if you did enough damage to kill them in a single attack, you'd still get a flayed ghost out of the deal. -------------------------------------------------------------------------------- e2d6d42b48 | Implojin | 2023-12-28 15:24:21 -0600 fix: Remove At long tongue from the manual -------------------------------------------------------------------------------- 6dbd80e900 | Implojin | 2023-12-28 15:03:59 -0600 fix: rcfile autopickup option gem compat (Ge0ff) Previously, setting the `autopickup` rcfile option always resulted in gem autopickup being disabled, no matter what setting was used. The code in `read_custom_option` initially disables autopickup for all item types as it runs, and then re-enables pickup for each item type through `item_class_by_sym`. That function previously had no glyph mapped for OBJ_GEMS, so any time it tried to parse the autopickup option, gem autopick would be disabled. This commit fixes that by mapping unicode U'\x2666' (♦) to OBJ_GEMS here, to match the existing glyph for gems in viewchar.cc, which should allow e.g. `autopickup += ♦` to work as desired. -------------------------------------------------------------------------------- d420192249 | DracoOmega | 2023-12-28 03:29:04 -0330 Move LRD back below Stone Arrow for Servitors (acrobat) I have been sufficiently convinced that this might encourage certain characters to avoid learning LRD at all, which was not my intent. -------------------------------------------------------------------------------- 9e9b236d67 | DracoOmega | 2023-12-28 03:28:24 -0330 Various updates to the manual Concerning the Alchemy merge and Oni. -------------------------------------------------------------------------------- 53b6572822 | DracoOmega | 2023-12-28 01:58:21 -0330 Unbrace -------------------------------------------------------------------------------- 13c63e15e9 | DracoOmega | 2023-12-28 01:41:40 -0330 Make Spellforged Servitor a little less gameable, nerf mildly The fact that Spellforge Servitor could inherit a player spell that had a whopping ~50% fail rate meant that it was often correct to learn a spell that you could never viably cast. And since servitor spellpower is based on the power of the summon, rather than the spell it's casting, this barely mattered. Plasma Beam was the most common offender, since it doesn't even share a single school with Servitor. Now the player needs at least a 20% success rate in a spell for servitor to cast it. That's still a pretty high fail to use on a conjuration, but not outside the realm of someone trying it. This also nudges servitor's HD in player hands down just slightly. It should still be a very strong spell. (Also, I moved LRD above Stone Arrow in the spell priority list, since I think that normally the player would prefer it cast that AND it's higher level so it's probably not unintuitive that it might?) -------------------------------------------------------------------------------- ca6d514eab | DracoOmega | 2023-12-28 01:41:40 -0330 Fix several Battlesphere targeting bugs, refactor, tweak slightly Battlesphere triggering was originally split into two functions: aim_battlesphere(), called immediately before the trigger spell fires, and trigger_battlesphere(), called immediately afterward. This was so that it could save the position of the player's firing target, in case that target died to the triggering spell. Since the changes several years ago to make battlesphere fire at a RANDOM target instead, this split was needless code complexity - we can simply pick a target AFTER the spell fires. In fact, doing so fixes a bug that could frequently cause the battlesphere to appear not to trigger for no obvious reason: if the random target it picked before the player spellcast was itself killed by the player spellcast. This was actually very common with AoE spells or against only two visible targets (a 50% chance to skip its turn whenever you kill one!) Battlesphere would also silently fail if the random target it picked was in line of sight of the player, but NOT the battlesphere itself - another situation relatively common when corners were combined with the battlesphere's idle movement. Now it considers only the player's los when picking a random target. Finally, after a target was picked, if there was no safe line of fire to it from the battlesphere's current position, it would attempt to find another nearby spot and shoot from there. But the search radius was smaller than how much ground it could cover in a turn, so it would sometimes silently fail while appearing to have a valid firing angle. It is still possible to fail in this situation, if the battlesphere ends up more than a full turn away from ANY viable firing position (often because the player is body-blocking most of them), but it still meaningfully improved. Additionally, I have tweaked the target select to prefer shooting at the same target the battlesphere shot at last turn - so that it essentially 'locks on' to a given enemy - even if the player has no control over which. It felt far too common for the battlesphere to spread its shots around uselessly, doing insignificant damage to multiple targets - now it should be a little more dogged about taking SOMETHING down. -------------------------------------------------------------------------------- f45dec508d | regret-index | 2023-12-28 01:39:23 -0330 Adjust a few newer enemies stats and placement * Laughing skulls go from animal to human intelligence to match the other emotional and non-emotional skulls, get a second pip of fire resistance to emphasize them more as fiery and for potential future other uses, and place a little earlier in D (absdepth 16-24 -> D:14 to absdepth 22). They seem to be working fine, if not particularly intimidatingly, so their earlier placement should be fine also. Late D is a weird spot currently that could always do with a little more tangible variety. (D freezing wraith chance was reduced a little in exchange.) * Arcanists place another floor up. While they've been in flux for a while, with quite a few different spell schools, they're also more than fine enough earlier considering the earlier vaults haven't shown to be too much of a problem at any point. (D hydra chance was reduced a little bit in exchange). -------------------------------------------------------------------------------- 9677d6cc8b | regret-index | 2023-12-28 01:27:31 -0330 Gloorx's level: (crawlers ->) weavers -> flayed / skulls (Ge0ff) While I'd still like to find another home for the very sparsely used entropy weavers, and they're a lot less harmless than demonic crawlers were, I'll admit the former are pretty tangential to Gloorx Vloq's current mix of skeletons, ghosts, miasma, poison, and torment. I'm swapping them out for a mix of the first two, barring more obvious options (and while there's only one summoning demon besides ynoxinuls). Flayed ghosts and laughing skulls both aren't too prominent in the immediately-comparable Tomb or Tartarus, the former has more percentage-based damage, and the latter has unique mechanics we can play more around with. -------------------------------------------------------------------------------- 3d8c94b372 | regret-index | 2023-12-28 01:01:09 -0330 Reflavour vitrify pie (gammafunk) Clear pies are too far away from parseable types of pie. While this one is a little niche still, it should work on both allergies and synonym grounds. -------------------------------------------------------------------------------- 61f1b55d25 | regret-index | 2023-12-28 00:46:02 -0330 Sort Throw Ally into the right alphabetical spots It used to be Goblin Toss when Robin was added, and never got moved to the right spot in the file when it was broadened for Polyphemus and iron giants. -------------------------------------------------------------------------------- 18695baee4 | regret-index | 2023-12-28 00:46:02 -0330 Buff vault lightning spires Lightning spires are one of the very few spell-sourced monsters that work reasonably fine outside of that spell's context- a very straightforward lightning statue. This is somewhat marred by the fact the earliest one encounters them is Swamp or Elf, followed by them appearing in Vaults, Wizlabs, Abyss, and Zot, yet their default HD is... 3. 21 HP and a 3d6 non-loud lightning bolt. A pretty sad threat level (a more resistant electric eel with a little better defenses?) for that usage. I'm buffing these vault spawn lightning spires by making their base HD 10, the equivalent of a max power Summon Lightning Spire cast- this gives them 3d13 bolts and an average of 70 HP. (Their base hp has been adjusted so this shouldn't affect the spell itself.) This should give them have a lot more of a point, wherever they place. -------------------------------------------------------------------------------- 54790a2f53 | Nicholas Feinberg | 2023-12-27 18:13:43 -0800 Remove ENCH_PURSUIT Obsoleted after e438bbe35ce7f90b92d4 (August 2023). -------------------------------------------------------------------------------- 2f8d4710b4 | Nicholas Feinberg | 2023-12-27 14:53:45 -0800 Simplify tutorial equip advice To reduce the number of keys new players need to learn, suggest using (e)quip and une(c)quip, rather than (w)ield, (W)ear, (P)ut on, etc. -------------------------------------------------------------------------------- 98d077343f | Nicholas Feinberg | 2023-12-27 14:28:24 -0800 Fix missing mpreg description For armataur upgraded rollpage. -------------------------------------------------------------------------------- de279c822b | Nicholas Feinberg | 2023-12-27 12:55:30 -0800 Fix Mad Mage Mauler align (Ge0ff) -------------------------------------------------------------------------------- 382a9587f0 | Nicholas Feinberg | 2023-12-27 12:45:42 -0800 Fix unused var -------------------------------------------------------------------------------- 60647507ee | Nicholas Feinberg | 2023-12-27 11:27:47 -0800 Copy pass on new spell descriptions Try to compact down longer descriptions and focus on info that players need. Sorry, Sculpt Simulacrula. We need a flavor text area for spells so we can put all the fun stuff about assaying biology and alchemists arguing... -------------------------------------------------------------------------------- 34aac30a23 | Nicholas Feinberg | 2023-12-27 11:13:15 -0800 Localize a constant -------------------------------------------------------------------------------- 9d21c19d62 | David Lawrence Ramsey | 2023-12-27 10:24:56 -0800 Fix spell description typos. -------------------------------------------------------------------------------- 4c6a1022df | Nicholas Feinberg | 2023-12-27 08:47:55 -0800 Slightly buff siphon essence Now that it doesn't affect rTorm monsters, it can be a bit stronger to increase its attractiveness in 3-rune games. Bump healing by 1/3rd. Could also decrease the MP cost, but I feel like the current 20MP cost is very cool and splashy... holding off on that for now. -------------------------------------------------------------------------------- e7282f2625 | Nicholas Feinberg | 2023-12-27 08:36:19 -0800 Fix: ShSh manuals under Zin, cont'd See comment. This code is bad! -------------------------------------------------------------------------------- 86286aae65 | Nicholas Feinberg | 2023-12-27 08:25:24 -0800 Fix: fewer ShSh man acqs under Z (Lici) Treat shapeshifting skill as useless for Zin for acquirement purposes. Probably transmutations should always have been marked in this way. -------------------------------------------------------------------------------- 4a97266263 | Nicholas Feinberg | 2023-12-26 23:31:48 -0800 Refactor chain petrify -------------------------------------------------------------------------------- 87ca8d402b | DracoOmega | 2023-12-26 23:50:16 -0330 Don't give player ghosts/illusions Animate Dead (regret-index) They can't cast it anyway. -------------------------------------------------------------------------------- 59d654bfca | DracoOmega | 2023-12-26 23:37:44 -0330 Fix !cancellation contamination (The Unspeakable) (#3424) Missing parenthesis meant potion of cancellation was accidentally giving you contamination most of the time. -------------------------------------------------------------------------------- 5f6a03739c | RypoFalem | 2023-12-26 20:39:36 -0600 Fix !cancellation contamination (The Unspeakable) Missing parenthesis meant potion of cancellation was accidentally giving you contamination most of the time. -------------------------------------------------------------------------------- 3ad46bb88a | DracoOmega | 2023-12-26 21:10:26 -0330 Fix missing spell description Oops >.> -------------------------------------------------------------------------------- d63ae51a8c | DracoOmega | 2023-12-26 20:24:08 -0330 Silence warnings about removed attack types -------------------------------------------------------------------------------- 8388f8c9e3 | DracoOmega | 2023-12-26 20:23:55 -0330 Teach monster about Pyre Arrow damage -------------------------------------------------------------------------------- 8e5c54c242 | DracoOmega | 2023-12-26 20:09:50 -0330 Fix several MORE custom books -------------------------------------------------------------------------------- ac69e1350c | DracoOmega | 2023-12-26 19:53:37 -0330 Fix a missed Guardian Golem reference from custom randbooks -------------------------------------------------------------------------------- 542172135e | Nicholas Feinberg | 2023-12-26 14:34:59 -0800 Show Curse of Agony in webtiles -------------------------------------------------------------------------------- 5259d7e80d | DracoOmega | 2023-12-26 18:50:02 -0330 Buff Petrify a little Reduce range slightly, but make it chain to up to 2 adjacent/connected hostile targets at 2/3 enchantment power. Player Petrify has been in an awkward state for a little while. It was the capstone spell of the Earth Elementalist starting book for quite a while, but was common for EEs to never make use it. Unreliably locking an enemy down this way has questionable utility for a blaster playstyle with the damage reduction involved. And while it can do decent work specifically as a stabber setup spell, it's unclear that it performs *enough* better from classic Enchanter spells to justify it being much harder to access due to non-overlapping schools. Back when EE started with LRD, there was obvious direct synergy (with being able to use AC-piercing LRD on a key target or blow up groups in absence of walls), but that ship sailed a while ago now. The hope here is that this will make the spell more interesting/usable as disruption tool for non-stabbers as well, without making it significantly better for stabbing individual key threats. (While I'd only intended to modify the player spell (with a slight renaming) and leave monster petrification unchanged, PleasingFungus has argued that it's simpler if they both work the same way and that the relatively minimal buff to the enemy spell is harmless. It's... probably fine? Though I am sure some people will be caught off-guard by getting petrified despite standing behind an ally...) -------------------------------------------------------------------------------- 62420d5c14 | DracoOmega | 2023-12-26 18:50:02 -0330 Standardize Passwall range at 3, move to level 3, give AC while using The variable power-based range on Passwall was awkward in a few ways, and this should make it a little less complex and more intuitive. Also grant the player an AC bonus while transiting with the spell, to make it feel a little safer and more tempting to use as an early-game escape, when the margins of life and death are thinner. -------------------------------------------------------------------------------- e664984be9 | DracoOmega | 2023-12-26 18:50:01 -0330 Move Summon Ice Beast to level 3 This spell was hurt greatly by changing its cap from 3 to 1. Ice Elementalist still gets occasional use out of it since sometimes any body is better than no body, but it's regularly skipped over even in its starter book and just doesn't compete very well against multiple other summons of its level range. Perhaps at 3 it will be more appealing again. -------------------------------------------------------------------------------- 94f3faafae | DracoOmega | 2023-12-26 18:50:01 -0330 Fugue tweaks Prevent capstone pain damage from hitting firewood. Make the 2d5 capstone pain damage scale with spellpower, starting lower at 2d3 (up to 2d7 at 100 power), partially to compensate for how much easier it is to trigger the capstone at low skill via Kiku wretches. Perhaps this complication is unnecessary? (Or perhaps it would make more sense to trigger pain on only some subset of hits and make it hurt more when it does, for less message spam?) Add the ambient noise-making message from Fugue to default runrest ignore, so that it isn't so obnoxious to try and rest after a fight due to all the wailing. -------------------------------------------------------------------------------- 3fdea2571f | DracoOmega | 2023-12-26 18:50:01 -0330 Let Fugue of the Fallen work with Kiku wretches, tweak Kiku gifts After some discussion, it seemed there was wide agreement that it was fine if the deaths of wretches gave stacks for Fugue. Importantly, this lets there be a second spell that benefits from wretches between levels 2-5, so Kiku can guarantee something less sad than Necrotise. Reliably turning wretches into slaying is powerful, but the piety cost of calling wretches multiple times to do so should still be meaningful. Kiku now will always give one of Animate Death or Fugue of the Fallen in their first gift. Martyr's Knell is added to the second gift list, replacing Sculpt Simulacrum (since it is no longer necromancy). This has the potentially interesting consequence that there is a 50/50 chance of your early necromancy gifts pushing you in an ally vs. melee direction - and in fact, that Kiku can gift a spell several starts might want that *isn't* in the Necromancer starter kit. -------------------------------------------------------------------------------- 04e91338fe | DracoOmega | 2023-12-26 18:50:01 -0330 Agony -> Curse of Agony (for players) Agony has been widely considered an unimpressive spell in player hands for quite a while. In earlier parts of the game, its damage often compares unimpressively to Vampiric Draining against many enemies - somewhat sad when these are both starter spells and Agony is 2 levels higher. It can find a niche later in the game against some enemies, but ideally the capstone of any player background is something you are excited to get online. Ranged Agony was considered problematic in past, so let's try a different approach. Curse of Agony is a range 3 hex that inflicts a brief curse on the affected enemy. The next two times that enemy is struck in melee by the caster, they will lose half their current health - AFTER the damage from the melee attack applies (so somewhat less than 50%, in practice). The small bit of range lets the player try to overcome an enemy's Will *before* they're in range of Vampiric Draining or melee, but still requires them to engage directly instead of using zombies to trigger the agony effect. Its power multiplier is cut in half compared to Agony, which should make it somewhat less useful as the game goes on, but ideally more useful in earlier parts of the game than Agony itself was. This is also a chance to make some monster spells less confusing. Old 'Agony Range' is now just Agony again, while Fenstrider Witches get Agonizing Touch. There is no functional change, but I think it should be a little more obvious to new players that Fenstriders can only do this in melee range - especially now there there is no player analogue to this. Curse of Agony is replaced with Agony on player ghosts / illusions, so they have something to cast in that slot. -------------------------------------------------------------------------------- ac907ffc89 | DracoOmega | 2023-12-26 18:50:00 -0330 Simulacrum -> Sculpt Simulacrum (6 Ice/Alchemy) Current simulacrum is by no means a bad spell in isolation, but it has the misfortune of being packed in among multiple other necromancy ally creation options that are either easier to cast, more powerful, or arguably both. But simulacra are cool, so let's try opening things up by moving it out of the necromancy school entirely, where it may face less competition in its role. To differentiate it further from corpse-based necromantic means of generating allies, the spell is redesigned. It is now a range 1 touch spell that creates 2-3 blocks of ice nearby, which will transform into simulcra of the touched target after 3-5 turns (plus an extra 1-3 turns for each subsequent block of ce). This can be cast repeatedly on the same enemy, with no limit on the number of ice blocks which can exist at once, but there is a cap of 5 active simulacra and a new one awakening will expire your oldest. These simulacra are also shorter-lived than the previous version of this spell. This creates a dynamic where you often want to deliberately get in threat range of more dangerous enemies, but still have to wait for a payoff, which should hopefully feel a little different from other ally spells. It is worth noting that the player also cannot swap through ice blocks, so this can create dynamic terrain problems - and creating many in a row may fence you in with whatever monster you considered dangerous enough to want to copy. It is worth noting that there are a lot of balance knobs to tweak here - durability of ice blocks, number created at once, delay before summoning things out of them, etc. The original concept of the spell even inflicted freezing damage with the initial touch (and generated fewer simulacra overall), but it was suggested that it might be better to focus on just one aspect here. So let's try it out! (Also, since there was poor visual clarity between blocks of ice and simulacra in tiles, I tried to differentiate the block of ice tile's color from simulacra as much as I could while still looking like ice, as well as limit it to only a single shape, for a consistent silhouette. I think this helps at least a tiny bit?) -------------------------------------------------------------------------------- 8101ae7cb4 | DracoOmega | 2023-12-26 18:50:00 -0330 Add Martyr's Knell (level 4 Summon/Necromancy) The *other* half of Guardian Golem. Shielding allies via injury bond is a decent concept, but ironically, pure summoner builds have less use for this than necromancers. Summons are more easily replaceable, often fewer in number, and if we look at the starter book in particular, there are few targets worth protecting - spammals and imp are too low level to matter, inugami already offers a mechanism to protect it, and lightning spire is often out of enemy range. Zombie armies on the other hand.... Martyr's Knell summons a Martyed Shade, which is a fast-regenerating, but non-attacking ghost that offers passive injury bond, just like guardian golem used to. But if it dies before expiring, the pain of re-experiencing its own death will transform it into a flayed ghost (and instantly flay a couple random hostile targets). A flayed ghost can be powerful, but since its damage is so transient (and it is not especially durable), either positionally defending it or quickly killing its targets is important if you want it to matter. The hope is there are a number of ways to use this spell. It can defend an undead horde and engage more safely from behind it by dying quickly, or it can be used with limited other summons (or even on its own, with deliberate positioning) as an offensive tool that requires the player to ensure it doesn't die early. Spellpower affects both shade and flayed ghost hp. The latter helps make the flaying stick around a little better. The former may not be *strictly* upside, but it seems reasonable to make it just a little harder to get your more powerful ghosts (and it makes it better at tanking, of course). There is also a working enemy implementation of this spell, and I think there is definite design room for an enemy unique using it. (And, of course, there's always Mara). -------------------------------------------------------------------------------- 7aaa3406e0 | DracoOmega | 2023-12-26 18:50:00 -0330 Guardian Golem -> Blazeheart Golem (lv 4 Summon/Fire) Guardian Golem has had an identity crisis for a while. Nominally about protecting your other summons, its most effective usage was actually as a bomb - with injury bond more commonly serving as a means to help it blow up reliably than to actually protect anything. It also did wildly high damage for a level 3 spell - a whopping 3d20 at 0 power, plus additional flame clouds. But the thing is - the bomb playstyle was actually kind of fun! There were positional considerations with getting the bomb to blow up on a timely basis and not also engulfing yourself in it and it felt like it had obvious use-cases that weren't shared with other spells. Having summoning spells that feel distinct and have distinct uses is good, and so I aim to retain that here, while splitting out the ally-shielding part of the spell and (hopefully) making its damage more reasonable for its level. Summon Blazeheart Golem is a level 4 Summoning/Fire spell. The new golem has a melee attack (and a pretty good one, at that!) but a unique property where the flame inside it can only be sustained if the summoner stays close to it. Outside of a small grace period to make it more fluid to use when the both of you are moving, the golem will go completely dormant so long as the summoner is non-adjacent to it. The golem's attack is slow, has AF_FIRE, but also damages the golem for 25% of its max hp whenever it lands a blow. When the golem dies, so long as it is not dormant, it leaves its volatile core behind. This core will explode in a 3x3 fire explosion (with clouds) after the next player action. The timing is handled so that the player should ALWAYS get a chance for exactly one action between seeing the core appear and it exploding, no matter how fast or slow you are. A dormant golem causes no explosion at all. The idea here is that you can still use this golem as a tool to cause loud fiery explosions, involving unique positional play. The summoner has to be willing to step into the fray with the golem, and then plan to get out again. You cannot throw it at problems from a safe distance (but also are not randomly punished for engaging with it). In fact, the idea is that it should be competitive with Lightning Spire in the starter book, but for different situations/playstyles - Blazeheart Golem wants you to be in the fray with it, while Lighting Spire supports a more evasive/mobile approach. All damage numbers are still provisional and will be tweaked based on feedback, but for reference the explosion currently does between 3d11 - 3d20 based on spellpower (compared to old golem's fixed 3d20). -------------------------------------------------------------------------------- 8735cdfb9f | DracoOmega | 2023-12-26 18:49:59 -0330 Fix some monster death effects not happening if they die with Inner Flame Most notably Protean Progenitors would not spawn Aspiring Flesh if they exploded on death (even though, message-wise, they're *always* exploding on death), but apparently Spriggan Druids would also not use their death buff and a few other things may have not been cleaned up properly if they died this way. -------------------------------------------------------------------------------- 645d2ae13f | regret-index | 2023-12-26 18:21:36 -0330 Spruce up each rune-guarding Pan lords' realm The bulk of particular enemy decisions for most of the four fixed Pan lords enemies were made ages ago, before we had nearly so many varied monsters for almost any branch in general. Since there's been such a massive influx of new monsters to work with compared to so far back in the past, it'd be reasonable to further add to the gimmickry the lords themselves already brandish, rather than focus on plain + common + weak flavour choices for Pan vaults like occultists, large abominations, or weaker skeletons. * Mnoleg's level uses very few very ugly things, abominations, or tentacled monstrosities for a lot more protean progenitors and shadow demons- the former for more interesting shapechanging, the latter to fit the summoning (and since Tartarus lost them). There's far too many of the former melee-only types before extended, and Mnoleg lacks much for noticeable spawns beyond eyes and cacodemons- these two will both help. (Note: Don't use proteans beyond Zot, Zigs, and Mnoleg's floor. Zot non-draconians get very limited to no non-Zig drift or bleed to keep them distinct and dramatic.) * Gloorx Vloq's level loses lorocyproca and demonic crawlers for reapers and entropy weavers, while upgrading the skeletons hard. While this loses a bit of spectral flavour and demon presence, demonic crawlers have no real threat in Pan and there's some interest in removing lorocyprocas for more interesting tier-2 designs in the future. Meanwhile, entropy weavers still can corrode even extended characters, and reapers have a new effect plus aren't much prominent in Tartarus anymore. (This is a bit of placeholder future-proofing: if a new summoning tier-2 does end up existing, then shadow demons could fit here better over some other spawns, like shadow wraith and soul eater explicit placements, and those demons can replace Mnoleg's shadow demons.) * Lom Lobon's level loses arcanists and occultists, as they're pretty mundane mortal scholars of magic for extended. Instead, to represent more interesting mystics across the Dungeon, there's now small amounts of one conjurer from each of the Lair roulette branches- nagaraja, merfolk aquamancers, fenstrider witches, and jorogumo. They readily match up with the green deaths or blizzard demons already present, and while mostly not too extra dangerous at Pan depth they're more interesting to see than the prior options. * Cerebov, the most infamous and intimidating lord of Pandemonium, loses orange demons and crimson imps for pretty rainbow fluttering insects. They're definitely not the newly revised, rarely used elsewhere, very fire-focused sun moths. * Each of the unrand lords vaults places an increasing clump of demonspawn related to the lord in question for each rune you have on you when entering. Mnoleg gets corrupters (summoning), Gloorx Vloq gets black suns (necromancy), Lom Lobon gets blood saints (conjurations), and Cerebov gets warmongers (big equipment). There's not any extra in the given levels beyond those initial counts, though, so they shouldn't make the levels blend together too hard with the rest of Pan. * Also, the non-holy guaranteed demonic rune vaults and Mnoleg's realm both contain some potions of mutation now, to compensate for when the old potion of cure / beneficial mutation shuffling removed the (very delayed, unreliable, heavily guarded) potions of cure mutation in the holy pan level. Those holies should be revised to be less boring, at some point, but for now, it should make those vaults feel more worthwhile. This also updates arenasprint and the chasing-across-Pan / orb run spawns of the lords for those four new sets, a few new tile choices to reduce the use of generic D floor and wall tiles, deals with teleport islands in Lom's realm, and tweaks a varied number of vaults to even out some higher and lower vault lethality ends. Maybe eventually Pan will be varied enough to be made yet shorter and extended could be made shorter in general?... -------------------------------------------------------------------------------- 8468ca10c8 | Kate | 2023-12-26 21:47:53 +0000 Australianise some spelling -------------------------------------------------------------------------------- 7f6f75e24c | Nicholas Feinberg | 2023-12-26 10:58:29 -0800 Don't associate hand cannons with alchemy Players were confused and thought they had something to do with the new spell school. -------------------------------------------------------------------------------- 903e00c026 | Nicholas Feinberg | 2023-12-25 23:24:19 -0800 Revert "Fix default shop ordering" (gammafunk) Just broke more things. This reverts commit d22453358fbc46b1444d6a61a651476891020241. -------------------------------------------------------------------------------- 2add1c7226 | regret-index | 2023-12-25 22:14:43 -0330 unbrace -------------------------------------------------------------------------------- 7819447e5a | regret-index | 2023-12-25 22:09:50 -0330 Once more, buff Mnoleg Mnoleg's still doing somewhat poorly compared to the other pan lords, and it's a nostalgic past-time at this point to regularly tweak and buff them. Unlike many other times, this won't involve too many big or complicated identity and spell changes, but instead some number tweaks. * Since Lom gets to cast their spells obscenely often, it should be fair for Mnoleg to get the same. They now cast Malign Gateway, Summon Horrible Things, and Summon Eyeballs all about x1.5 as often as before, so they're more consistent about tossing out everything before they die. * Their AF_MUTATE attack brand has been removed, and the titled in-game Demon Lord of Chaos just actually hits the player with AF_CHAOS. There's still cacodemons plenty across the floor as is, the eyes already show a focus on a rain of debuffs, and the tentacle's already adding chaos brand to the fight. Mnoleg also drops one of their four(!) melee attacks, redistributing most of the damage across the other attacks (now made the more chaotic AT_RANDOM) so the AF_BLINK hit is more likely to deal the damage needed to let Mnoleg actually blink. * Mnoleg's hp is rather low compared to half other lords- of the other lords near their average hp, two of three of them have Major Healing (Lom and Eresh), and the third is killing fine on sheer high numbers and speed (Gloorx). As such, they get another average 73 HP, vaguely approaching Asmodeus and Dispater's rough ~450 HP range, and a little better defenses made a little more uneven. -------------------------------------------------------------------------------- c82a368367 | Nicholas Feinberg | 2023-12-25 16:38:22 -0800 Oops -------------------------------------------------------------------------------- 55a4951847 | Nicholas Feinberg | 2023-12-25 16:37:43 -0800 Credit aedyr -------------------------------------------------------------------------------- fb072f231e | Monkooky | 2023-12-25 16:33:34 -0800 Tweak Upheaval radius logic Properly show the inner circle as guaranteed once you get a chance of hitting things in the outer ring. This is still slightly wrong if you have literally 0 invo skill, but I don't care. Closes #3334. -------------------------------------------------------------------------------- 2086043a82 | aedyr | 2023-12-25 16:21:59 -0800 Reformat background_creation as Markdown Closes #3349. -------------------------------------------------------------------------------- fdc2f8288e | Nicholas Feinberg | 2023-12-25 16:13:07 -0800 Tweak some Frederick triumphs -------------------------------------------------------------------------------- cdbc00b6e1 | Rosstin Murphy | 2023-12-25 16:07:20 -0800 Add Frederick triumph lines Closes #3395. -------------------------------------------------------------------------------- 6be9deba8d | Nicholas Feinberg | 2023-12-25 16:04:46 -0800 Refactor enchant code Closes #3361. -------------------------------------------------------------------------------- 8b49caffdb | Aliscans | 2023-12-25 16:04:46 -0800 Enhance max enchant messages Change what happens when weaponry or armour in enchanted to its maximum. 1. Print "while" rather than "moment" in the message, to give the player a hint that something unusual has happened. 2. If caused by a scroll, cancel repeated actions. The next scroll can't enchant this item again, but the same keypresses could enchant something else. Also, print the message at the end of enchant_armour(). This matches enchant_weapon(), and means that any lua function which is triggered by the message sees the item in its final state. -------------------------------------------------------------------------------- 6c1934c42b | Monkooky | 2023-12-25 15:09:29 -0800 Make Lightning Rods use half AC Makes lightning rod check against half AC rather than proportional AC. This change follows in a push to make lightning damage always ignore half AC, and also removes an inappropriate usage of proportional AC. This is a buff, but it's unclear to me to what degree, as lightning rod damage code is fairly opaque. -------------------------------------------------------------------------------- 8ab06856ec | mgdelmonte | 2023-12-25 14:57:21 -0800 Add lua function view.get_map This is significantly more efficient than querying each cell from lua. It also provides more and better data, but never more than is visible to a normal player. See function comments for a complete description. [Committer's note: did some minor refactoring.] Closes #2675. -------------------------------------------------------------------------------- 7b7c7d10e1 | mgdelmonte | 2023-12-25 14:48:20 -0800 Fix lua skill function bugs The lua skill functions were done variously, with some using str_to_skill_safe (which returns Fighting if there is a skill mismatch) and some using str_to_skill; and each was done longhand. This PR factors out the common code and uses str_to_skill, which is the only method that makes sense. The str_to_skill_safe gives totally false results if the wrong skill name is used. And as a related matter, this PR fixes the documentation, which referred to Ranged Combat as a skill, when it is actually called Ranged Weapons. -------------------------------------------------------------------------------- 7873091dee | Michael Del Monte | 2023-12-25 14:30:58 -0800 Fix bug in lua `target_weapon` Crawl currently lacks the ability to speculatively examine the to_hit value of a non-wielded weapon. The underlying melee_attack and ranged_attack objects appear to allow weapon selection, but for a player, they always use the currently wielded weapon. This commit removes the misleading `item` parameter and corrects the function description. Resolves #2694. -------------------------------------------------------------------------------- d22453358f | mgdelmonte | 2023-12-25 14:27:18 -0800 Fix default shop ordering Sorting by type, name, price is neat, but it breaks the lua integration because the sorted menu scrambles item letters, so the `items.shopping_list` has no relationship to any menu you can see in the game. That is, `items.letter_to_index` fails to work properly. This PR restores the original "stock" order as the default, which means that `items.letter_to_index` will work again. Closes #2987. -------------------------------------------------------------------------------- 8329074549 | mgdelmonte | 2023-12-25 14:22:54 -0800 Fix Lua bug in view.cell_see_cell Closes #3107. -------------------------------------------------------------------------------- 5034fedf43 | Monkooky | 2023-12-25 14:16:48 -0800 Make Ozo's Fridge ignore firewood for huddling Ozocubu's Refridgeration deals reduced damage to actors that are adjacent to another actor. This previously included firewood. If fridge is your primary damage source (by a sufficiently large margin), you are encouraged to shoot firewood with a sling then wait for it to die when it comes into LOS, so that monsters could not huddle against it. This is an extremely unfun play pattern. While this issue occurs to some degree with plant blocked missiles, it is not as severe in those cases, nor as easily fixable. In the case of missiles, retreating until an enemy enters line of fire is sufficient. In the case of Ozocubu's, you must retreat until the enemy is a full tile beyond the plant, which may be several turns where the enemy has LOF but can still huddle. [Committer's note: deduplicated.] Closes #3303. -------------------------------------------------------------------------------- a5f28545b9 | Nicholas Feinberg | 2023-12-25 13:22:12 -0800 Axe Cig rot fee Player sentiment seems pretty negative about Cigotuvi's Dreadful Rot at the moment. The current drain cost dates back to 08ca5ef3b563a5f1, when the spell was first added - it's a first draft. Let's cut it by a bit more than half and see if it feels better. -------------------------------------------------------------------------------- 2bdb5a6e49 | DracoOmega | 2023-12-25 13:36:34 -0330 Don't make rPois- creatures also immune to Mercury Vapours (Darby) It's so easy to assume that !res_poison() means 'doesn't resist poison', but of course it does not. -------------------------------------------------------------------------------- 2bb1a01664 | gammafunk | 2023-12-24 23:10:31 -0600 fix: Better placement of the Crypt gem (dilly) Due to how the shared Crypt loot randomization works, the ivory gem could end up in some obscure places on e.g. evilmike_haunted_forest, namely locked away with unsightly ghouls behind iron grates. This commit moves the gem off of one of the special loot piles that gets randomized to various possible locations in each map, and onto its own glyph. This glyph now appears in a central location at the "end" of every Crypt:3 end vault. On a couple maps the gem replaces a single gold pile, which is no great loss to the player, and on the rest no loot items are sacrificed. -------------------------------------------------------------------------------- 9f37b22e94 | elliptic | 2023-12-25 00:08:38 -0500 Make heavy rarer on long blades and randart melee weapons Heavy is more complicated and arguably more powerful than vorpal was, while also being a bit scary to use; it doesn't need to be quite as common. I pulled back on the weight for long blades in particular to partially match short blades (where heavy doesn't generate naturally on non-randarts) and increase brand weight diversity between weapon classes. For randarts, I left other weights unchanged, which means all other brands got (slightly) more common; this is probably a buff (more speed/spectral...) but my general impression is that still using a randart melee weapon in endgame isn't that common compared with a boring +9 non-artefact, so making their brand assortment a little more exciting seems fine. -------------------------------------------------------------------------------- d128f7319e | David Lawrence Ramsey | 2023-12-24 17:36:56 -0600 Call trog_wizard arcanist a wizard again (#3379). Closes #3379. -------------------------------------------------------------------------------- 80bb053e4c | David Lawrence Ramsey | 2023-12-24 17:34:50 -0600 Recycle dialogue for alchemist player ghosts. (#3417) Move the old Transmutations dialogue to Shapeshifting, and put the Poison Magic dialogue under Alchemy. -------------------------------------------------------------------------------- 2dc4e65319 | David Lawrence Ramsey | 2023-12-24 17:34:19 -0600 Fix warning if Beogh can't give an orc an orcbow. (#3386) -------------------------------------------------------------------------------- b614d7c52f | David Lawrence Ramsey | 2023-12-24 17:33:40 -0600 Change species' magic resistance to willpower. (#3397) This updates the species YAML files and associated documentation. "mr" is now "wl", to match the species aptitude header and footer. -------------------------------------------------------------------------------- 7c67ea8c80 | RypoFalem | 2023-12-24 22:57:36 +0000 Note when felids lose or gain lives This should make it much easier to keep track of how many lives you had at what point in the game. -------------------------------------------------------------------------------- 47f062a2e6 | Nicholas Feinberg | 2023-12-24 14:31:34 -0800 Fix constriction + bombard (CarefulOdds) Also water engulfing, though harder for this to apply for Bombard specifically. Also fixes Mule issues. -------------------------------------------------------------------------------- 8a68c6e047 | Kate | 2023-12-24 20:08:44 +0000 Use @possessive@ in some Boris speech lines -------------------------------------------------------------------------------- a3d031de95 | David Lawrence Ramsey | 2023-12-24 13:12:57 -0600 Change species' magic resistance to willpower. This updates the species YAML files and associated documentation. "mr" is now "wl", to match the species aptitude header and footer. -------------------------------------------------------------------------------- 2ccc7d8fe7 | Nicholas Feinberg | 2023-12-24 10:25:43 -0800 Oni are dummies (acrobat) -------------------------------------------------------------------------------- 6789619139 | Nicholas Feinberg | 2023-12-24 10:23:38 -0800 Add Sean Dewar to the CREDITS -------------------------------------------------------------------------------- 34bb7ddc15 | Nicholas Feinberg | 2023-12-24 10:23:05 -0800 Remove accidental defaults (Ge0ff) Oops! (!!) -------------------------------------------------------------------------------- ca53710c0c | David Lawrence Ramsey | 2023-12-24 08:17:55 -0600 Recycle dialogue for alchemist player ghosts. Move the old Transmutations dialogue to Shapeshifting, and put the Poison Magic dialogue under Alchemy. -------------------------------------------------------------------------------- 007bd0a1a9 | regret-index | 2023-12-24 06:32:43 -0330 Tweak a variety of monster stats, spells, and gear * Burial acolytes don't need quite so high Willpower for a D:4 portal. They're now at a much more appropriate Will 20. Their two conjuration effects are plenty nasty already, also, so they get a mild nudging down of melee damage. * Let meliai give more experience, so people with tile_show_threat_levels won't ignore them as much, and since they're easily quite nasty for low hp characters (as their nudging down in Spider in bd29554, f2a2391, and d12d1d2 can attest). Their rough kill numbers versus objstat ratio in D places them pretty close to skeletal warriors, who give a lot more even after this. * Give war gargoyles less HD and less casting rate for Metal Splinters as is weird for a gargoyle to be breathing anyway, but more AC, melee damage, and a chance for a branded weapon as is more suiting for a player species renowned for melee. Maces and flails brands are a little weird for this, but it's a nice random holy wrath chance. * Give Frederick a randart orb of light or energy- light for the demigod semi-divinity, energy for his conjurations. It serves as a tempting reward all of his recent huge buffs (b247575, b730325, 1baa85e), and continues to help distinguish him from other uniques. (This, of course, comes with some adjustment for his weapons to be all one-handed). * Call Lost Souls now has a hard summon cap of 3 again- death mages calling in a higher number at a time was evidently plenty enough of a buff to it- and works properly in wizlab_borgnjor's random effects again. * Let Pan lords cast the misery-cloud generating March of Sorrows, replacing their quite harmless Freezing Cloud cast. (Also, rename the ENCH_RING_OF_DRAINING to RING_OF_MISERY, and fix some database lines missing the s at the end of the spell name.) -------------------------------------------------------------------------------- 4b2ba238e7 | Nicholas Feinberg | 2023-12-23 21:48:54 -0800 Mark Wucad Mu useless to Djinn (Aliscans) Also, to Trog. Closes #3372. -------------------------------------------------------------------------------- 829106c53c | Nicholas Feinberg | 2023-12-23 21:43:35 -0800 Tweak job/species recs (OctopodesWeekly) Funnily enough, no new Op recs. Closes #3365. (See justification in that PR description.) -------------------------------------------------------------------------------- 7a62d739cf | Sean Dewar | 2023-12-23 21:32:44 -0800 Fix some duration descriptions Some duration descriptions were out-of-date or missing entirely (e.g: "No description available" when hovering over statuses on WebTiles). Here's my attempt at updating them! As I don't know Chinese, just remove the "Slay" status entry, as that one no longer applies (needs changes to accurately describe "Fugue"). [Committer's note: tweaked Fugue and Jinx descriptions.] Closes #3414. -------------------------------------------------------------------------------- 2e576bbbd6 | Sean Dewar | 2023-12-23 21:32:44 -0800 Fix Bullseye/PProj issues - Remove the old "PProj" status description, and replace it with an updated one for "Bullseye" (I don't know Chinese, so I just removed that one). - As Portal Projectile is now a monster-only spell, update its description to attempt to more accurately reflect its behaviour when casted by monsters. - Remove `action::affected_by_pproj()`, which is unused. - Remove `action::is_bullseye_active()` and its uses. This function incorrectly treats each shot as costing 1 MP, and implies that bullseye is unusable while confused; both cases are no longer true. Remove uses from `action::uses_mp()` overrides and from `fill_status_info()`. -------------------------------------------------------------------------------- f84c63c4fe | David Lawrence Ramsey | 2023-12-23 21:24:26 -0800 Add a line for player ghosts with Shapeshifting. -------------------------------------------------------------------------------- 3924f4b49e | David Lawrence Ramsey | 2023-12-23 21:21:25 -0800 Make initial monster vitrify messages end in "!". This matches the monster message for Killer Klowns' clear moon pies. -------------------------------------------------------------------------------- 44eaecdf4b | David Lawrence Ramsey | 2023-12-23 21:21:25 -0800 Properly message when you're vitrified more. When you're already vitrified, being hit with Vitrifying Gaze will say that your fragility will last longer. Do this for ordinary Vitrify as well. -------------------------------------------------------------------------------- 77d344c5cb | David Lawrence Ramsey | 2023-12-23 21:20:31 -0800 Don't list Meteorans in the aptitudes menu. -------------------------------------------------------------------------------- 8e30cb9bd4 | Nicholas Feinberg | 2023-12-23 21:18:47 -0800 Fix Xom's divine experiences (pooka109) Don't apply the goofy confusion/slowing from wrath when Xom's wrath does nothing. (Purely for thematic reasons - feels hard to be 'overwhelmed' by nothing.) Closes #3408. Closes #3409. -------------------------------------------------------------------------------- 3b179efc34 | David Lawrence Ramsey | 2023-12-23 21:14:36 -0800 Fix spelling in a few new spell descriptions. Closes #3406. -------------------------------------------------------------------------------- 385a91d2d2 | Nicholas Feinberg | 2023-12-23 21:11:04 -0800 Set burial acolytes' god (pooka109) Closes #3416. -------------------------------------------------------------------------------- 7102d64fe6 | regret-index | 2023-12-23 23:32:39 -0330 Make Boris make you sad Boris is a very sad unique. He's lost his dagger (acddeb6). He's been seperated from his cat (8eed16d) for ages. He's become nearly identical to plain liches aside from trading Haste for Iron Shot (6612197). He's lost a decently large chunk of his placement range, diluting his gimmick (f5560fb, 1b62a5d, 67d208b). He also just doesn't actually kill many people- while it's obviously awkward to assess the killrate statistics of somebody that comes back, his killrate over the past three versions is a very sad ~0.45%. It could bring one to tears, really. He's got an almost tangibly miserable lot, one could say. Boris now loses Invisibility for an upgraded version of the weeping skull misery cloud spell (c.f. d47e5fa) - a cloud line that lasts 8-12 turns that doesn't skip over the vulnerable, and which forms a mephitic-cloud style 1-radius burst of 2-5 turn clouds. (Most of the Invisibility weight wasn't entirely put into this new March of Sorrows, and was distributed into other conjurations.) This should be an interestingly nasty combination with his Orb of Destruction, as it will eat away at players trying to sidestep the orbs. It also cutely makes every single one of his spells conjurations, which I'm sure he'd prefer, and gives him a spell distinct from both liches and other uniques. Wear rN+. Boris also now places in Depths:1-2, Vaults:1, and Elf:$, so his resurrection mechanic has more chances to actually be seen. This might make him a bit absurd on the orb run, but he's only gotten 5 kills then in the last nearly three years since 3208aba, so it should be fine. (Also, some more Boris lines and text. Hooray for melodramatics.) -------------------------------------------------------------------------------- 36f0627844 | DracoOmega | 2023-12-23 15:54:37 -0330 Allow Manifold Assault to work with more unrandarts Now that we can test the safety of each attack before we make it, some more things can be allowed to work. Specifically: Devastator, Scepter of Torment, the Singing Sword, and the Mace of Variability. The Mace of Variability's Chains of Chaos look slightly weird when they trigger off non-adjacent targets, but still function alright. Arc Blade doesn't currently work at all when it hits a non-adjacent target (and produces potentially confusing messages) and Sword of Power's beam aim functions oddly, so they remain disabled for now. Theoretically this could be adapted to work in future. I have *some* concerns about effectively multiplying the trigger chance of screen-wide effects, but PF has argued in favor of fun and who am I to immediately say no? -------------------------------------------------------------------------------- e298f011d9 | DracoOmega | 2023-12-23 15:54:37 -0330 Don't drunken cleave targets that might cause penance with unrandarts More specifically, for each attack an oni could make while drinking, we check if said attack *would* prompt the player about endangering allies if they made it normally, and then veto any such attacks. No prompts, only attack things safely, enjoy your unrands. -------------------------------------------------------------------------------- 59f95bc4ea | DracoOmega | 2023-12-23 15:54:37 -0330 Allow checking if an unrandart wreapon would give an attack prompt Without actually showing one to the player. Intended so that we can test in advance whether an attack might be unsafe, before attempting it. -------------------------------------------------------------------------------- 589f70cbe3 | Kate | 2023-12-23 18:44:23 +0000 Fix wording in a speech line -------------------------------------------------------------------------------- c720559798 | DracoOmega | 2023-12-23 12:47:45 -0330 Don't require shift+z to cast Mercury Vapours at enemies still in the AoE It doesn't seem an uncommon situation that the player would want to cast early for the Weak, so let's not make them see an extra prompt. -------------------------------------------------------------------------------- 88e648cc9f | DracoOmega | 2023-12-23 12:47:45 -0330 Greatly increase bombardier beetle's xp Due to how the game automatically determines this, it was far lower than other monsters of comparable threat. (I wonder if it might even have caused the UI to suggest to players was trivial when it wasn't?) Still keeping a close eye on these little guys' lethality and may nudge them downward, depending on how it shakes out. -------------------------------------------------------------------------------- f52a5a9ab3 | regret-index | 2023-12-23 00:47:41 -0330 Adjust new skull noise While most full-bodied undead are still effected by silence, curse skulls and wraithly monsters use magical or natural abilities. With that rough precedence, it makes reasonable sense for both weeping skulls and laughing skulls to be immune to silence. New messages have also been added for both, alongside messages for ones blasting at allies from offscreen. (This also fixes the mon-spell.lua test failing, as apparently SPELL_NOISY is a tag for non-wizardly / priestly abilities. They should be noiser, anyway- I wonder a little about S_SCREAM and its piercing shrieks actually being louder than normal, considering the many years it seemed like that was the case as well as it making obvious sense. (It was just notable when Crypt was mostly zombies that they shouted at all.) It'd make demonic crawlers louder in a relatively quiet branch, though, so I'll defer to others' opinions on that front.) -------------------------------------------------------------------------------- 7de3fab2a5 | regret-index | 2023-12-22 22:35:00 -0330 Tweak & distribute new skulls & acolytes across portals & vaults Weeping skulls and burial acolytes are mostly put into the ossuaries with minimal gimmicks and kill rate. Several ossuaries trim down the D:1 zombie numbers and continue to pick up a small amount of fancier derived undead (spectral scorpion, bullfrog simulacrum, croc zombie). This also gets in some long-due nerfs for the wraith ossuaries and the bog mummy ossuary's pile of bee / wyvern zombies- both are gone now that ossuaries in general have less spiky gimmicks. (This comes with a large amount of reshaping and handling Ossuaries in general, to be honest. They have pretty awful disparaties in their kill ratios even with quick crocodile zombie adjustments- the bottom 4/20 Ossuaries had a collective weighted killratio of 5% and the top 4/20 had a collective killratio of 45%. Several also had some immensely troublesome gimmicks- _due_cavern's skull traps never worked but thousands of people autoexplored into wraiths, while _zaba_flooded was content to use wyvern zombies in the same portal mostly using D:1 zombies. There's been some heavy reworking of layouts from disproportionate killratio ends, including some heavy reshaping and gimmick distribution. There's now a ~44% chance to encounter either of the new monsters in an Ossuary, with functional layouts like the bog mummy, scorpion, and ambush ones leaving them out.) Weeping skulls and burial acolytes also show up in a few altar vaults for Yred and Kiku, respectively, and a few Crypt vaults. Weeping skulls also get a little Abyss integration, and could easily get more. (After testing in their intended ossuary locations, weeping skulls are a bit bulkier than their starting commit, while Malign Offering has been tweaked further downwards in starting power for burial acolytes. Laughing skulls also now show their possible maximum damage.) -------------------------------------------------------------------------------- 38fc4fe9c3 | regret-index | 2023-12-22 22:35:00 -0330 Nerf plain elf monster stats and xp We don't really use plain elves as anything besides player species zoo filler or plain shapeshifter monster dud rolls, but they do have their zombies appear in a bunch of ossuaries. They currently heavily resemble humans monsters except for having a bit more EV, health, and HD, but this for some reason hands out like x1.75 XP versus humans. Since all the x-v improvements recently and over the decades have helped make arbitrary zombies relatively straightforward to quickly parse, there's not too much problems with keeping said plain elf zombies in ossuaries. (Probably not good to add lots of player species that don't spawn in the Dungeon, but players should have some reasonable immediate recognition of an elf). They still probably shouldn't hand out so much XP there now that we have actual new threats for Ossuaries with their own XP reward attached. Elf enemies gain some EV, lose some AC / HP, and now only provide about as much XP as the base humans do. -------------------------------------------------------------------------------- dac2563cd0 | regret-index | 2023-12-22 22:34:59 -0330 New monster: burial acolytes, for Ossuaries / Crypt vaults / Kiku altars Another new monster meant to be Ossuary bosses. These jackal-masked priests of Kiku practicing out interring the dead and raising them after they've gone through the proper rites have several different spells to work with: * Malign Offering, the heal-others by-damaging-a-target beam DE high priests use, which can help heal up Ossuary zombies one otherwise kites or easily lures apart from one another. * A weak and rare 3d7 Dispel Undead not-range, to scare player undead in a way that can still be reasonably handled at range. (This comes with another rescaling of low HD Dispel Undead not-range, since it was very strong even at very low HD.) * A new spell, Funeral Dirge, which gives very brief sprinting and might buffs for several undead close to a foe. This is meant to further showcase early monster support spells (alongside boudas), and also lets them try to help make jackal zombies and gnoll zombies actually have any threat to them in the weaker ossuaries. While this is a fairly complex enemy to be introducing early, most Ossuaries have been quite simple barring notable out-of-depths (wraiths, wyvern / bee zombies) since they lost all of their non-alarm traps in 1e82c30. They can afford an actually noticeable monster or two between these, weeping skulls, spectres / simulacra, and croc zombies in the non-out-of-depth arrangements, especially when the earlier portal before it contains water mechanics and now its own far-from-D spawns too. Burial acolytes don't particularly fit in too many other branches, but as explicit Kiku priests, they also reasonably fit as Kiku overflow altar guards since most of those slowly lost their zombies. They also can help out the extreme number of Crypt vaults deciding that piles of derived undead each stuck in individual closets will ever actually threaten anybody not making a thunderous racket, since the buffing Dirge will let them be super-frail support even much later. Their tile is the old anubis guard tile by Grunt, moved back from the unused monster's possible-player-sprites folder. Probably people won't be too confused by seeing them in another Egyptian context again after seven or so years. -------------------------------------------------------------------------------- 22ebceef79 | regret-index | 2023-12-22 22:34:59 -0330 Monster revision: Flying skulls -> Laughing skulls Flying skulls are extremely harmless for their current placement, being mostly just monsters that shout for silent zombies to wake up to rather than anything of actual interest in-and-of-themselves otherwise. They're not very useful enemies to actually fight beyond very earlygame, yet used mostly in late undead vaults or Crypt, a notion we've tried to rather phase out these days compared to previously. The newly renamed laughing skulls (so named contrast against the new weeping skulls), have lost most of their resists beyond rF+ (many other undead lack for it, but several vaults kind of want a vague fiery undead theme available, and since they're now red to contrast agains old flying skull white / cyan). They also have an rN-checking mechanic, but are far more direct about it. They now cast 3d13 Bolt of Draining, and scale up the power of their bolt with each skull available in their LoS- 25% for each other laughing skull laughing with them, capped at 100%. While there's a few piercing-bolt band designs in Crawl already (hell hounds, raiju, kind of spark wasps, and hell knights), few of them are quite so slanted in both raw damage and health frailty as these are- with five total present, each hits as hard as shadow dragons, but they'll die very quickly when hit. This should make them have an interesting bias against melee fighters (after all the other repositioning and mp-draining effects added this version). Or they'll get zapped by wands. It's at least better off than before, and might make rN a bit more respectable a resistance. Since they now have a built-in scaling mechanic, they now replace shadow wraiths in the D out-of-depth pool appearing with only a single other skull (and not even that when pulled up solitary in vaults), and are reduced in number rather than cut out of many earlier vaults. They otherwise still appear in their bands in Crypt and Abyss, though the latter has been made to raise over time rather than lower. Several vaults have had their flying skull counts nerfed, while other vaults have swapped them in for weeping skulls. The new tile is by Sastreii. -------------------------------------------------------------------------------- eb2fc1291e | regret-index | 2023-12-22 22:34:59 -0330 New monster: weeping skulls, for Ossuaries / Abyss ( / Crypt vaults) Ossuaries are in a weird place relative to the rest of early D, though not nearly as plain as Sewers were prior to ac1dc8b and 5e5e084. Plain mummies and derived undead are both, strictly speaking, a unique monster and a much later monster type for the Ossuary default set. The problem is that without the interference of traps (heavily reduced over time) or very large numbers and no chokepoints, there's a lot of boring kiting and picking-apart the slow zombie hordes for a variety of different characters. The energy rework of attacks-of-opportunity help them a little bit, but not enough to make zombified versions of D:2 + human and elf zombies particularly plus slow mummies very interesting. There's a few ossuaries with unique gimmicks, like the wraith ones or the open layout ambushes or silence or scorpions or bog mummies, but overall, the rest are very, very plain. Weeping skulls are a new monster meant to be occasional Ossuary bosses as a noticeable spike of danger beyond the current sad state of normal mummies, alongside another future enemy type. Somewhat frail undead, they use the newly-altered clouds of excruciating misery by randomly and sparsely spawning them in random squares of a two-tile ring around themselves (but never directly on top of the player). They also have a variant of the cloud-line breath catoblepae and ushabti have, spawning brief misery clouds while skipping past those that would be vulnerable (non-Undead). These both make running from zombies and mummies both include a fair bit of deliberation over walking around clouds or taking small amounts of unavoidable damage to walk through them, which should add a fair bit of interest to many gimmickless and weaker ossuaries all being roughly the same. They also show up in the Abyss as natural spawns, once more taking off a little bit of the very large weight small abominations have early in the Abyss, and spawning with a second skull when any deeper than Abyss:1. Most enemies in the Abyss will be immune to the clouds, and they can sometimes slow the player retreating from far more dangerous enemies around, which is a cute use for weaker monsters there. Their tile is by Sastreii. -------------------------------------------------------------------------------- d47e5fa42b | regret-index | 2023-12-22 22:34:58 -0330 Buff?: Clouds of negative energy -> clouds of excruciating misery Clouds are weird. (Much of Crawl is weird.) Their damage is fixed per cloud type, which makes it difficult for clouds to be used against the player outside of a given rather narrow window of reasonable damage, since there's rather limited and possibly expensive ways to deal with large amounts of space becoming unavoidable. (Some effects, like poison, miasma, and spectral flame do sidestep this, at least). We've also got a pretty large amount of clouds at this point that are extremely narrow in their presence and use, for very disparate circumstances- a pile of different decorative opaque clouds and damage types mixed between Wizlabs, Desolation, Xom, condenser vane, and two or less monsters each for almost everything besides miasma. It'd be nice to try and make more dramatic effects when we have so many, so it'd be possible to compress such endless lengths over time. As part of this notion, I'm heavily revamping a cloud essentially exclusive to condenser vanes and Xom- clouds of negative energy. They're currently somewhat weird within the vane itself, positioned at the same tier as acid and thunder but much easier to resist than either for monsters and more awkward to idly walk through than acid for players. They're also not very interesting either way, another cloud doing another flat amount of damage like the other standard element clouds despite undead already having the unique non-standard miasma and spectral flames to work with. I'm revising these clouds away from dealing the standard cloud damage of 10-32 damage to players and 6-22 damage to enemies to instead deal with flat percents, in the style (but not practice) of torment. These newly renamed clouds of excruiating misery now deal 10% of the player's max HP (6.6% with rN+, 3.3% with rN++, none with rN+++) and 15% of monster max HP whenever they hit (most monsters have a lot less raw health than most players, so they on average take more damage from even numbers lowered for them and not players- likewise, such low-ish percentage damage has to be higher to monsters for it to work properly). This should make them scale reasonably to be a little dangerous if liveable fine early on and reasonably terrifying later on, thus making them usable for future monster re / designs. It should also help with rN+ being a very neglected resistance for most players on average, since later versions of these cloud should deal quite a bit of damage. Additional notes: * The tile has been somewhat changed with a hard light overlay of rltiles sourced wall_undead. We could really do with more cloud tile bases eventually. At least they're definitely obviously different colours than miasma or spectral flames in console? * Condenser vane is unchanged, since it'll take a bit of a while to tell just how good these clouds are in player hands- it's a worse roll earlier on (low monster health) and already an easily bad roll later on (lots more undead and unliving), but it can now really shred through giants and uniques. Monster cloud safety versus intelligence checks in _mons_avoids_cloud is a very per-case hacky mess- if there's any concerns about its strength, a proper check for this new cloud's non-standard damage should be added there just for starters. * The name of "excruciating misery" can be quibbled over in the future, but with such rapid damage against e.g. player trolls it felt like it needed some emphasis. It's also meant to both fit with and be a little distinguishable from Crawl's love of adjectives for Pain- Agony, Torment, Anguish. -------------------------------------------------------------------------------- 282adc679d | Implojin | 2023-12-22 16:48:07 -0600 Enable default gem autopickup In some brief local testing, this approach seemed to work to enable gem autopickup by default, while still allowing players to disable it through \. -------------------------------------------------------------------------------- 32b5b8ab40 | Nicholas Feinberg | 2023-12-22 14:10:56 -0800 Add always_show_gems Give players an opt-in way to always show gem timers, as with the Zot timer. If more_gem_info is also set, then this will also show the time until held gems shatter. Please don't turn this on. -------------------------------------------------------------------------------- 9dc51933c8 | Nicholas Feinberg | 2023-12-22 13:48:54 -0800 Fix: leaky boulders (particleface) Don't allow testing for invisible enemies for free with Brom's Barrel o' Boulders. -------------------------------------------------------------------------------- f40074dcd0 | Nicholas Feinberg | 2023-12-22 13:43:46 -0800 Add kittens For a Hep low-piety invo title. The naming here is a little iffy - 'feline kitten' feels silly. Should maybe special case that. Also a bit leery of 'tengu chick' but whatever, we can roll that back later. -------------------------------------------------------------------------------- 04589416ad | Nicholas Feinberg | 2023-12-22 13:27:09 -0800 Add stop_summoning_prompt on evokers (dilly) And fix dragons to not warn you when bog is active. -------------------------------------------------------------------------------- a1c90ae492 | Nicholas Feinberg | 2023-12-22 13:03:23 -0800 Randomize blastmote push order (acrobat) The order in which adjacent creatures are pushed back by blastmotes should be random, not a fixed memorizeable pattern. -------------------------------------------------------------------------------- 3537ca1da6 | Nicholas Feinberg | 2023-12-22 12:59:45 -0800 Blastmotes: explode on wait (elliptic, Implojin) Per discussion, it seemed simpler and more intuitive for blastmotes to explode when a creature (incl. the caster) ends their turn in the blastmotes, rather than only when they move in. The motes bump into you, etc. (They're still sleepy when you cast them, so you get a turn of leeway to bail.) We could cut the special logic to explode blastmotes on move from monster.cc and player.cc, but the results were less visually pleasing, so I left them in. We might want to add warnings for waiting in motes, but eh - it's a mistake you won't make too many times. :) -------------------------------------------------------------------------------- ade28b54fc | DracoOmega | 2023-12-22 13:34:22 -0330 Actually set weight of ARTP_ENHANCE_TMUT to 0 It was suppressed in game, but could still generate on items, causing the ocassional randart with only 1 visible property. -------------------------------------------------------------------------------- a19005be0f | DracoOmega | 2023-12-22 13:05:54 -0330 Fix missing Sticky Flame status descriptions in webtiles Higher intensity fire was failing to find the description. -------------------------------------------------------------------------------- 0f3f92e71e | DracoOmega | 2023-12-22 04:13:32 -0330 Fix broken build What a misleading error message. I have now learned that a variable can shadow a member function that it is storing the value of and the compiler will merely act like the function doesn't exist at all without implying the actual problem. I shake my fist at you, C++ -------------------------------------------------------------------------------- a852a4444a | Nicholas Feinberg | 2023-12-21 22:27:18 -0800 Don't crash when barbs kill monsters Broken in 019d70c61ac. -------------------------------------------------------------------------------- c98d92de7d | DracoOmega | 2023-12-21 22:12:41 -0330 Tweak Fugue of the Fallen description to improve clarity a little -------------------------------------------------------------------------------- 98b23dd7b7 | DracoOmega | 2023-12-21 21:21:09 -0330 Lint -------------------------------------------------------------------------------- 85b50b08cf | DracoOmega | 2023-12-21 21:05:45 -0330 Tweak Mercury Vapours in a couple of ways The range is greatly reduced (6->3), weakness formula is tweaked (generally lower chance at most levels, and especially at higher enemy HD), and it now won't inflict any poison on creatures with rPois. In turns out that the rules about whether sources can apply poison to rPos monster 1/3 of the time are very inconsistent, but there's a *mild* lean towards this being true of physical delivery sources (eg: venom brand) and BEAM_POISON (which the player largely has no access to) and false for several other spells - notably OTR in the same starter book. Since Sting already is notable for being part-physical, I think it's fine to make rPois enemies fully immune to the poisoning of this spell. But I do want to keep the weakness effect that operates on a different vector and have slightly tweaked the description to maybe make that clearer. Finally, I have allowed players to cast it on themselves, since this was requested multiple times (believe it or not). By the same rules as enemies, rPois will protect you from the poison application (but not weakness!) -------------------------------------------------------------------------------- c275714b29 | DracoOmega | 2023-12-21 21:05:44 -0330 Apply sticky flame reduction to trampling and dragging monsters This feels like a 'deliberate movement' on their part. This also does a little refactoring of how deliberate movement effects are applied and fixes a bug with no applying new location effects properly to either party involved in dragging. -------------------------------------------------------------------------------- 6d40cd707e | DracoOmega | 2023-12-21 21:05:44 -0330 Shuffle a few Vehumet wrath spells to their correct levels I worried that Vehumet casting new sticky flame on the player might be a bit too strong, but it turns out it could have already hit you with 3d20 energy bolt at xl 9, so maybe this wrath was already a general problem and no player should be testing Vehumet's patience at those levels. -------------------------------------------------------------------------------- 56cbf0ba3b | DracoOmega | 2023-12-21 21:05:44 -0330 Energy Bolt -> Bolt of Devastation, now applies Will/2 (regret-index) An extra effect for a plain spell, drawing on the name of its most frequent user. (Should also synergize with Cacodemons trying to hex a lategame player, as well as several Will checks in Slime). Previous BEAM_DEVASTATION (used only by orbs of destruction now) is renamed BEAM_DESTRUCTION. -------------------------------------------------------------------------------- 7abab0001e | DracoOmega | 2023-12-21 21:05:43 -0330 Refactor applying Will/2 to players and monsters This adds an Actor::strip_willpower() method that unifies applying this status to both types of actors, and generally simplifies the multiple places this is currently applied (AF_VULN, Strip Willpower hex, demonic touch aux, ?vulnerability). Old behavior for adding additional duration to someone who already had 1/2 Will was to not print an additional message, and this is preserved (though should it be?) I have also changed the message for reading a scroll of vulnerability. It always sounded uncomfortably similar to !magic (and even the wild magic card), and since MR was changed to Willpower maybe it should have some theming that feels a little more like it affects being's willpower instead? (Feel free to shuffle the adjective to something else, if there's opposition) -------------------------------------------------------------------------------- 5278e7341f | DracoOmega | 2023-12-21 21:05:42 -0330 Don't immediately affect the player by clouds from the Clouds card The new version of the Clouds card creates a ring of clouds around visible enemies, and will place the clouds beneath the player if the player is already adjacent to an enemy when they draw it. The intent was that, like hostile cloud placement by enemies, the player had a turn to react and step out of the cloud - it is extremely mean to randomly afflict the player with miasma without a warning, even as a card effect! This commit should replicate the original intended behavior by giving a 1 aut cloud immunity if the card places a cloud under the player. -------------------------------------------------------------------------------- 841635c0e0 | Kate | 2023-12-22 00:17:21 +0000 Mark the Arena branch as fully mapped Arena maps are designed to be small and fully within LOS upon entering, and that should stay the case, but the fully_map branch flag is still applicable as it reveals the occasional edge of the spectator area and prevents exploration healing without needing an extra special case (and also prevents exploration piety, in case Okawaru ever ends up caring about it!). -------------------------------------------------------------------------------- cd514f47d3 | DracoOmega | 2023-12-21 14:30:20 -0330 Silence a compiler warning about shadowed variables -------------------------------------------------------------------------------- 273af0913d | DracoOmega | 2023-12-21 14:30:20 -0330 Fix a test failure -------------------------------------------------------------------------------- 9953226333 | DracoOmega | 2023-12-21 14:30:20 -0330 Turn Oni drunken brawling into a real mutation So that it won't overflow the mutation screen and can be examined for a more specific description. -------------------------------------------------------------------------------- 7095806d71 | Nicholas Feinberg | 2023-12-21 09:40:47 -0800 Fix iron giant not having a quote Discussion of souls feels vaguely appropriate for a Hells enemy. -------------------------------------------------------------------------------- 40f9ea6007 | Kyle Rawlins | 2023-12-21 12:39:28 -0500 fix: correctly show email in change email ui on webtiles Luckily, this bug was entirely cosmetic; email was not actually set to null and it was even updated correctly. But it prevented both logging the new email, and showing the new email (or old email) to the player in the webtiles UI. This fix will require a webtiles server restart to activate. -------------------------------------------------------------------------------- b567cfdca4 | DracoOmega | 2023-12-21 02:41:38 -0330 Fix Earth Magic description still mentioning Transmutations (Oneirical) -------------------------------------------------------------------------------- 753d86d23d | DracoOmega | 2023-12-21 02:40:43 -0330 Fix Oni only getting several of their mutations at xl 2 (dillyguru) -------------------------------------------------------------------------------- 7fd7ca34b5 | DracoOmega | 2023-12-21 01:32:18 -0330 Fix tag upgrade builds for oni -------------------------------------------------------------------------------- e2edf0f575 | DracoOmega | 2023-12-21 01:32:18 -0330 Cut Pyre Arrow from Azrael Especially with the introduction of bombardier beetles, there's more than enough prominant sticky flame in the game now. His spell set will be fine without it. -------------------------------------------------------------------------------- 5616923710 | DracoOmega | 2023-12-21 01:32:18 -0330 Remove AF_STICKY_FLAME The only users left are searing wretches, and it doesn't seem too important on them (and they surely didn't need the megabuff the overall sticky flame changes caused them). Besides, I think wanting to move to cure a status works better when you aren't necessarily in melee range of something at the time, too. And it saves me making one more formula sane, too >.> (I removed searing wretches previously-irrelevant 3rd hit and folded some of its damage into their first.) -------------------------------------------------------------------------------- 948705f5d4 | DracoOmega | 2023-12-21 01:32:18 -0330 Revamp Sun Moths Sun Moths are... weird. Why are they holy (in a branch with multiple notable natural necromancy things, for that matter)? What is the halo supposed to accomplish? Why do they resist electricity? They've effectively just been irresistable bolt monsters with decorative sticky flame and while that isn't *nothing*, said bolt of energy is slated to get a will-lowering effect this version and that *also* doesn't do anything in Spider, so this seemed a good time to give them a shake-up. They now have a higher intensity pyre arrow and lose energy bolt and AF_STICKY_FLAME to pick up AF_SWOOP. They will light you on fire and intercept you when you attempt to shrug it off. They lose rElec, become rF++ instead of rF+, and become a little more fragile. I'm perhaps needlessly worried about how dangerous new sticky flame is since I don't have good data on that yet, but the *idea* is that these become one of the most notable sources of it in the game, since it's their primary means of threat (whereas it is secondary on most other enemies that have it). I have also rewritten their description. I am rather fond of it, tbh. -------------------------------------------------------------------------------- 0fc8318213 | DracoOmega | 2023-12-21 01:32:09 -0330 Add Bombardier Beetles to help tutorialize new sticky flame The changes to monster sticky flame make it substantially more dangerous than it used to be, and players used to the old status quo may not realize that moving will greatly reduce damage taken. I made sure to include this in pyre arrow's description, but why would a player who thinks they know how it works look at it again? (And it's too intrusive to tell the player every turn "Are you sure you want to stay still?") So I am adding a monster with pyre arrow to early D. It is intended to be scaled so that it isn't terribly likely to *kill* players, but may still naturally teach them how sticky flame works before they reach enemies who *can* kill them with it. It is a speed 6 creature, so it gives the player plenty of time to run away from it while on fire (or even incidentally discover that they can shake off sticky flame via movement when they charge *towards* it.) and is otherwise fairly harmless in melee. -------------------------------------------------------------------------------- 3627872b49 | elliptic | 2023-12-20 23:43:34 -0500 Add a break -------------------------------------------------------------------------------- 990ad9562c | elliptic | 2023-12-20 23:41:23 -0500 Don't display gem intactness info on the game end screen without Options.more_gem_info But still write it to the vmsg logfile field. -------------------------------------------------------------------------------- 81216b26b2 | gammafunk | 2023-12-20 21:05:34 -0600 fix: Don't used runed doors in a vault (Midn8) The vault jmf_multi_god_temple2 apparently got runed doors when it previously had secret ones and we removed secret doors. It places normal level spawns, so it shouldn't be runed at all. Not to mention hiding overflow altars behind runed doors is generally a bad idea. -------------------------------------------------------------------------------- 013ef95028 | Nicholas Feinberg | 2023-12-20 18:13:31 -0800 Always include full gem info in logfiles (elliptic) Oops! -------------------------------------------------------------------------------- 8c40ea976f | DracoOmega | 2023-12-20 19:21:22 -0330 Checkwhite Some day I will remember to do this before pushing instead of afterward. ... Maybe. -------------------------------------------------------------------------------- afeb8edd3b | DracoOmega | 2023-12-20 19:15:33 -0330 Change player Ogres into Oni, shorten Armataur tongues Ogres are considered a fairly weak player species, and have been arguably additionally troubled by the fact that most of the ogres the player ever encounters in the dungeon are dumb giant club brutes - leading new players to assume this is the core ogre playstyle, despite many veterans arguing that they make better mages than fighters, and that 1-hander + shield is the better choice for them. Simultaneously, there's been a desire to cut armataur's doubled potion gimmick. Their new regen-on-rampage is already very strong, and does a better job of emphasizing the species' core movement gimmick than long tongue does, and it is much easier to reasonably balance their power without TWO big sources of healing. (Inversely, despite their large hp pools, ogres can be paradoxically fragile and could definitely benefit from the additional potion healing.) So I am simplifying that mutation, moving it to ogre, and rethemeing them slightly to give the mechanic a stronger flavor fit. Player Ogres are now Oni. Leaning into the mythical backdrop of them being legendary drinkers and brawlers, oni gain doubled health and magic from any potion that restores these (ie: !curing, !heal wounds, !magic, and !ambrosia, and when they drink such a potion, they also make an immediate attack against all enemies surrounding them. Cleave with a giant spiked club, just so long as you have enough on hand to drink while you do it! Oni apts are mostly the same as Ogres, with the following changes: Maces -1 -> 0 Armour -2 -> -1 Shields 0 -> -1 Invocations 1 -> 2 People have clamored for ages for the most obvious wielder of giant spiked clubs in the game to not have a negative apt and that seems reasonable to me (the ancient +3 they had made this more of a no-brainer, but 0 probably leaves other weapons sufficiently appealing) Slightly better armor and slightly worse shields apt (along with drunken brawling) may also nudge them a bit more towards 2-handers without making them obviously correct. And +1 invocations due to their famous associations of working for the celestial bureaucracy (as torturers... >.>) They have also gained horns 1 (they already were too large to wear helmets, so this is a minor buff than a new restriction - also oni are usually depicted with horns). I toyed with the idea of giving them built-in shoutitits 1, with rewritten messages so that they kept bellowing challenges and taunts at random enemies. And while I think the flavor of this is *hilarious*, I worry that their buffs might not entirely compensate for this downside. Or maybe it would be fine along with some other minor tweak? Either way, this hopefully does a somewhat better job of selling the fantasy of the species one is playing as, while providing a unique gimmick to play with. (Enemy ogres are staying as ogres - it would defeat some of the purpose of this if they changed - but Erolcha specifically may be slated to become an oni instead) -------------------------------------------------------------------------------- 33de52bd5f | Nicholas Feinberg | 2023-12-20 12:13:41 -0800 Axe slime gem time (elliptic) Empirically seems a bit too easy at the moment. Reduce the clock from 1500 dAut to 1000. -------------------------------------------------------------------------------- 12b4d39fdb | Nicholas Feinberg | 2023-12-20 12:01:42 -0800 Don't heal poly'd mons (MysticSailboat) Polymorphed monsters getting a huge heal was added in 0c496e0be39 (0.4, 2008) without explanation. It doesn't seem intuitive or needed, and is actively counterproductive for Nemelex's Degeneration card in combination with other Destruction cards, so let's cut it. (It was also completely undocumented, as far as I can tell. Of course!) Shapeshifters get to keep healing on each shift, as before. Slimified monsters explicitly get a full heal, since that feels right to me ( ✨ vibes ✨ ). -------------------------------------------------------------------------------- 0d4b2e2ecf | Implojin | 2023-12-20 11:28:13 -0600 fix: Don't let blastmotes grant cloud immunity (Drazool) Previously, players casting blastmotes could stand on the tile where it was cast, gaining immunity to all types of clouds as long as they didn't move. This kind of elbereth-tech seems undesirable (especially so for a level 3 spell), so this commit allows other cloud types to overwrite blastmotes. -------------------------------------------------------------------------------- 06160a9761 | Implojin | 2023-12-20 11:01:54 -0600 Let searches for rPois match alchemy staves (particleface) Looks like an oversight with the staff rename. Thanks to particleface for reporting this! -------------------------------------------------------------------------------- 5021b54cb2 | DracoOmega | 2023-12-20 03:30:53 -0330 More fixups to Mercury Vapour Properly print a message when casting at a protected ally or empty space and don't warn the player about casting on allies that won't be affected anyway (including other allies that are poison immune) Also: don't display the weakness success chance in negative numbers if it's 'below' 0% -------------------------------------------------------------------------------- 783b6e986b | DracoOmega | 2023-12-20 02:59:29 -0330 Let Hep ancestors properly avoid Mercury Vapours And Fedhas plants too, I suppose :P -------------------------------------------------------------------------------- 078f9b89d1 | DracoOmega | 2023-12-20 02:43:25 -0330 Copy beam.hit_verb in bolt_parent_init It's not clear why this wasn't being done, and I don't see what harm would come from doing so. In fact, several pieces of code seem to have already expected that this happened, and specified hit_verbs that were never used. -------------------------------------------------------------------------------- 5fad861c52 | DracoOmega | 2023-12-20 02:43:16 -0330 Make Malign Offering into a zap So that its damage can be shown when examining monsters. -------------------------------------------------------------------------------- dfb52cbc09 | DracoOmega | 2023-12-19 22:09:08 -0330 Fix a Mercury Vapours crash I must have reordered some of this *after* testing it... -------------------------------------------------------------------------------- 23da92e3a2 | DracoOmega | 2023-12-19 21:14:57 -0330 Fix a couple custom randbook uses of Poisonous Vapours that missed renaming -------------------------------------------------------------------------------- cae00c0fb1 | DracoOmega | 2023-12-19 20:27:12 -0330 Shuffle spellbooks a bunch The book of Changes was incredibly sad (and nonsensically named) with just Sting and Irradiate, and attempting to touch this up caused a chain reaction (which hopefully still improves the status quo). Unrestrained Analects loses Ignition and gains Ozocubu's Refrigeration. Book of Battle returns, with Ozocubu's Armour, Manifold Assault, and Fugue of the Fallen. Book of Changes renamed to Book of Spontaneous Combustion, containing Inner Flame, Irradiate, and Ignition. Book of Alchemy renamed to the book of Transmutation (but contains the same spells as before). Book of Minor Magic lost Mephitic Cloud and gained Blink. Book of the Senses gained Mephitic Cloud. Book of Blood gained Call Imp (since apparently there was only one book that had a copy of it) Book of Cantrips gains Sting. Book of Death loses Fugue of the Fallen. Book of Misfortune loses Inner Flame to gain Jinxbite. Book of Danerous Friends loses Jinxbite. Ozocubu's Autobiography and the Inescapable Atlas were cut. The latter's description didn't really make any flavor sense with its spell set of Blink and Manifold Assault. It's a shame to lose two of the best book descriptions, so I adapted most of the former for Book of Battle. Trismegistus Codex loses the joke about all its spells having 3 schools, but the only other 3 school spell remaining is Mephitic Cloud which already shares another book with Freezing Cloud. Alas. -------------------------------------------------------------------------------- 952b61244d | DracoOmega | 2023-12-19 20:27:11 -0330 More minor Alchemy spell adjustments Change Fulminant Prism into Conjuration/Alchemy. (The Hexes part was always dubious flavor, but I'd wanted *something* non-elemental that wasn't conjurations itself.) Cut Dazzling Flash from Conjurer. It made a lot more sense when this was Dazzling Spray and did actual damage, and now that no other spell in the book needs hexes, it makes sense to remove it. Slightly sad for the book to have 4 spells instead of 5, but its power level should barely be affected. Slightly buff Sting impact damage at max power and increase its range by 1. Technically it's marginally harder to reach max power than before, but also while this remains the only spell that Alchemists can use against rPois enemies until Sticky Flame, it might to be just a tiny bit better. Also change Sting's description. -------------------------------------------------------------------------------- b5f9efb42b | DracoOmega | 2023-12-19 20:27:11 -0330 Poisonous Vapours -> Mercury Vapours Poisonous Vapours was in a somewhat awkward position, where at very low power, it would often inflict less total damage than sting for twice the mp - something a very early character often cannot afford, even with vapour's more generous targeting. It became much better with more mp and spellpower, but by that point you could often cast OTR which usually outclasses it. This attempts to give it secondary appeal, even while sandwiched between those two starter spells, and give a little bit more alchemy flavor. It is still a smite-targeted direct poison spell, but it additionally has an HD-based chance to inflict weakness on both the target and any adjacent to it - regardless of poison resistance. It is also slightly more generous with posion application if the target was not already poisoned, and a little less generous at reaching full stacks. I also reduced its range to 6. The current weakness success chance is: 100 - max(0, (victim_hd * 12 - pow * 2 - 10)) which aims to make it fairly reliable against early enemies, but drop off severely against later ones - even at max power. (Enemies not in the center of the spell have only 2/3rd the normal chance to be affected - I am not sure if this is a necessary complexity or not). -------------------------------------------------------------------------------- 019d70c61a | DracoOmega | 2023-12-19 20:27:10 -0330 Revamp Sticky Flame (the status and the spell!), give to Alchemists Sticky Flame, the player spell, has been widely considered to be a little sad for a while; the attack of opportunity changes hurt kiting with it a lot, and there are generally more appealing fire options at a similar level. And Sticky Flame, the status used *against* the player, has been even sadder for far, far longer. It doesn't scale with the enemy applying it and does such a trivial amount of damage that it can be completely ignored in virtually all situations. This commit aims to address both of these issues simultaneously and give Alchemist a new toy at the same time (as well as a better tool in their kit to deal with rPois enemies). Sticky Flame (the status) now does more damage per turn than it used to (*far more* against players) and has a generally longer duration, but is removed rapidly when the victim moves instead of performing other actions - essentially a sort of 'reverse barbs'. The per-turn damage of the player status also scales directly with enemy spellpower, so that both smoke demons and balrugs can threaten appropriately for their depth. The idea is that this status will do significant fire damage over time unless the player actively attempts to put it out - but not so much that it is always correct to drop what you're doing and do so. The status effect still does fixed damage per turn to monsters (though higher than before), but monsters *also* put the status out much faster when they move - meaning that when the player lights a monster on fire, they will now want to stand in place next to it rather than move away and waste most of their spell, which should hopefully bring interesting positional decisions, especially when combined with the rest of alchemist's starting kit. Sticky Flame has moved from Conjurations/Fire to Alchemy/Fire and added to Alchemist's starting spells. It should do meaningfully more (and more consistent) damage to targets, so long as you can actually remain near them. Also, the monster spell name 'Sticky Flame Ranged' was always a historical holdover and somewhat confusing considering the multiple ways in which it was different than Sticky Flame, so it is now further divorced from the player spell and renamed Pyre Arrow. It deal no impact damage at all (while the player spell still does, as a means of additional scaling, considering that the damage of sticky flame against monsters is fixed). Monster spell info displays the *per turn* damage taken from the sticky flame status this spell applies. (Alas, this is currently not true and also complicated for the player version when used by player ghosts...) I have also done a bunch of internal renaming and light refactoring. No longer do we have a DUR_LIQUID_FLAMES, but an ENCH_STICKY_FLAME, and then apply them both with a function called 'napalm', but instead use sticky_flame consistently. There are a LOT of numbers and formula changes in this commit, and I have done my best to make them vaguely reasonable, but I have no doubt that some will need playtesting adjustment - especially since this is a new dynamic being introduced both for and against players. -------------------------------------------------------------------------------- 614289c723 | DracoOmega | 2023-12-19 20:27:02 -0330 Wereblood -> Fugue of the Fallen (level 3 Necromancy) Wereblood has had somewhat weird thematics ever since Shapeshifting took over all of the 'transform self' effects from Transmutations. Necromancy, on the other hand, is a natural fit for a spell that is powered by killing things. This has the following mechanical changes over current Wereblood: -The healing effect is removed -Ally kills now boost the effect (but allies themselves do not benefit from it in any way) -Max stacks reduced to 7 instead of 9 -At maximum stacks, successful hits will inflict minor pain damage to all adjacent targets to the one you attacked. A little bonus for the tricky task of maxing it! -Moved to level 3 I haven't put this in the necromancy starter book. Wereblood was never great at low levels, since you usually can't sustain fights long enough to build it and struggle to kill already. I think there's no way a necromancy wants to use their mp on this instead of vampiric draining, and it's more interesting if the spell is intended for later use. Also: this gives players more incentive to splash necromancy on a hybrid that doesn't involve allies! To avoid the player needing to worry about whether any individual monster they kill has a 'soul' or whatever, the spell is themed as using fresh death to draw in the spirits of the long-dead that already linger everywhere in the dungeon (I mean, there's enough corpses in every inch of the dungeon that BVC works, right? :P) -------------------------------------------------------------------------------- 8f7eaaa2f0 | DracoOmega | 2023-12-19 20:26:54 -0330 Merge Poison Magic and Transmutations into a single school: Alchemy When forms were removed from Transmutations to create talismans/shapeshifting, the Transmutations school was left in a slightly awkward state. It still contained multiple strong and useful spells (eg: Irradiate and Yara's) but was a little thin on the whole, especially at lower levels, and lacked natural inroads. And Poison Magic has long had issues with being overly narrow in thematic scope compared to other schools, as well as lacking exciting lategame spells. This merger attempts to improve both issues at once and open up more interesting future design space by combining the two schools into one: Alchemy. This makes several higher level transmutations spells more natural to access, give the Venom Mage start (now Alchemist) more lategame things to look forward to, and potentially allows for the design of more varied means of doing damage than poison. All spells that were either Transmutations or Poison are now Alchemy, with the following notes: -Ignite Poison moved to level 4 since it's now 2 schools instead of 3. -Eringya's Noxious Bog was left at level 6, despite becoming single-school since it's already widely considered unappealing and this might help it. -Sting became Conjurations/Alchemy. -Wereblood is slated to be rethemed and moved to Necromancy, but isn't yet. Most species aptitudes for Transmutations and Poison Magic were already the same. Cases where that was not the case are listed below. -------------------------------- Transmutation/Poison -> Alchemy Demonspawn: -1/0 -> 0 Felid: 1/-1 -> -1 Formicid: 1/3 -> 3 Gargoyle: -2/0 -> -2 Ghoul: -1/0 -> -1 Hill Orc: -3/-1 -> -2 Merfolk: 3/1 -> 3 Minotaur -2/-3 -> -3 Naga: 0/3 -> 2 Octopode: 0/2 -> 1 Spriggan: 3/0 -> 1 Tengu: -2/0 -> -1 Vampire: 1/-1 -> 1 -------------------------------- This vaguely averages apts, with a slight bias for the original poison skill (and some personal subjective opinion here and there). Formicids and Merfolk both keep their +3 poison apt - the former because it can easily handle the buff, the latter because it's just too good to let merfolk make their own bogs to swim in. Felid apts are in line with their other offensive-focused magic skills, Gargoyles inflexible nature makes them less adept at inducing change in others, and Vampires have traditional thematics around transformation that makes a +1 feel appropriate to me. Ashenzari's Curse of Beguiling loses Conjurations, and the old Curse of Alchemy is renamed Curse of Sorcery (Conjurations + Alchemy). Alchemy miscasts inflict the poison status on the player. (I kind of prefer the idea of them inflicting corrosion instead, though no player Alchemy spell can yet do this, so I'm not sure how people would feel). Messages are provisional, but frankly the miscast system in general has issues with the fact that messages cannot check player properties (cf: ghouls getting messages about how they violently convulse in pain, then take 0 damage) and could use separate work. The Plutonium Sword is decoupled from transmutation miscasts (which no longer exist). I have also added back a vague approximation of the direct damage they used to inflict before the big miscast simplification of a couple years back. Save upgrading will grant players Alchemy skill equivalent to the sum of old Poison and Transmutation skills. Alchemy randbook words are a partial merger of old Poison and Transmutation book words, with heavy cutting, curating, and addition of things. (I tried to prune things directly associated with shapeshifting, as well as poison words that seemed too close to disease and putrescence in a 'gross' sense - instead trying to lean into a more academic vibe for such things. Also added a decent handful of specifically-alchemical references.) Still slightly awkward that it can use poison words for a book containing no spells that poison, but probably no worse than randbooks often are. (Gloorx can stay as a high-level alchemist. Hot new DCSS lore!) -------------------------------------------------------------------------------- bf3fed316f | Nicholas Feinberg | 2023-12-19 11:08:34 -0800 Tweak gem notes (Ge0ff) Include spare time. Also, remove spite for consistency. -------------------------------------------------------------------------------- a3cce3a448 | elliptic | 2023-12-18 22:06:53 -0500 Swap the order of gems and runes on the win screen. It makes sense to have runes be first and closer to the Orb since they are more important than gems. -------------------------------------------------------------------------------- 5f2baee751 | Nicholas Feinberg | 2023-12-18 16:12:21 -0800 Remove undocumented Chei/gem interaction Was surprising and probably not needed for Chei to slow gem timers. We can reconsider this later, of course, but if we do we should probably make Chei slow the rate at which gem_time_spent accumulates, so players aren't incentivized to consider swapping to Chei while almost out of gem time. -------------------------------------------------------------------------------- 7208ddb293 | Nicholas Feinberg | 2023-12-18 15:54:15 -0800 Align colons In monster stat blocks. Boy, what a bother! :) -------------------------------------------------------------------------------- a3531c41b4 | Nicholas Feinberg | 2023-12-18 15:13:07 -0800 Reduce slick slippers price by 30% Since its downsides aren't really factored in. This might be overkill. -------------------------------------------------------------------------------- dfd56e322c | Nicholas Feinberg | 2023-12-18 15:09:19 -0800 Tweak repulsion ego description The old one was unclear to some, helping contribute to the perennial repulsion-reflection mix-up. Maybe this will help? -------------------------------------------------------------------------------- b28be9a5f2 | Nicholas Feinberg | 2023-12-18 15:09:15 -0800 Fix the build -------------------------------------------------------------------------------- 27c7112c99 | Nicholas Feinberg | 2023-12-18 15:05:29 -0800 Ban double flying talismans (Flugkiller) -------------------------------------------------------------------------------- 7e11add784 | elliptic | 2023-12-18 13:04:13 -0500 Remove a comma -------------------------------------------------------------------------------- b6740aa4e6 | Nicholas Feinberg | 2023-12-17 21:43:32 -0800 Fix a sneaky inugami bug We didn't erase CANINE_FAMILIAR_MID when we changed levels, meaning that we might accidentally believe that some other random monster on the new level was our beloved dog. When we cast call canine familiar, we could end up buffing and healing a random, probably hostile monster, or just being unable to summon a new dog. Pretty good! This whole mid-based approach is very scary to me (it feels quite fragile), but it's what we're doing for spectral weapon, so maybe it's fine? I wonder about tagging the dog instead of the summoner, though. -------------------------------------------------------------------------------- 9785b71c3f | Nicholas Feinberg | 2023-12-17 21:42:24 -0800 Simplify some inugami code and fix a minor bug Mostly minor refactoring, but also fixes a bug in which, if something copied your inugami (phantom mirror, Mara, etc) and then the copy died, the game would think your inugami died (and would set a cooldown, prevent you from healing/buffing your dog, etc). This is important for all those times that you use phantom mirrors on your dog. -------------------------------------------------------------------------------- 0c0848231e | Nicholas Feinberg | 2023-12-17 16:51:43 -0800 Darken non-present monster resists -------------------------------------------------------------------------------- 0d254b9dff | Nicholas Feinberg | 2023-12-17 16:22:01 -0800 Continue removing gems from descent They don't really work properly, IMO. We can revisit this later. (They were already disabled in the UI.) -------------------------------------------------------------------------------- 8770774cb4 | Nicholas Feinberg | 2023-12-17 16:19:50 -0800 Fix hiding lost unvisited gems (CarefulOdds) The gem UI is supposed to hide unfound and broken gems by default, to avoid demoralizing players by telling them about things they can never get. However, if a player had run out of time for a gem but the gem's floor hadn't been visited yet, that gem wouldn't be hidden. Fix that. -------------------------------------------------------------------------------- 407de8339a | Nicholas Feinberg | 2023-12-17 16:13:50 -0800 Hide clock for held gems by default (elliptic) Just getting a gem is enough of an achievements. Some players find it stressful to be informed that their gems will shatter even after they get them. (Quite understandably!) Hide gem shattering behind a new, default-false rcfile option. This has no effect on score, it just makes 'gems shattering' into an even-more opt-in mechanic. -------------------------------------------------------------------------------- 1c27f8a97b | Nicholas Feinberg | 2023-12-17 15:40:19 -0800 Don't fear Zot Continue removing Meteoran. -------------------------------------------------------------------------------- 5190ab2d73 | Nicholas Feinberg | 2023-12-17 15:13:38 -0800 Add a price for artefact spell enhancers This code is bad! -------------------------------------------------------------------------------- 0cff9e4079 | Nicholas Feinberg | 2023-12-17 15:13:38 -0800 Wizmode: show item value in xv I forget if there's another way to do this. -------------------------------------------------------------------------------- 5386780bc2 | regret-index | 2023-12-17 19:12:56 -0330 Re-order alligator attacks As with trample, dragging needs to be the last attack in a monster's list of attacks, or it won't do further attacks after it moves. It's a little weird for them to tail-slap before biting, but I wasn't intending for alligators to lose quite so much melee damage against higher AC characters, so it has to work out this way unless a fair ways more material is rewritten. -------------------------------------------------------------------------------- 4d4119cd44 | regret-index | 2023-12-17 19:09:20 -0330 Buff protean progenitors in various differing ways The general reception of them seems to be that they're cool but a little weak for Zot. Progenitor wise, they get a bit more melee damage in base form and their band chance goes from 33% to 66%. Aspirant wise, the flesh has a bunch more health, slightly less maximum time before each polymorphs, HD 10 is guaranteed the third flesh now, and a fourth appears if poly code manages to pull out HD 8 or lower. If this still isn't enough, possibly we could fiddle around with the shapeshifting HD or the higher HD's spawning count, or we could make one of the flesh piles drop off at half health instead of waiting until they death. -------------------------------------------------------------------------------- cfba0412b6 | regret-index | 2023-12-17 18:33:24 -0330 Bump up Bai Suzhen's transformation threshhold a little. Her transformation gimmick is somewhat inherently stymied by Crawl's randomness sometimes going far past her hard 50% HP threshhold. It was originally set a little low because she had more of a gimmick in her first phase (rain clouds ring to help her getting fast amphibious movespeed in the second phase), but since she doesn't have said first form gimmick, it's plain enough that it doesn't need to stick around for as long. I'm nudging it to 66% health instead. -------------------------------------------------------------------------------- 8606b069a1 | regret-index | 2023-12-17 18:25:17 -0330 Double klown pie Vitrify (flugkiller) Klown polymorph was much longer than most other statuses from the pies or from polymorph in general, so its replacement could do with being longer. This also further differentiates it from the hex. Enjoy the gelatin. -------------------------------------------------------------------------------- 2f004bd33d | regret-index | 2023-12-17 18:19:20 -0330 Fix some absent gems and a crystalized boss. grunt_lair_end_beastmaster lost the titular troll when the earthy gem was added to that vault. Also, all the scaling vaults for Depths that can have a Zot entrance weren't touched (same with the D vaults that could have a Depths entrance), so they didn't place any gems properly. 866d48a was an admirable effort, nonetheless, but this should fix up more of its wake. Also did some cleaning up while I was looking through all of these. Of minor note was finding out grunt_runaround was set up for D:15 but never actually placed. I'm heavily nerfing the Depths entrance it set up, though. D:15 is not a place for a titan, two hell knight bands, and a shrike in the same room. Eventually, I'd like to adjust most of these vaults to place the gem not underneath the rune or other loot or on the Depths / Zot entrance, so that they can be admired on the floor as the sparkly gems that they are. Probably later, though. -------------------------------------------------------------------------------- dddd49282e | Nicholas Feinberg | 2023-12-17 12:45:43 -0800 Tweak some gem colours -------------------------------------------------------------------------------- b2fffa6d40 | Nicholas Feinberg | 2023-12-17 12:41:56 -0800 Increase Tomb gem time (Oneirical) The odd structure of Tomb makes it a bit harder to get through than most branches. -------------------------------------------------------------------------------- 03ee008336 | Nicholas Feinberg | 2023-12-17 12:17:26 -0800 Make malign offering less noisy (Hal) Don't print messages when you can't see any participants. -------------------------------------------------------------------------------- cef503e1cc | Nicholas Feinberg | 2023-12-17 12:14:39 -0800 Remove $ (regret-index) Typo in 866d48a76e53198ac7dee08fed80d99590233fe9, probably. -------------------------------------------------------------------------------- 2402ceb476 | Nicholas Feinberg | 2023-12-17 12:12:01 -0800 Remove orc gem As with other gems, the orc gem was intended to be an interesting challenge in itself and to also contribute to the difficulty of the 'all gems intact' challenge. However, Orc's layout meant that players would often reach the gem quite quickly, even in normal play - not an interesting challenge. Tightening the time limit would mean that Orc was a bit more inaccessible than intended. As it was, travel time to/from Elf and shopping could already create heavy pressure on the timer. Let's cut the glittering gem for now. This makes the 'all gems' challenge a bit easier, and encourages resting in Orc instead of in Elf:1, but that's liveable. (And similar to other cases re: resting in Temple, etc.) It could be interesting to instead make the Elf gem include the Orc branch in its timer, so it has a longer overall timer but ticks down while the player is in Orc as well as Elf. That has too high a UI and complexity burden to be justifiable, though, probably. Trivai: one now reaches 27 by adding 15 runes + 11 gems + 1 orb. -------------------------------------------------------------------------------- e6b85068f3 | elliptic | 2023-12-17 13:55:27 -0500 Don't let Kiku wrath drain all the player's MHP in a single turn (Oneirical) Still a substantial amount of drain with no rN (30%-50% of player MHP). -------------------------------------------------------------------------------- 1fbed5ca12 | regret-index | 2023-12-17 07:07:08 -0330 Juggle arcanist and occultist spells one last time, hopefully Arcanists don't have nearly enough damage spells to make use of their Vitrify hex, while Occultists are still kind of weird on theme and power. Occultists give Force Lance to Arcanists (who lose Blink) so the latter can still maintain distance while also being more likely to properly sequence the buff / hex -> hex / buff -> blast designs. Occultists get Poison Arrow in exchange because poison correlates somewhat with their names and also it does more direct damage for more circumstances so they're less sad in Depths. Still don't entirely know how I feel about either, but they're better off than ~6.5 banishers per Vaults trip were, I guess. -------------------------------------------------------------------------------- ad7a08865a | regret-index | 2023-12-17 07:04:56 -0330 Buff and shorten Vitrify, update UI around it, spread it a little more Vitrify seems to have been relatively well recieved for the prospect of having a new dangerous Hex beyond paralysis and banishment, but there's been relatively low fears of it due to the conservative rate it started out at. I'm buffing it from +30% damage to +50% to make it match the damage numbers of negative resistances and be dangerous enough it has to be worried about immediately. The gaze goes from increments of 6 to 10 turns to 4-8 turns, and the spell goes from 8-24 to a less harsh cap of 8 to 18. To correlate with this buff, the default messages settings now make players being vitrified get the same danger colours as constriction and corrosion in the message log. I'm also adding the exact damage increase it inflicts to the % screen, to correlate with the exact numbers currently displayed for harm. There was a fair bit of divided opinion in multiple places regarding percents like Harm currently uses versus multipliers instead, or if it should be be made additive instead of multiplicative with Harm. There's little agreement on the latter, but the biggest opinions were to display it like current Harm but seperately of the full indicator, a "+50% damage incoming" which kinda lies if one also has Harm active. I sort of prefer the multiplicative approach, parsing and expectations-wise, but if other devs feel strongly about rAll- being additive instead of multiplicative (or alternatively, if the display should multipliers or combine the damage incoming together or whatever), they may do as they wish; I cede the ground to them. Since the previous state of the effect worked out fine prior, it should also be reasonable to share it with more than just a few paralyzers: * Cacodemons lose the boring Slow and Confuse combo to cast Vitrify and a bit more Bolt of Energy. It sort of fits the matter / flesh shaping theme Dig and Malmutate already had, and lets them cast a flashier hex for greater demon summoning / Pan than spells present the whole game long. Maybe their Bolt of Energy could be looked at next for being so plain... * Klown pies swap out Polymorph in their effects list for Vitrify. There's been some consternation about melding the entirety of one's armour being far more lethal than most other possible effects around between AC and resists, and this makes one still reasonably frail while both keeping one's built-up-all-game-long defenses / resists and varying once more from the hex or the gaze by checking EV and LoF instead of Will or LoS. -------------------------------------------------------------------------------- 11c5b68f87 | regret-index | 2023-12-17 02:00:15 -0330 Small Xom overflow and Orc decor vault batch The Xom vaults were inspired by 6d556a0 and 292434c. Probably the 0.2% chance for Xom to present completely unusable randarts is fine, alongside the 2% chance for a pile of box of beasts mimics. The Orc decor vaults are all somewhat inspired by Orc ends in various fashions and are meant to help a little bit with making an Orc decor guarantee, alongside the additions from PR #3325 whenever that's done. -------------------------------------------------------------------------------- 9d81352419 | Implojin | 2023-12-16 17:36:35 -0600 Let Humans rest before exploring (PI-314, Patrick2011b) By giving Humans explore regen, f11e229afd introduced a bug where Hu wasn't properly resting to full before autoexploring. This commit fixes that by reverting 32f4ba3753, which is no longer needed now that Meteoran has been removed. -------------------------------------------------------------------------------- a6fa84c583 | regret-index | 2023-12-16 20:05:07 -0330 Fix a deep water gem (elliptic) Speedrunning is one thing, but we can't really expect most players to dive through deep water too. -------------------------------------------------------------------------------- b81609b7df | regret-index | 2023-12-16 19:56:43 -0330 Crunch down Saint Roka's band later on, restrict their later range Roka's range is extremely wide for a unique heavily dependent on earlier game spawns- Orc, Snake, Elf, Vaults, Depths, and Crypt. While it's cute and thematic that they're bringing even plain orcs as deep down as Depths and Crypt, those spawns are also extremely sad individual spawns and a very weird explicit sign of Roka being just around the corner. In the spirit of how orc warlords can spawn in Vaults with just a few orc knights, Saint Roka's band is now substantially stronger in Vaults, Depths, and Crypt- instead of 8 to 16 non-warlord orcs, wargs, or trolls, the band has been bound to just 5 to 8 of knights, sorcerers, and high / priests. Roka has also been excluded from Depths:3-4 and Crypt:3 in the process. Hopefully this should make them a little more interesting as a unique that scales based on their placement. -------------------------------------------------------------------------------- b2a365499e | regret-index | 2023-12-16 18:46:33 -0330 Juggle around the unused monster tiles folder some more Considering a fair number of the tiles will forever exist in the git history, rltiles/UNUSED is a weird batch in an untidy closet we're evidently never going to bother to fully clean out. There's tiles in here that are in active use at the current moment, older versions of currently present monsters (fine for former-humans, baffling for generic demons), and a variety of tiles that wouldn't really past muster for any even short-term use. Whatever gets here versus entirely removed basically boils down to random chance based on a dev bothering to keep given tiles or not. This brief tour cuts out dozens of redundant or mediocre tiles left lying around, alongside tiles currently in use one way or another. It also adds back a handful of tiles that look any decent, to help out with making future placeholders and to help out other works using the rltiles CC0 license. (It adds a bit to the repository, but crawl's tiles are so so tiny that it adds no real burden compared to e.g. adding whatever new splash screens we get.) Re-added tiles here include coolio's spirit and griffon, roctavian's death ooze / ravenous mimic / giant mite / ants, and Denzi's rock worm. Also, all the non-tall lord / Tiamat tiles are now consistently labeled as .small. If anybody really misses some of these tiles, maybe we could do with a subfolder for this that contains every tile we've replaced or removed, seperate of the main folder. -------------------------------------------------------------------------------- 5f6fb4f5a3 | regret-index | 2023-12-16 18:46:32 -0330 Add and trim a few Xom spells and cloud trails. New spells: Wereblood, Animate Armour, Battlesphere, Malign Gateway. Wereblood forces the player to make noise and thus is neat as a mixed blessing, Animate Armour gets to by-pass its innate castability versus armour weight issues to be more interesting as a random free god act, Battlesphere makes for a decent joke if not actually usable and compensates for the power of the two summons here, Malign Gateway has been missing since the miscast streamlining and is extremely appropriate between the chaos brand and unavoidable neutrality. (These all are exchanged for Canine Familiar, which can't use one of its most interesting aspects in the recast and thus will mostly make players unavoidably get drained and guilt.) New cloud trail clouds are salt and blastmotes, both at miniscule chances. The salt's purpose is obvious, while the blastmotes are manually set at 25 power (power with those is weird and modular) and definitely give a certain kind of danger and excitement very distinct from the spell by getting them without having to stop for laying each of them. -------------------------------------------------------------------------------- 9f703e4c1d | DracoOmega | 2023-12-16 18:07:29 -0330 Don't drain the caster when their inugami dies This was originally intended to incentivize keeping your familiar alive, but the recast cooldown probably does a sufficient job of that in the earlygame on its own. More importantly, this interacted extremely poorly with guardian golem, repeatedly punishing the player for ever daring to use them together. While I fully intend to do something with golem itself in the near future, this should help smooth over some bad gamefeel in the meantime. -------------------------------------------------------------------------------- 3cd9a69821 | elliptic | 2023-12-16 11:53:09 -0500 Fix the intact gem count Previously it was subtracting 1 for gems that shattered without ever being picked up. -------------------------------------------------------------------------------- 7a52a54ec8 | elliptic | 2023-12-16 10:30:55 -0500 Buff Jiyva MP regen to match the amulet (acrobat) This is the same size buff that amulets of MP regen got in 12fdbb3a, so now the HP/MP regen ratio under Jiyva is again the same as between the respective amulets (so at max piety Jiyva regen boosts are the same as a free amulet of Vitality). I'm somewhat wary of making too much MP regen available in general (there's a reason why MPRegen isn't a randart property and HPRegen is), but on a non-temple god like Jiyva it seems fine to go a little crazy. -------------------------------------------------------------------------------- c9949b0d25 | Nicholas Feinberg | 2023-12-16 07:30:43 -0800 Fix gem time warning force_mores Broekn by fedaa185804df896b16962672e4947481c4ad31f. -------------------------------------------------------------------------------- 048bac5d70 | Implojin | 2023-12-16 08:49:40 -0600 feat: Armataur rollpage MPRegen Several players have noted that after the max HP nerfs in b2354cd04e and 593ecc88b7, Armataur book starts seem to be in a pretty rough place, especially before XL 7. The intent of this commit is to help out earlygame Armataur caster backgrounds while maintaining the reduced HP from those earlier commits -- to do that, I've here added rollpage MPRegen, given at XL 1, at a regen rate relative to the current At HP regen numbers. This leaves Armataur's mutations in a more mechanically complex place than I'd like: Probably some further simplification is now appropriate here, but I'll leave that to a future commit. -------------------------------------------------------------------------------- fedaa18580 | Nicholas Feinberg | 2023-12-15 22:28:31 -0800 Various other gem fixes Tweak wording of warnings and add a screen flash on shatter. Don't claim there's a noise - there isn't and shouldn't be. -------------------------------------------------------------------------------- dc1e8866aa | Nicholas Feinberg | 2023-12-15 22:28:31 -0800 Fix more bonus gem warnings (elliptic) Don't warn on entering a branch when a gem is nearly shattered *unless* you actually have the gem. -------------------------------------------------------------------------------- aa4636e842 | elliptic | 2023-12-15 22:06:53 -0500 Give 10 times as much score for gems in winning games (still not very much). This makes each gem give 5-10% extra score in a typical 3-runer win, which seems fair enough. Also, this makes picking up a gem that is "on the way" very likely to be (slightly) score-positive even in speedruns. -------------------------------------------------------------------------------- 094a60cb62 | Nicholas Feinberg | 2023-12-15 18:09:26 -0800 Show gem turns in E Per zot clock. -------------------------------------------------------------------------------- 0072eaf8aa | Nicholas Feinberg | 2023-12-15 17:40:21 -0800 Support alternating elemental colours Looks much nicer for current uses (gem names, spell damage). -------------------------------------------------------------------------------- 521f287fb9 | Nicholas Feinberg | 2023-12-15 17:40:21 -0800 Unsort elemental colour text On further consideration, it looks nicer scrambled. Ideally what we'd want is to have the colours cycle in an orderly fashion, but that's a little fiddlier. -------------------------------------------------------------------------------- 31605cc404 | Nicholas Feinberg | 2023-12-15 17:40:21 -0800 Make glittering gems gold Looks nicer. Make the item glyph itself brown to avoid confusion with gold in ascii-only mode. -------------------------------------------------------------------------------- 4c614596a2 | regret-index | 2023-12-15 22:00:36 -0330 Protean progenitor and aspiring flesh tiles by Sastreii Delicious uranium ice cream. Farewell once more, antique abomination tiles. -------------------------------------------------------------------------------- b92a3409a4 | regret-index | 2023-12-15 22:00:36 -0330 A quick tuning down of Xom's banishment power (Lici) Xom's interest levels restrict the chance to banish the player, but currently, Xom's banishment power uses player xl as a stand in for monster banisher HD. While there's checks before xl 9 to have Xom usually rescue the player, this scaling works pretty poorly between what power we expect of players at given xls versus given monster HD- for example, deep elf sorcerers have only 14 HD to send the player down to Abyss:3, which is reasonable at the time one's doing Elf but not so much for an end-of-Lair character that happens to be xl 14. The current range looks like: xl | 1 | 2-6 | 7 | 8-12 | 13 | 14-18 | 19 | 20-24 | 25 | 26-27 ----------------------------------------------------------------------- min | A:1 | A:1 | A:2 | A:2 | A:3 | A:3 | A:4 | A:4 | A:5 | A:5 max | A:1 | A:2 | A:2 | A:3 | A:3 | A:4 | A:4 | A:5 | A:5 | A:6 While there's a fair bit more abyssal agency than many years prior, this is still quite agressive even for Xom, considering how much later it can ruin a character. I'm doing a quick formula adjustment to the player's xl in the equation to make this more reasonable for now. The resultant possible minimum and maximum depths now look like: xl | 1-11 | 12-15 | 16 | 17-20 | 21 | 22-25 | 26 | 27 ----------------------------------------------------------- min | A:1 | A:1 | A:2 | A:2 | A:3 | A:3 | A:4 | A:4 max | A:1 | A:2 | A:2 | A:3 | A:3 | A:4 | A:4 | A:5 Possibly we could make people in zigs or with 5+ runes visit Abyss:6, but people playing extended Xom probably would manually go to Abyss:7 themselves anyway. Should also look into Lugonu being less boring... -------------------------------------------------------------------------------- 3c0fa26f73 | regret-index | 2023-12-15 22:00:36 -0330 DE Death Mages: buff stats, make Call Lost Soul call more Deep elf death mages lost Twisted Resurrection in b39fecb since they couldn't collect nearly enough corpses to make meaningful abominations (and also abominations are very boring spawns anyway). They are thus rather specifically limited to one spell that makes them stand out- Call Lost Soul. However, summoning one soul at a time at a paltry 11/200 cast rate makes the potential revival function of this spell not particularly impressive- they tend to revive themselves but once to Bolt of Draining the player more, and otherwise rarely help prolong the lives of other present deep elves. Support monsters aren't inherently bad designs, but the other spells are statistically pretty mediocre at actually killing the player, worse off than every other deep elf in the branch. If this spell and this monster are to stick around, they needs to be far more flashy to justify the complexity burden. They get a little more HD, health, and double the Call Lost Soul cast rate. Their summon now also summons two lost souls at a time (rarely three), rather than one. This should help them stand out more as a deep elf that absolutely need to be killed first amongst several other deep elves or else risk nearly all of the other conjurers getting a second life's chance to blast players to bits. TODO: add a tiles indicator for thus-revived monsters being ghostly. Not sure how they haven't gotten one for so long. -------------------------------------------------------------------------------- 2b3bde5f41 | regret-index | 2023-12-15 22:00:35 -0330 Leda's Liquefaction experiment: Earth / Hexes to Earth / Tmut, + buff Leda's Liquefaction started as Earth / Transmutations in 0412296. It was changed to Hexes as part of the double-combo of ae9be96 and 06cfd5e moving it to Hexslinger so the Hexes-based ranged background could focus on and cast something they're particularly suited to use. 9e18931 moved it out of the starter book because a level 4 dual-school spell split a weapons background too many ways, and ever since then it's been left pretty wanting and unused. It's inherently a rather risky spell, as is anything that slows down the player's movement, and doesn't particularly fit most of Hexes' desire to run up and stab things nor is it necessarily likely to tempt ranged characters at its weird schools intersection point. It's gotten some buffs, but is still an unpopular fit. Changing it from level 4 Earth / Hexes to level 3 Earth / Transmutations covers a fair number of different bases. Hexes is extremely packed in its lower-level and mid-level spells with the recentish Hexslinger update, so it could afford to move a spell to another school. Transmutations as a school losing forms in 1880023 hasn't completely killed the school, since the unarmed focus rarely intersected too much with the power of Ignite Poison / Irradiate / Yara's, but it is definitely a school that could do with more unique effects on its own even if as a flavour grab-bag of non-Hexes buffs / debuffs / damage. Moving it to Transmutations also pushes it away from the school containing direct Slow spells, while it works on a very different vector anyway. Finally, I think Transmutations always made a lot more sense- there's no Willpower check or HD check involved, and it clearly is transforming the earth near the caster anyway. Leda's Liquefaction also gets a mild increase of base duration outside of power (10 -> 15) to help it out a little more, since Transmutations itself is rarely a school and skill to contribute spellpower with, and since it's already a risky spell without needing to be ineffectual when actually tried. In terms Placement-wise, not much has happened beyond moving it from the Book of the Hunter to the Book of Sloth. I'm in two minds about possibly moving it to spell level 3 if this still isn't enough... -------------------------------------------------------------------------------- 1baa85e0a2 | regret-index | 2023-12-15 22:00:35 -0330 Buff various old late game uniques stats, bands Xtahua's statistics are atrociously low for even a lategame unique. For a once-beloved dragon with three different gimmicks, they still lag heavily behind other uniques in their equivalent range. Some of this is that while their stats are higher than all normal dragons, they simply have much worse health than nearly any other uniques in their range- somehow, the extra big dragon has less health than a draconian (Bai Suzhen), a normal human (Margery), a lich (Boris), and even a tengu (Sojobo). To help them actually survive long enough to consistently use their 3d40 breath and para roars as a unique with a built-in weakness, they now have only slightly under Vv's health, and get some AC and melee buffs alongside this. (Possibly they could do with some sort of mechanical overhaul in general...) Bai Suzhen isn't doing nearly as poorly as Xtahua or anybody else in this commit, but still is somewhat lagging a little behind late uniques. Her transformation gimmick relies very heavily on her living particularly long for breath and clouds to do much, but it's very easy for the randomness of player damage to heavily overshoot the 50% health threshold she relies on. As such, she also gets a mild HP buff and breathes primal wave a little more often. Margery is very boring and also performing reasonably poorly. She's a fire giant with fancy equipment paired with a hell knight band, in the range where one will fight about 8 of either in the average game. Since her band is the notable part of her, I'm extending its fanciness a bit further. She gets one less max hell knights, but on the hell side of things, the band gets a hellephant or searing wretch to do even more fire damage, and on the priest or necromancer side (yes hell knights are priests), she gets a deep elf high priest or death mage to do more cool weird support stuff. Frederick can clearly afford getting more and more stat buffs until he doesn't take a month between kills. -------------------------------------------------------------------------------- 807b2c42aa | regret-index | 2023-12-15 22:00:35 -0330 Somewhat buff wargs Orc is a weird branch. One of its weird components is that a fair bit of Orc:$ can regularly involve repeatedly retreating over large amounts of open space for a long while to try and break up a dense endvault full of harmless and not-so-harmless enemies, simply and repeatedly normally walking away. While a few enemies in the branch can somewhat sucessfully interrupt this (faster demon summons, sorcerer paralysis) and it wouldn't be a bad idea to add more, wargs are hypothetically a monster meant to cover for this. They are directly orc-themed (by being taken straight from Tolkien), have rPois for whatever mild distinction it grants them, move faster than normal speed players... and they're still quite weak, for non-banding monsters in Orc. Grabbing statistics since 0.27, the only natural branch spawns they kill more frequently than are plain orcs, orc wizards, and blastminers (who are, of course, very new monsters). They're more notable for being Lair entry guards and Orc entry guards than the branch intended to mostly contain them, which is rather backwards. With Call Canine Familiar no longer being reliant on their statistics for the top end of the spell, we can afford to slightly emphasize up another non-Orc monster for the Mines to provide it a little more variety and counteract those slow, slow retreat tactics. Wargs get a bit more speed, AC, and now hit for more than plain yaks since they're usually fought past Lair. In exchange, a bunch of Lair and Orc entry vaults use only one warg at most, and otherwise use wolves in their stead. Some pre-Lair D vaults have also had wargs a bit weakened. They could probably do with an actual gimmick eventually (letting plain orcs ride them?), but this should help notice them in the right spot. Some future commit can just refer to this particular essay again. -------------------------------------------------------------------------------- 98b32277e7 | gammafunk | 2023-12-15 19:13:29 -0600 fix: Properly check some clua hook return values For the hooks for scrolls of identify/enchant weapon/brand weapon/enchant armour, only attempt to use the returned character if it's actually a letter. -------------------------------------------------------------------------------- 843723b269 | gammafunk | 2023-12-15 19:13:29 -0600 feat: An clua item field for enchantability This addes an is_enchantable boolean property to the clua item class, allowing callers to know whether they can enchant an item without performing complex calculations based on item information on their own. Items that don't have a known plus value return true for this property. -------------------------------------------------------------------------------- e217f1483f | Nicholas Feinberg | 2023-12-15 16:57:06 -0800 Uncomment an important line Oops! (!!) -------------------------------------------------------------------------------- 932532b177 | Nicholas Feinberg | 2023-12-15 16:55:18 -0800 Remove an antique comment Demonic runes can no longer stack, for a variety of reasons, so there's no need to clarify *why* they can stack even with different colours. -------------------------------------------------------------------------------- a1d457b083 | Nicholas Feinberg | 2023-12-15 16:53:57 -0800 Don't print control hints for monster The monster IRC bot, that is. -------------------------------------------------------------------------------- 567cc9bd90 | Nicholas Feinberg | 2023-12-15 16:44:50 -0800 Slightly tweak Vaults branch description Crawl has so, so many 'madmen'. Let's continue substituting more interesting and evocative words until we get down to a reasonable baseline level of madness. Really this could use a full rewrite, but this will do for now. -------------------------------------------------------------------------------- 19c8a159c1 | Nicholas Feinberg | 2023-12-15 16:43:57 -0800 Tweak prismatic gem description (regret-index) 🌈 -------------------------------------------------------------------------------- 67763e304b | Nicholas Feinberg | 2023-12-15 16:41:26 -0800 Rename obsidian -> midnight gem (hellmonk) We already have an obsidian rune, and that's in a different branch. -------------------------------------------------------------------------------- 5f21a37ad4 | advil | 2023-12-15 19:25:56 -0500 build: fix mutation test failures from mutated humans The `mut_species.lua` test, as part of its cleanup, relied on humans being mutation-free. This would break the following test (`mutation.lua`) which assumes that its character starts mutation-free, when the two are run in sequence. -------------------------------------------------------------------------------- aba747a4dc | Aliscans | 2023-12-15 19:21:27 -0500 Fix compiling with NOWIZARD. The wizard option is defined in NOWIZARD builds. Define an enum it relies on then. -------------------------------------------------------------------------------- 5bc90fcf8d | advil | 2023-12-15 18:57:45 -0500 fix: don't crash on gems in the known item menu -------------------------------------------------------------------------------- 18113328f3 | advil | 2023-12-15 18:44:23 -0500 build: possibly fix tag upgrade CI build -------------------------------------------------------------------------------- 57893ffec4 | Nicholas Feinberg | 2023-12-15 12:56:15 -0800 Fix gem crash (oops) -------------------------------------------------------------------------------- 7e0a1e9799 | Nicholas Feinberg | 2023-12-15 11:00:36 -0800 Remove Me(teoran) Following on from the last two commits, Gems now serve the purpose that Meteorans were intended to, and Humans have taken their healing. Meteorans can now fly on to another star. Farewell, sweet princexes! I have a new species to fill Meteoran's "slot" in-progress, but the current planned 0.31 release is too close for it to land yet. More on this in the next few months, with any luck. -------------------------------------------------------------------------------- f11e229afd | Nicholas Feinberg | 2023-12-15 11:00:36 -0800 Give Humans exploration healing (elliptic) Humans have long been thought of as rather bland. The intent is for them to be a vanilla 'baseline species', but that excites very few players in practice. Let's move them even closer to baseline by moving their XP apt down to the default, and give them Meteorans' exploration healing in exchange. Humans are natural explorers, after all! This might encourage some fun new playstyles. Numbers, as ever, subject to change. (elliptic thought we should double explore healing, but I want to try baseline healing first.) -------------------------------------------------------------------------------- 866d48a76e | Nicholas Feinberg | 2023-12-15 11:00:36 -0800 Add gems When I added Meteoran (1352289c90d, based on Hellmonk's ad05b8d819def), I wanted to give players a fun way to engage with time pressure. When I play, I really enjoy the feeling of exploring on less than full HP and making choices about which areas to explore. (Full clearing everything carefully can be fun, too, but variety is the spice of life!) I'd hoped to find a way to bring that playstyle to the wider playerbase, with time limits that are more defined and achievable than the harder and fuzzier goal of 'compete for a high score'. Some people, including myself, really liked Meteorans! But a large number of players, probably the majority, found them stressful and unfun. That isn't the end of the world - I'd much rather have a species which 20% of players love and 80% hate than one which 99% of players don't care about one way or another. But I'd also hope that we could do better. Gems are intended to be an alternate approach to the 'time pressure' playstyle. They're a new type of collectible item, appearing at the end of DOLESAPNMVCWUZ - basically, all the non-portal, non-temple branches of a 3-rune game. Each gem has an associated time limit, which ticks down while the player is in their associated branch. When that time runs out, regardless of whether the player has gotten the gem yet or not, Zot rudely smashes the gem into ten thousand pieces. The intention is to allow several different ways to interact with gems: - Ignore them, or not even realize they exist. This is intended to be the primary/default interaction. - Dive to grab gems, but not bother trying to keep Zot from smashing them. This is a 'lightweight' speedrunning playstyle, a bit like the Speed Demon I tournament banner. - Keep one or more gems intact by only exploring part of a branch, perhaps opting to 'go for it' when your character is feeling especially strong. - Try to grab all gems and retrieve them all intact. This is roughly equivalent to the old Meteoran playstyle. Gems have absolutely no mechanical use within the game. They offer a very minor score bonus (10k points each), as a bonus for new players who look at scores for unwon games, but shouldn't affect normal play or speedrunning in any way. Getting the Orb of Zot shuts the timer off. One could skip branches, get the orb, and then clear branches while holding the Orb to get gems with no time limit... but orbrunning is its own form of time pressure, and I'm skeptical this would be easier than playing 'normally'. :) Time limits are currently set on a per-branch basis. Lair, Vaults, and Depths have longer time limits than they did for Meteoran, to allow for large levels and travel time, while Slime and Zot are shorter. However, I would be startled if these time limits stuck - I personally suspect most of them are too tight for species which *aren't* as strong as Meteoran. We can experiment. The good gem tiles are by Sastreii, the bad ones are by me. :) Credit also to ellpitic for helping to set me down this path. -------------------------------------------------------------------------------- 0d9d05ade9 | Nikolai Lavsky | 2023-12-15 15:33:12 +0300 feat: make wizmode &H command heal a few more statuses -------------------------------------------------------------------------------- abc64e778c | regret-index | 2023-12-14 21:06:46 -0330 Volcano quick review More spiky outlier nerfing and weaker vault buffing. We also don't need to name exactly one layout's transparent stone as special glass. Alongside that: * Hell hogs and fire crabs in the beastial monster set are keeping about even killpace, even though the crab gets less company in most arrangements compared to the hog. They're now swapped in tiering. * Salamanders are the strongest Volcano killers by a lot due to mystic hasting, so they now get nerfed equipment in the same fashion hell knights are nerfed. (This mostly means no shortbows.) This won't be too much of an overall volcano nerf since so many of the weaker layouts were buffed, anyway. * There's now about a ~1.6% chance each for granite and dragon-blood talismans in the normal fire-res / aux armour / dragon scales slot per volcano, as thematic fits, for further light talisman distribution, and to further distinguish the rewards from ice caves. Never really going to be settled here until toenail golems actually get a gimmick, of course. -------------------------------------------------------------------------------- aa9e43cceb | DracoOmega | 2023-12-14 17:52:57 -0330 Fix a duplicated -Scroll light -------------------------------------------------------------------------------- 105cd16510 | DracoOmega | 2023-12-14 17:43:40 -0330 Don't refuse to break charm when attacking charmed things Apparently they still had ATT_HOSTILE under the hood and it was just supressed. Now just 'check_attitude' instead, which accounts for this (and other sources of false friendliness). Behavior code is a tangle sometimes... -------------------------------------------------------------------------------- c6352e7e69 | Kyle Rawlins | 2023-12-14 13:53:51 -0500 fix: don't crash on call canine familiar Repro instructions (Implojin): drink !invis, cast call canine familiar. Prior to this commit, the game would crash if an inugami `ghost` was accessed by side effects of `create_monster`, which was possible (e.g. if there was an invisible actor nearby, a behaviour_event was triggered immediately before the return to the casting code). Generally, ghost_demon code assumes that the ghost gets fully set up in `create_monster`. This commit initializes a ghost object there at least so that it won't crash (along with a bit of tweaking of the starting hp values), and then finishes initialization in the spell, where there is access to spellpower. I'm a bit concerned about spreading this out being somewhat brittle (I don't think any existing ghost demons do this so there may be violated assumptions), but it seems to work in some quick testing. -------------------------------------------------------------------------------- 4b27ddf301 | DracoOmega | 2023-12-14 13:30:42 -0330 Make recasting canine familiar also cleanse it of poison There were some complaints about needing to babysit your dog after battle, if it was poisoned, to prevent it from passively dying while you rested - exacerbated by how monster poison is non-deterministic and can sometimes last much longer than anticipated. Now, at least, you should only need to heal it once in most cases. I could see the argument that it should just have rPois instead, but even if wargs have it, I'm a *tiny* bit reluctant to give that out at old hound power - and it doesn't even fix the underlying issue completely, since there's still a *chance* that they get poisoned anyway. (I also considered just making it outright impossible for an inugami to die to poison ticks, but that might feel weird...) -------------------------------------------------------------------------------- 91106424db | DracoOmega | 2023-12-14 13:21:07 -0330 Don't claim 'Nothing appears to happen' when Chaos weakens a monster -------------------------------------------------------------------------------- 7b04074989 | DracoOmega | 2023-12-14 13:03:29 -0330 Fix broken inugami see invis They already had the M_SEE_INVIS flag and it was never intended that they lose it compared to existing dogs, but apparently if monsters have a ghost_demon struct, the game looks there and only there for whether they should be able to see invisible. ghost_demons are weird. -------------------------------------------------------------------------------- 25cd97262b | Implojin | 2023-12-14 05:29:20 -0600 Fix some x hover invis messaging (Lici) Lici reported an e(x)amine hover messaging bug: If a monster couldn't see the player, and the monster began petrifying, it would lose its "can't see you" x hover text. This was being caused by the MB_CANT_SEE_YOU flag (from 85c4641d08) being set based on find_stab_type. That function returns the highest priority stab it finds: several of them have higher priority than STAB_INVISIBLE, and if any of them applied, it would cause MB_CANT_SEE_YOU to remain unset, regardless of whether the monster could see the player. -------------------------------------------------------------------------------- f58a9bc654 | regret-index | 2023-12-14 04:38:18 -0330 Add alligators to zombie lists, display AF_DRAG in the monster list Alligators aren't the strongest zombies for extended, but they've still got a mechanically distinct thing to throw around since dragging always works if it does any damage. Might also help for restricting Crypt's derived undead list away from "literally _everything_ in the game", eventually, considering the weird stuff like orb guardian zombies that gets now. Since 5a15c83 highlighted reaching, constriction, and trample for the sake of determining which derived undead get a given attack flavour amongst other monsters sharing the same tile / glyph, it seems reasonable to add croc and alligator dragging to the list for the sake of ossuaries and the aforementioned earlier zombies. -------------------------------------------------------------------------------- a3aaffb735 | DracoOmega | 2023-12-14 04:36:29 -0330 Assign blame to protean progenitors for the monsters they create -------------------------------------------------------------------------------- 0136665373 | DracoOmega | 2023-12-14 03:28:33 -0330 Make inugami instant attack happen whether it has cleaving targets or not So that recasting the spell can still provide a little extra offense even in one-on-one situations. -------------------------------------------------------------------------------- 61f25df15f | DracoOmega | 2023-12-14 03:28:33 -0330 Fix a crash with Canine Familiar and attempt to future-proof The CANINE_FAMILIAR_MID prop was supposed to exist if and only if the familiar was alive, and be automatically removed whenever it ceased to be. Stairs, at least, seem to violate this, and while that individual problem could be fixed, it doesn't solve things for people currently trapped with a prop and no dog. Instead, have the function that determines whether your familiar is active actually look for the dog itself each time, and clean up the prop if it isn't there (which should fix currently broken games as well). -------------------------------------------------------------------------------- e37a338825 | David Lawrence Ramsey | 2023-12-13 23:41:39 -0600 Call trog_wizard arcanist a wizard again (#3379). -------------------------------------------------------------------------------- 50297eb6a4 | Implojin | 2023-12-13 22:06:14 -0600 feat: Menu colouring and search tags for evokers Elemental evokers are quasi-artefacts now, so it makes sense to give players a UI heads-up that they're special. This commit colours elemental evokers in menus as though they were unrands, adds a stash search alias for evokers on ctrl+f, and lets players easily redefine evoker menu colour in their rcfiles. This commit also exposes a clua check for whether an item is an xp evoker: `item.is_xp_evoker`. -------------------------------------------------------------------------------- 6819f34284 | regret-index | 2023-12-13 23:02:46 -0330 Fix a vault's Zot placement. -------------------------------------------------------------------------------- 548ab4fc23 | David Lawrence Ramsey | 2023-12-13 18:51:12 -0600 Fix warning if Beogh can't give an orc an orcbow. The message now says "orcbow" instead of "crossbow". -------------------------------------------------------------------------------- fd5aef93c1 | DracoOmega | 2023-12-13 21:13:37 -0330 Don't make all monster cleaving attacks cost no energy It was *removing* ENCH_INSTANT_CLEAVE after the attack, but not actually checking first to see if the monster even had it... I'm so, so sorry you poor people.... -------------------------------------------------------------------------------- a05e42328c | David Lawrence Ramsey | 2023-12-13 16:08:13 -0800 Fix references to magic resistance instead of willpower, part 3. The function hex_success_chance() names its first parameter wl, but the prototype for the function names it mr. Change the latter to wl. -------------------------------------------------------------------------------- bc79757a61 | David Lawrence Ramsey | 2023-12-13 16:08:13 -0800 Fix references to magic resistance instead of willpower, part 2. Rename the function _foe_mr_lower_goodness() to _foe_wl_lower_goodness(). -------------------------------------------------------------------------------- 29ed27f178 | David Lawrence Ramsey | 2023-12-13 16:08:13 -0800 Fix references to magic resistance instead of willpower, part 1. The monster enchantment enum is ENCH_LOWERED_WL, but the name given for it in enchant_names[] is "lowered_mr". Change it to "lowered_wl". -------------------------------------------------------------------------------- 3cdb644a07 | DracoOmega | 2023-12-13 19:50:47 -0330 Make some new monsters ineligable to generate as derived undead Either because they won't function meaningfully or outright cause a crash. -------------------------------------------------------------------------------- ce794a2c1e | regret-index | 2023-12-13 19:19:10 -0330 fix the build from a merge conflict -------------------------------------------------------------------------------- 5927ffeb39 | regret-index | 2023-12-13 19:13:55 -0330 Chaos: don't roll vampirism if the attacker's at full HP (elliptic) Another particularly obvious part of chaos seeming to do nothing with the recent repeated attempts to make it not roll useless effects. I'm not sure it's reasonable or plausible to make it always _show_ an effect, since elec and vamp both still have those brands' own respective 75% chance and 40% chance to not actually activate. (We could make some special case hacks, but that's quite a bit of ugly work.) Still should continue to buff the brand into actual higher tiers of interest. -------------------------------------------------------------------------------- ab4aac0091 | regret-index | 2023-12-13 19:13:55 -0330 New arcanist, occultist, and necromancer tiles by Sastreii Should help with not confusing the former two, who of course would be very insulted by the notion. -------------------------------------------------------------------------------- f7ac9a977b | regret-index | 2023-12-13 19:13:55 -0330 Buff Ghoul MP apt: -1 -> 0 (elliptic) If we're going in on ghouls having very specific apts to try to cast with as an alternative to unarmed on a species that can't shapeshift then I guess we're going all in. -------------------------------------------------------------------------------- ea7044e769 | regret-index | 2023-12-13 19:13:55 -0330 Cut dragging reapers from Demonic Guardian (monkooky) Reaching allies dragging enemies closer is mostly a downside for players, alas. Maybe in the future there will be something more interesting and stronger than lorocyprocas in the 2s tier for Demonic Guardian to use? -------------------------------------------------------------------------------- 2d1116f657 | regret-index | 2023-12-13 19:13:55 -0330 Adjust Dr stormcaller and shifter spells, Dr monk monster melee * While komodo dragons appearing in Summon Drakes helped it out a little before rime drakes and wind drakes were added to the list, their harmless nature in Zot is a bit conspicuous with the stormcallers' Qazlal flavour- they're neither cloud-focused nor elemental. As such, they're gone from the list, mostly going into the options that aren't swamp drakes. * Draconian shifters having both Blink Range and emergency Blink Away is very silly and distracting, considering they've already got three different distinct spells. The emergency Blink Away has been changed to an additional chance to cast more Blink Range, so they can still remain in ideal range for dispel breath / encircling. * While the point of Draconian Monk monsters in Zot is that they're not particularly flashy on any spell fronts or even weapons and instead just hit the player with pretty aggressive melee (and thus are notably the only nonbase draconian that can be berserked), they've lost a bit of their luster over time. Most of the other draconian classes have been reasonably focused down and cleaned up, with draconian knights being the most notable for getting to haste without dropping the ability to toss out lightning bolts and icicles. Giving the draconian monk monsters in Zot AF_FLANK helps round out that mechanic's otherwise rather early focused appearance, reasonably fits their martial-arts focus and theme, and is clearly not too much currently due to draconian shifters tossing off plenty of Blink Allies Encircling. They lose a tiny amount of health in exchange. -------------------------------------------------------------------------------- dfa497c050 | regret-index | 2023-12-13 19:13:51 -0330 New monster: protean progenitors, for Zot Zot hasn't gotten new monsters besides the addition of then-new ghost moths 13 years ago (8d1b968), or the swapping of fire and ice dragons for already present prior quicksilver dragons 7 years ago (0b18a7b). Most Zot work across Crawl's development has been more oriented on adding more and more stair vaults to Zot or fixing up the non-top-tier monsters otherwise present: tmons constrict / demonic berserk, curse toe summons, death cob attack brands, klown chaos, lich and draconian class spells. This is entirely reasonably behaviour that has relatively evened out Zot's threat level over time, but it has been a very restrained and compact set for a while. It wouldn't hurt to try out more. Especially stuff that can break up Zot's heavy reliance on relatively conventional, highly established, and spreading elsewhere draconians. Protean progenitors are transmutations giants for Zot. The origins of all the dungeon's countless shapeshifters, they first start off as relatively simple foes- unarmed Irradiate casters with fast regen but poor defenses and no resistances. When they die, however, they leave behind some last children in some last new form as they violently split into piles of 'aspiring flesh'- by default two at HD 12, with increasing chances of a third if it rarely rolls any lower HD. These non-attacking, non-moving piles will over the course of a few turns polymorph into hasted, mighted copies of whatever the giant originally tried to transform into, and never transform again. At HD 12 over the glowing shapeshifter HD 10 default, this gives double-buffed options of e.g. fire and ice dragons, unarmed ettins, tyrant leeches, alligators, jorogumo, and broodmothers. A chance to review much earlier branch spawns as a surprise in every giant provides a bit more variety of bands over Zot's many base and nonbase draconian packs, while also hewing closer to the weirder spectrum of Zot's many non-draconic non-elemental monsters. For now, they eat up a bit of the base draconian and non-base draconian bands weight, and spawn with a 33% chance to have a second one accompany them- a quick objstat roll says there should be about 4 of them throughout Zot and each of Zot's standard base draconians reduced from ~11 to ~10. The exact strength of these are inherently difficult to assess, so they'll probably need a fair bit of public testing to see how these work out- base form's base stats, spawn count, and band count are all easily changed. They've also only been added to a restrained number of vaults- ones that span the bulk of Zot's current monster set, or that invoke chaos and flesh. They might make for reasonable spawns on Mnoleg's level to lower their reliance on ugly things and eyes, but for now are otherwise only in chaos zig floors. If we get any other new big Zot monsters, it might be a good idea to look at slightly reducing the overall spawn count as is done for Lair. (Severely placeholder tiles are mostly made of currently unused decade-old rltiles for large abominations, small abominations, and glowing shapeshifters, with palettes from Sastreii's ice dragon and radroaches.) -------------------------------------------------------------------------------- f6b18e3e5b | DracoOmega | 2023-12-13 19:05:56 -0330 Awaken Forest tweaks Adjust the duration to be a little more consistent (higher minimum duration and a greater tendancy to be closer to the average). Also change the cast logic. Previously they would only cast Awaken Forest if at least one enemy was *already* adjacent to a tree. In practice, using it if the player is *near* a tree in Swamp is still likely to constraint future movement options in an interesting way, so now it checks if any enemy is 2 tiles away from a tree instead. I also raised the cast rate of it for druids somewhat - at least partially to make up for 'gambling' that a cast will hit the player in future and sometimes behind wrong. (Since they won't recast while it's active, this should waste minimal turns). -------------------------------------------------------------------------------- fa3c0d6efd | DracoOmega | 2023-12-13 19:05:55 -0330 Don't cancel Awaken Forest the moment you swing in a druid's direction More specifically, the game was calling mons_att_changed() whenever the player performed an offensive action at an enemy - even if that enemy was already hostile. This was often harmless (if unexpected), but it did result in two strange behaviors: -Attacking a druid (even if you missed!) would immediately end its Awaken Forest effect as though it had changed sides. -Attacking a tentacle (or tentacle head, like a tentacled starspawn) would cause all its tentacles to stop constricting anything they were constricting. This attempts to only call mons_att_changed() after attacks if that monster was not already hostile. (But behavior code is complex and I can imagine there being some other scenario this misses.) -------------------------------------------------------------------------------- 958caa0173 | DracoOmega | 2023-12-13 19:04:16 -0330 Revamp Call Canine Familiar The fact that CCF randomly rolled between different tiers of preexisting canine based on player spellpower had always created some awkwardnesses. The power jump between tiers could be dramatic, and when the summon duration was higher, could even encourage rerolling to get a better dog. This replaces the reliance on tiers of existing monsters by introducing a new (spell-exclusive) canine that can instead scale smoothly in damage, health, and AC based on player spellpower, without any breakpoints. No more rerolling: now you always get the dog that you deserve. But there's more! In an effort to have more 'interactive' summon spells that don't simply fall into the hole of 'also throw a dog at it' along with everything else you're summoning *and* emphasize the familiar bond more, the spell has the following additional behavior: -If your inugami dies, you are drained and cannot resummon it for a short while. -Recasting the spell while your inugami is still active, instead *heals* it and causes its next attack (within a few turns) to cleave and cost no energy. It should be individually a small bit stronger than the old dogs, and encourage more interacting with it, to make best use of the healing and cleaving, based on the situation. All numbers associated with this ought to be vaguely reasonable, but are still subject to change. -------------------------------------------------------------------------------- dc8495921b | DracoOmega | 2023-12-13 19:04:16 -0330 Don't lie so blatantly about pandemonium lord max hp While most pan lord stats were read from their ghost_demon struct, max hp was read purely from their mon-data entry which meant it was often blatantly incorrect. Non-spellcasting lords get a huge hp multiplier that meant xv's displayed average could be nearly 100 hp less than the true average - and we already show their spell set to the player, so this is entirely knowable, but very misleading to less familiar players. Since we already show entirely concrete numbers for almost everything else they do - including many things that *aren't* derivable from their other stats - just show their actual hp like we do for player ghosts. -------------------------------------------------------------------------------- 4ab8c38853 | Implojin | 2023-12-13 01:28:59 -0600 Fix some vital mutation messaging (cool 2) -------------------------------------------------------------------------------- 41278d8d1d | David Lawrence Ramsey | 2023-12-12 15:10:20 -0800 Remove spurious sticky flame reference in _ugly_thing_resists(). -------------------------------------------------------------------------------- 5e5e916f41 | Implojin | 2023-12-12 06:47:09 -0600 Simplify rampage healing (ragingrage, elliptic) Previously, Armataur's roll heal required its target monster to be at least "easy" threat to provide regen, as an attempt to limit the incentive to kite slow mons (like worms) around indefinitely for ongoing regen value. This threat check made roll heal less intuitive and harder to explain to players: Why didn't they gain regen from a particular rampage move? What precisely constitutes a trivial monster? (What was the rcfile setting to display threat, again?) We can simplify this by removing the threat check -- it's arguably not worth the complexity, given that kiting slow mons around can block off avenues of escape, and isn't entirely "free" to begin with. Perhaps someone will come up with a better way of limiting the slow mons kiting incentive here; I'd still like to disincentivize that but I don't think that making roll heal more complex for casual use by having a threat component is the right way to handle this. Feedback welcome! -------------------------------------------------------------------------------- e2c1a860ed | regret-index | 2023-12-12 02:25:13 -0330 Reduce excessive Gozag worship checks (PleasingFungus) When moving gold to the top of monster corpse stacks for Gozag worshippers, we can check if the player's worshipping Gozag at the start of that function, not for literally every tile on the floor while moving them up. -------------------------------------------------------------------------------- 77787f6025 | regret-index | 2023-12-12 02:21:45 -0330 Make AT_RANDOM more random, tweak cherub and pan lord verbs When 04f5058 added chaos weapons and first finished chaos spawn, they had a random attack verb ranging across the enums of AT_HIT to AT_BUTT (the predecessor of AT_GORE). A few years later on in 965a83c, refactoring accidentally made it go from going between the two to choosing just those two. Whoops. Since there's lots of weird attack flavours usually tied to actual effects (trample, constrict, reach sting, engulf), it probably should continue to handpick attack verbs, but the list could be wider. Pan lords are properly using a random range across an enum, but this lead to them falsely displaying trample and constrict messages when their effects got de-coupled from their flavours (e.g. e5ae1c3). I'm giving them the same random list as chaos spawn here, which is less elegant but also doesn't show incorrect messages for an entirely flavour selection. Also, if the four verbs for AT_CHERUB are supposed to correlate to the four heads biting / pecking / goring, then the human head just hitting is boring. It now headbutts instead. That's what a human head does, right. -------------------------------------------------------------------------------- a8fea8b373 | David Lawrence Ramsey | 2023-12-11 14:50:51 -0800 Add player ghost speech lines for Hepliaklqana, Uskayaw, and Wu Jian. -------------------------------------------------------------------------------- c87f13db18 | David Lawrence Ramsey | 2023-12-11 14:50:18 -0800 Remove a duplicate amulet type for artefacts. -------------------------------------------------------------------------------- bbe41ddc13 | David Lawrence Ramsey | 2023-12-11 14:50:18 -0800 Add a gemstone type and a ring type for artefacts. -------------------------------------------------------------------------------- 7cbfa2dbce | David Lawrence Ramsey | 2023-12-11 14:48:30 -0800 Add more fruit names to artefacts. -------------------------------------------------------------------------------- 6568d3517c | David Lawrence Ramsey | 2023-12-11 14:48:13 -0800 Add Dithmenos to the list of evil gods that Zin's Recite talks about. -------------------------------------------------------------------------------- 528c708208 | David Lawrence Ramsey | 2023-12-11 14:47:51 -0800 Add more Donald lines for Kikubaaqudgha. -------------------------------------------------------------------------------- 937bba79b8 | Zhang Kai | 2023-12-11 14:47:24 -0800 Update passives.txt -------------------------------------------------------------------------------- ba30d56aa1 | Zhang Kai | 2023-12-11 14:47:24 -0800 Create shout.txt -------------------------------------------------------------------------------- 31f30a3bcb | Zhang Kai | 2023-12-11 14:47:24 -0800 Create miscname.txt -------------------------------------------------------------------------------- 809d50fed1 | Zhang Kai | 2023-12-11 14:47:24 -0800 Update monspell.txt -------------------------------------------------------------------------------- 2f54df98a7 | Zhang Kai | 2023-12-11 14:47:24 -0800 Update species.txt -------------------------------------------------------------------------------- 7ba04b7275 | Zhang Kai | 2023-12-11 14:47:24 -0800 Update spells.txt -------------------------------------------------------------------------------- 5f35260eb8 | Zhang Kai | 2023-12-11 14:47:24 -0800 Update items.txt -------------------------------------------------------------------------------- 2bb9357481 | Zhang Kai | 2023-12-11 14:47:24 -0800 Update monsters.txt -------------------------------------------------------------------------------- 2dc6425d64 | Zhang Kai | 2023-12-11 14:47:24 -0800 Update status.txt -------------------------------------------------------------------------------- eb346b3e67 | Zhang Kai | 2023-12-11 14:47:24 -0800 Update mutations.txt -------------------------------------------------------------------------------- f47eeb1b7f | CipHuK | 2023-12-11 14:47:06 -0800 Felid: update manual about Felids Felids aren't fast any more See 406407be8511ac9846d21bd4a51990ab4ce1dbb7 -------------------------------------------------------------------------------- 273cecb5ae | Nicholas Feinberg | 2023-12-11 14:44:42 -0800 .. -------------------------------------------------------------------------------- 13d87b7c24 | Nicholas Feinberg | 2023-12-11 14:44:27 -0800 More changelog fixes and tweaks (Monkooky) -------------------------------------------------------------------------------- d88bbb8b4d | Nicholas Feinberg | 2023-12-11 11:04:46 -0800 Tweak the ORB's grab message (regret-index) Flying skulls make "a hideous shriek", which isn't nearly as loud as the ORB. -------------------------------------------------------------------------------- 60294ff2a0 | Nicholas Feinberg | 2023-12-11 11:02:31 -0800 More changelog updates and fixes -------------------------------------------------------------------------------- 57eb4e83fd | regret-index | 2023-12-11 14:52:32 -0330 checkwhite ...possibly the most lines checkwhite has ever checkwhite'd. -------------------------------------------------------------------------------- 9b43b03d93 | regret-index | 2023-12-11 14:45:56 -0330 Two quote additions, some quotes.txt clean-up The new quotes are for abyssal stairs and the Petrify spell. The formatting for either source might be a bit off, since we're inconsistent about bothering with sections, years, or numbers for webcomics- if anybody feels strongly about this, they should also go update the Order of the Stick quotes alongside these two. * Potions of blood, sling bullets, and bolts all don't even have item descriptions, so they don't need quotes. Arrow quote now is used for Poison Arrow. (If we get new tiles and underlying code bothering to make hand cannons fire bullets, probably they could use the sling bullet code, but currently they fire bolts.) * Wizard quote has been given to arcanists and occultists. * Storm Form and Necromutation quotes have been put under the matching new talismans. -------------------------------------------------------------------------------- f006fbbd5c | regret-index | 2023-12-11 14:19:27 -0330 Sort quotes.txt by category On the outset of Crawl, quotes were sorted into a handful of different categories. All the way back in 2013, 45418d0 and f5e63f4 ended up tossing out the headers and sections into three alphabetical lists- entire monster glyphs, then everything besides non-unique monsters and items, then generic monsters and items. Since the second versus the third isn't a very obvious or clean split, the former list ended up gaining both non-unique monsters and items, while the latter list gained random spells and abilities. As a chance to review the current state of various quotes, and since I didn't want to add to the mess if I added any new ones, I've gone out and made a bunch of new lists. They now procede in the following order: * Dungeon features * Dungeon branches * Spells and abilities * Items * Unique monsters * Vault monsters * Generic entire monster glyphs * All other monsters Hopefully these don't get messed up over time either. (I didn't sort out the non-English quotes.txt files, mostly because their headers should also probably be in those languages.) -------------------------------------------------------------------------------- c5c9b8f871 | regret-index | 2023-12-10 20:01:40 -0330 Let monsters get Dispel Undead (non-Range) When Dispel Undead Range was created to split the melee and range versions between players and monsters, the former wasn't put into mons_spell_beam. This prevented monsters from getting it, which wouldn't normally be a problem since monsters are mostly given Dispel Undead Range by default. Player ghosts and player illusions, however, are supposed to get the player's version of it, and since that works, we might as well give them the shorter range version of it. The hit dice of this can get fairly obscene for ghosts, but since it's not a starter spell for necromancers and player ghosts were shoved into runed door vaults, it shouldn't be too concerning for Mu / Vp / Gh players to suddenly explode without at least some reasonable counter-measure assessment. Should be a good sight in negative energy zigs and continue to help fix up Illusion Card a little more, at least. -------------------------------------------------------------------------------- 4904f62167 | regret-index | 2023-12-10 19:55:39 -0330 Juggle around the t and l glyphs in console, sort some monster files The 't' glyph in console contains crocodilians, tetsudines, and crabs. There's not really any obvious grouping together of these- from a taxonomic standpoint they're very far apart, from a casual association standpoint either the crocodilians have no shells or the crabs look nothing like the other reptiles, and from a Crawl standpoint they group together three amphibious watery monster types very loosely considering only the crabs breathe clouds and only the turtles are slow on land. This could do with an update. * Alligators and crocodiles go on 'l' over 't' so the glyph can reluctantly fit together shelled animals. There's some taxonomic argument one could make about crabs joining other insects on 'B'ugs, but this at least has one casual grouping parseable and also doesn't leave the glyph stranded with all of two turtles. * Wyverns go into 'k' over 'l' for dra'k'es. As lindwurms were shoved into there alongside the drakes, it should sell an overall conceit of "fantastic lesser dragon" than a glyph that otherwise contains completely mundane repti'l'es and a strange lost shark. * Skysharks go into 'F' instead of 'l' so F can support flying fish alongside the current 'F'rogs. Even if this isn't much established yet (I do have plans...), there's no dedicated fish glyph since eels were moved to 'S'erpentine, and they're currently in 'l' just because wyverns were another flying 'l' than any other obvious fit. Seperately of all of this, mon-data.h gets extremely messy past the two alphabetical lists, so I've shoved some entries in there and mon-spell.h back and forth. Those shouldn't have any in-game effects, though. (dc-mon.txt is also quite messy, but at least that doesn't affect me looking at spare glyphs for new monsters.) (I'd be tempted to add a _monster_glyphs.txt for these revisions, but 7cdbcdd got rid of them all, so, go learn rc setting stuff if you protest.) -------------------------------------------------------------------------------- b7303255ee | regret-index | 2023-12-10 18:08:04 -0330 Buffs for several recently changed / revived monsters * Frederick hasn't gotten a kill in the near-week since his new spellset was added, despite that being intended as a buff as well as a code streamlining. He now gets back back his lost HD and gains even more melee damage plus servitor cast rate, since his heavy gear + conjurations + servitor gimmick clearly can be pushed much further from his poor statistics for many versions prior. * Erica's kill-to-being-killed ratio has dipped slightly (5.4% -> 4.4%) since her human to octopus surgery. While she had more kills from Venom Bolt than Force Lance previously, the lower overall hex rate and the varied species with rPois both probably mean she lost a bit of danger. She now gets a bit more EV and more melee damage to focus a bit on how earlygame octopode melee can be quite strong. * Crocodiles aren't seeming too impressive since their return. Since the Sewer water moccasins they were replacing had more health, crocs could also do with a bit more HP and EV so they last longer to show off their new gimmick more. * Another Brain Bite tweak now makes it drains a minimum of 1 MP, to cover for the super-early very low MP values Sewer-delvers being rounded down to 0 when brain worms are looking for a percentage to burn. -------------------------------------------------------------------------------- 9e8fd56bc8 | regret-index | 2023-12-10 17:43:27 -0330 Add a symbol uniting the unequip-based artefact properties There's been occasional reports that "drain" and "Drain" are confusingly close to one another, it'd be nice to point people towards Contam being on on unequip rather than on random damage, and there's now a Fragile status alongside a Fragile artefact property. Adding a random symbol here shared between the three of them should help a little bit with all three of these concerns. -------------------------------------------------------------------------------- bbf96558bc | regret-index | 2023-12-10 17:23:08 -0330 Shove in two more player -> monster spell equivalents for illusions/ghosts Necrotise translates to Pain, Confusing Touch to Confuse. Both are imperfect, but we've got a few examples of that already with Dragon's Call -> Summon Dragon and Swiftness -> Sprint, and they're reasonably close. Also, the current player to monster gap for starter background spells for Illusion Card and player ghosts is incredibly high, so a little less pressure would help a bit- this should get a little more attention in some eventuality, so both don't drift off nearly as much. -------------------------------------------------------------------------------- 2d6e4551af | regret-index | 2023-12-10 10:32:06 -0330 Make dream sheep headbutt, not bite (#2740) The Github issue in question seems to want to add a new AT_HEADBUTT, but we seem to have made AT_HEADBUTT for... ugly things having random verbs... for over a decade without using it directly anywhere else. It does seem to be very easy to find videos of sheep headbutting people and one another and other animals, while biting seems to only happen when they're overly feisty while being handfed. So. Closes #2740. -------------------------------------------------------------------------------- 9944ec47dd | Nicholas Feinberg | 2023-12-09 21:45:15 -0800 Don't dump runes' or books' origin Runes and books haven't lived in players inventory for a little while now, so no need to print their origin in morgues. -------------------------------------------------------------------------------- d94f34c16b | Nicholas Feinberg | 2023-12-09 21:01:49 -0800 Bring Aizul's quote into a new era This citation format might be wrong, sorry. -------------------------------------------------------------------------------- 60c0b14602 | gammafunk | 2023-12-09 21:25:39 -0600 feat: clua api support for inventory scrolls This commit adds the clua hooks c_choose_identify, c_choose_enchant_weapon, c_choose_brand_weapon, and c_choose_enchant_armour, which allows users to choose targets for the corresponding scrolls without a menu. These hooks all return an inventory letter to indicate the target. If the target item isn't valid for the scroll, the usual menu happens. Add documentation for these and also document the c_choose_okawaru_weapon and c_choose_okawaru_armour hooks. -------------------------------------------------------------------------------- d935f9fcdc | regret-index | 2023-12-09 14:09:40 -0330 More brief chaos fixes Mostly related to extremely short weakness. Yes, the five resistances check is important, or else the policy of not rolling useless effects on chaos (??) would be betrayed when hitting eldritch tentacles with chaos (why are those acid immune anyway). -------------------------------------------------------------------------------- f5c68a802a | Implojin | 2023-12-09 04:03:38 -0600 fix: Draw Dimensional Bullseye status icon in webtiles This wasn't being drawn in webtiles builds. If Sigil of Binding gets its own icon instead of TILEI_CONSTRICTED at some point, it will also need this change to draw that icon in webtiles. -------------------------------------------------------------------------------- f582fa60c8 | Implojin | 2023-12-09 03:38:46 -0600 Add a tiles icon for vitrified (Darby) Thanks to Darby for the icon! -------------------------------------------------------------------------------- ae6a2ecfb5 | regret-index | 2023-12-09 04:03:00 -0330 Rare effect quickfixes Actually use the proper function for making monsters frenzy, also make the vitrification text on monsters not be possessive for no reason. Maybe we should get an icon for the latter now that it's any playable accessible? -------------------------------------------------------------------------------- 196b491b36 | regret-index | 2023-12-09 02:50:20 -0330 Step one of far too many for revising Chaos brand Chaos brand is an absolute nightmare under the code, and also extremely awkward as an actual design in practice. Players give the monsters with it an extremely wide berth because of the banishment chance (which is actually just 0.15%) and the very long buffs / debuffs list also attached, except secretly the paralysis / slowing / petrifying effects were actually invisibly casting a hex with power equal to the damage dealt. This was actually pretty weak against the player's increasing AC and Willpower over the course of the game, outside of mister super early Yiuf. (Meanwhile, mushroom fist style AF_CONFUSE got a flat chance without a check, and also chaos clouds made absolutely zero will / damage check to apply any of the effects). In player hands, the weapon has a handful of miserable hits for most of the game without ranged or summons- hasting or berserking a monster is quite the betraying roll- and is also somewhat boring in the effects it can actually get, regularly being rather common effects in the rest of the game. While there's been dev interest in revising this all for next version, trying out more dramatic effects after they were culled out due to the miscast streamlining, I'm doing some quick revisions now that make it consistently somewhat dangerously yet while also reducing the most dangerous individual effects from player or monster hands. This should make it far less awkward to be desperately avoiding monster melee for a sub-4% chance of an actually notable effect. * Chaos debuffs via the weapon brand and attack flavour both consistently ignore defender willpower now, with another flag added to beams. With how several different effects (confusion most notably) and clouds both didn't care about this, it's best to err towards the more dramatic for something we've been very cautious about spreading. * As compensation for the above and to have less hyper-rare rapid-death results, distortion has been taken off the regular weapon brands check (clearing off banishment) and paralysis is capped at exactly 1 turn (like Stunning Burst). On the player end of things, turning monsters into shapeshifters has been cut (poly does the same thing scaling better throughout the game), while monster berserk has now been replaced with Frenzied (keeping haste + 50% damage, losing HP buff, becoming neutral) like datura and Discord, which makes it more interesting as an upside and downside simultaneously. * Added as new effects to entice wielders and terrify victims are weak, corrosion, halved will, vitrifying, sleep, and ensnaring webs. Blink has also been isolated and preserved off of distortion. Agility's out barring a dramatic revision to it as a boring flat +5 EV. * Through some adjustments to the varied lists and another beam, both seething chaos clouds and Chain of Chaos has been updated to match the current non-brand effects list again. Since we're not using most chaos monsters outside of the Abyss, there's not too much concern to mildly nerf a few of them- they'll be far more consistent in applying effects, anyway. Chaos spawn counts in a few earlier vaults have been lowered or tiered higher, too. It's probably worth keeping an eye on Chaos Knight starting weapons, but most people actually trying to win currently unwield those very fast, and this could do with a fair bit of testing first. Probably should keep an eye on Malign Gateway too. TODO: make a chaos.cc that can handle these behaviours so that Chain of Chaos doesn't desynch regularly, and so that clouds aren't faking a melee hit of the person inside hitting themselves for zero damage to enchant themselves with the chaos effects list. Also there's probably still more effects to screw around with, too, like Devastator-style explosions, random summons, brilliance, or cancellation. This is a relatively less disruptive update for now, mostly aimed at making these all behave far more parseably and more usably. -------------------------------------------------------------------------------- eb876a39b7 | elliptic | 2023-12-08 20:23:19 -0500 Fix Oka never gifting plain javelins (acrobat, Ge0ff) Unintentionally changed in 073b73dc. -------------------------------------------------------------------------------- cee99d1eea | Nicholas Feinberg | 2023-12-08 09:40:30 -0800 Give fleshy orifices teeth (Sastreii) Yum, yum, yum! Avoiding the obvious ref to the term rhyming with 'Hakuna Matata'. -------------------------------------------------------------------------------- 36d1ea7889 | Nicholas Feinberg | 2023-12-08 09:32:45 -0800 Bullseye status icon (Sastreii) -------------------------------------------------------------------------------- 593ecc88b7 | Implojin | 2023-12-07 21:53:13 -0600 Gently nerf Armataur HP gain Player response to rampage healing has been great! Lots of feedback like "I was in a bad situation, and then rolled to get some regen and I felt really smug about it." Good stuff. At has been slightly overtuned for a while now, though, and rampage healing seems to have made this issue worse. I'd like to tone down Armataur slightly before the upcoming 0.31 feature freeze / tournament. Hopefully these changes will result in At being a bit more balanced. We'll see how this goes! -------------------------------------------------------------------------------- f211197f41 | Nicholas Feinberg | 2023-12-07 16:40:45 -0800 Describe AF_ACID damage (dilly) -------------------------------------------------------------------------------- 800acc2fd1 | gammafunk | 2023-12-07 16:24:42 -0600 fix: checks for chaos flaming and freezing (hellmonk) A similar issue to that fixed in 831ba139. Use the correct checks for allowing these brands from chaos. The current checks looked for "fiery" and "icy" monsters respectively, which does cover a bunch of monsters immune to fire damage, but not all of them. Instead we check that the target is either the player (who can never be fully immune to flaming/freezing) or, for monsters, if it has less than 3 levels of the relevant resistance, otherwise it would be immune. -------------------------------------------------------------------------------- 831ba139f3 | gammafunk | 2023-12-07 15:28:59 -0600 fix: A check for chaos electrocution (TheMeInTeam) When the chaos brand chooses an effect, it's supposed to omit any brand results that would have no effect on the target. The electrocution chaos result was missing the necessary electricity resistance check and was getting selected only to have no effect, so add this check. -------------------------------------------------------------------------------- 24c7c7037b | Nicholas Feinberg | 2023-12-07 11:52:50 -0800 Add Serpent form tile (Sastreii) -------------------------------------------------------------------------------- 12f98b27bc | regret-index | 2023-12-07 03:51:19 -0330 checkwhite -------------------------------------------------------------------------------- 5e5e084c30 | regret-index | 2023-12-07 03:23:01 -0330 Bring back crocodiles with AF_DRAG as mostly Sewer & Ossuary exclusives Much like the return of brain worms, this is meant to help with Sewers having very little besides monsters slightly earlier or later than the D floors surrounding the game with, while showcasing a mechanic for new players to see much later on. With slightly reduced stats to compensate for their new AF_DRAG mechanic, they replace the water moccasins that alternate with Pargi that will be seen not too much later in D itself and fit into a few other gimmickless, chaotic sewers. Unlike the return of brain worms, they admittedly aren't super thematic monsters to fit much elsewhere without being somewhat redundant in some role or another (sewer-depth crocs aren't much interesting for Lair), so the secondary use of them is for another early D portal instead. Ossuaries technically are using zombies and mummies alongside a variety of weaker enemy types, but are also severely inconsistent in threat level by only having a single ossuary each use conceits such as live scorpions, undead centaurs / bees, spectrals, or flying skulls. Undead crocodiles fit the Egyptian theming attached to mummies and are also used in a handful of the noticeably weakest Ossuaries. (A very small number of other vaults have gotten them back or may access them, but only in sprints or early D. I poked at a few of the weaker ossuaries while I was here adding the monsters to them, but I ought to take a longer look at the high ends and low ends of both portals sooner or later.) -------------------------------------------------------------------------------- adca813884 | Nicholas Feinberg | 2023-12-06 17:45:32 -0800 Revert "Print monster names for unseen shouts" Pushed accidentally. This reverts commit d8d442875f0fa2de3af95ba7ff780a7c650386eb. -------------------------------------------------------------------------------- 224063c1d0 | Nicholas Feinberg | 2023-12-06 17:44:53 -0800 Add S_SQUEAK (bloodnok) The set of monsters affected here is too funny to not borrow. -------------------------------------------------------------------------------- d8d442875f | Nicholas Feinberg | 2023-12-06 17:17:16 -0800 Print monster names for unseen shouts So players don't have to look up what on earth makes "a rustling", or what the difference between a skittering and a faint skittering is. Might give too much info for shout luring. Maybe should disable for some common shout types, eg shout, roar... -------------------------------------------------------------------------------- 41b13fce57 | Nicholas Feinberg | 2023-12-06 17:16:34 -0800 Lint -------------------------------------------------------------------------------- 4be0acca3a | regret-index | 2023-12-06 21:27:17 -0330 Tell the monster bots about AF_DRAG. Whoops. -------------------------------------------------------------------------------- 42354c1e67 | regret-index | 2023-12-06 21:21:01 -0330 Grant AF_DRAG to alligators and reapers, with stat nerfs Alligators have been pretty vanilla beyond having variable speed via sprinting, which was removed from them in ccde610 for being a weirdly inconsistent speed (and part of messily precise seperate action speeds) rather than any interesting innately. They've got a reasonable position as regular melee monsters since Swamp's twin monster revisions, but it wouldn't hurt to give them a mechanic of their own, and there's already plenty of interest in Swamp in screwing with movement (roots, briars, woodweal, sludge, harpoon) that AF_DRAG should fit the branch as well as their flavour perfectly fine. It might be a little close to the last in the list, but Force Lance and Primal Wave coexist with tramplers and Airstrike + Waterstrike exist in the other liquid branch- monster melee and conjurations have such different dynamics it's fine for them to have a little bit of overlap. Reapers are in a weird position currently. They've got a straightforward theme useful in a variety of different vaults by being big-damge reaching branded weapon wielders, but despite their high damage they're not particularly noticeable as threatening monsters within their supposed normal spawning position of Summon Greater Demon or Pan. They're in fact most noticeable for Ice Caves, which is a weird position for a tier-2 demon threat. Not all of them can be hellions or tormentors or balrugs, and it might be reasonable to shove them off into R glyph with efreeti and rakshasa instead, but they could do with a little more of a trick. Reapers pulling the player in so they can't escape death is pretty cool, also. Alligators get a minor hp nudge downwards to compensate for the buff. Reapers get less HP, less damage, give more XP, _and_ ice cave reapers get -4 enchantment on their scythes. They'll still be completely terrifying, since characters with low EV can't walk away from them at all, but at least they're definitely distinct and scary things even from SGD or in Pan. There should be room for some other following uses of this mechanic... -------------------------------------------------------------------------------- 24261f851f | regret-index | 2023-12-06 21:21:01 -0330 New attack flavour - AF_DRAG This acts as a reversed trample- when the attacker deals damage, they move backwards and the target moves forward into the space the attacker was just attacking from, as long as the monster moves back into an empty tile it can inhabit and drags you to somewhere you can inhabit. Unlike trample, it doesn't make any size checks, since most of what's intended to have this isn't as big as elephants or dragons- just imagine them hooking and dragging your feet / tail / smoke trail / whatever with them as they back up. Also unlike trample, it will work with reaching weapons; the attacker won't back up if you're a tile away, only if you're both adjascent. Like trample, this still respects the mountain boots unrand, and is inherited by the zombies of anything that attacks with it. This is a somewhat scarier brand than trample in that usually the player would rather be moved away from where they previously were rather than pulled towards unknown territory, so it'll be substantially less prevalent then trample's all elephants + all dragons + like three other eldritch / demons. (It doesn't work at all in corridors with enemies behind them, after all.) It otherwise shouldn't be particularly more jarring or weird than how trample already slowly repositions players, anyway, and is another simple way to continue to screw with player-monster positioning with less direct other analogues than other effects currently heavily used. (Note that none of these messages and names are set in stone.) -------------------------------------------------------------------------------- 46bab52692 | Nicholas Feinberg | 2023-12-06 14:46:52 -0800 Tweak flux talisman (acrobat) To make shapeshifters feel less like heavy armour melee characters, block use of body armour with Flux talismans. Give Flux +4 EV to compensate. -------------------------------------------------------------------------------- 54a413c38e | Nicholas Feinberg | 2023-12-06 10:13:48 -0800 Rename anaconda -> serpent form Match the name of the talisman and avoid direct parity comparisons with the monster (which doesn't exactly match, since the monster doesn't have rPois and the form now does). Would also be a good excuse if we wanted to make the form not cold-blooded. -------------------------------------------------------------------------------- 8949418266 | Nicholas Feinberg | 2023-12-06 10:06:59 -0800 Give serpent talisman rPoison It's inconsistent with monster anacondae, but still feels vaguely intuitive to players (snakes are rPois, right?) and is a modest buff for a somewhat underappreciated form. -------------------------------------------------------------------------------- 99969ba1bc | Nicholas Feinberg | 2023-12-05 19:02:34 -0800 Don't blame spriggan druids for their friends We usually describe the ikiller as a band leader or summoner - a creature with pretty direct responsibilty for its pal who just killed you. Including spriggan druid convoking is a stretch. Should ironbound convokers get blame, or guardian serpents, or any number of buffing monsters..? Basically, it makes the stats very hard to parse, which wasn't the intent. -------------------------------------------------------------------------------- 0e810151a1 | regret-index | 2023-12-05 23:32:13 -0330 unbrace -------------------------------------------------------------------------------- af5d62a200 | regret-index | 2023-12-05 23:16:47 -0330 Tomb card: use non-default wall tiles When using the Tomb card, in sufficiently messy terrain or with lower power leading to incomplete wall raising, it can be easy to forget which walls will be the ones that'll eventually go down unless one bothers to check over each surrounding wall. This ui quandry is due to it using the given branch's default rock tiles, so over in Tiles it can be made clearer just by using a distinct rock tile- I've chosen WALL_SANDSTONE for this, since it's what's used in wizlab_dorokhole. (Note to self: wall_sandstone is inconsistently used for rock or stone in different vaults, should fix that to the former.) -------------------------------------------------------------------------------- 1471edab23 | regret-index | 2023-12-05 22:26:41 -0330 Cloud card: bring back select other cloud types 3194668 removed the variable cloud types from the Cloud card because the damage options made it inappropriate for the deck it was in. While this is a reasonable direction for it to follow, retaining the cloud-ring aspect for harmless if opaque clouds mostly just makes it a very awkward version of scroll of fog, for being centered on enemies instead of the player. This re-adds different cloud types to the cloud card, but each tier uses different types of debuff clouds rather than the old set of clouds including poison, fire, ice, or acid clouds. * L0: mephitic fumes * L1: miasma * L2: calcifying dust. Also, in the same spirit of encaging enemies it previously had, it once more doesn't place directly on monster tiles (but now actually works for non-wall tiles like fountains and open doors like it should), and they also last less time than they used to. The later two clouds don't overlap with condenser vane, and while there's some spell overlap the cloud ring functionality making many monsters not move forward but getting debuffed when they do should be a reasonably distinct effect compared to the limitations of Cigotuvi's Dreadful Rot, the will-check of Petrify, and the cloud lines of Elements card catoblepas summons. (Possibly Nemelex should reward very slightly less cards if any more cards get revised at this point, but escape cards are already usually just stacked or triple-drawn from outside of pretty earlygame, and the sheer power of Tomb, Elixir, or higher-power Exile still look much better off than this.) -------------------------------------------------------------------------------- 6a32cc10e0 | Nicholas Feinberg | 2023-12-05 16:44:24 -0800 Fix E display for felid lives Broken in 51874910468ad3864b802425bf3022. -------------------------------------------------------------------------------- ec03705108 | Implojin | 2023-12-05 15:23:17 -0600 feat: Let randart orbs have spell enhancers (Lightli) This sounds like it could generate some fun orbs. Let's try it out! As part of enabling enhancer artps for orbs, this commit also increases enhancer generation weights for both randart staves and orbs: The previous weights were low enough that these ARTPs were vanishingly rare on orbs. Weights for enhancer artefact properties are now slightly lower than Harm: Still pretty rare, but significantly more common than they were. -------------------------------------------------------------------------------- 406407be85 | Nicholas Feinberg | 2023-12-05 13:14:54 -0800 Felids: increase HP, nix fast move (Lici) Felid low HP is interesting. It's a very good fit for felids both thematically and mechanically, in that it encourages engaging with the extra life system - getting randomly obliterated by an orc priest, centaur, etc, is compensated for by coming back to life afterward. Still, there can be too much of a good thing, and playing around the *extreme* fragility of felids can be tiring. Fast movement is thematically cool, and feels vaguely appropriate for cats (slippery little things!). However, the gameplay is not particularly good, especially with species like felids which are only *slightly* fast. Scooting five steps for every space cleared, shot taken, etc, is a high keypress to meaningful decision ratio. Let's try something a bit different. Bump up felid's HP apt (from -40% to -30%) and cut their fast move. Boost int and stat growths a bit to help caster felids (who used the fast move more), and tweak apts to avoid this being too big a boost to late-game shapeshifter felids (who had their speed mutations melded anyway). See also 51874910468ad3864b802425bf30220b4fa1e95e. -------------------------------------------------------------------------------- e66bdc89e9 | regret-index | 2023-12-05 16:33:56 -0330 Swarm card: more bee types The Foxfire to Swarm card swap is understandable in the number of different monsters that had been lost to the former card over time, making it harder and harder to parse the "big number of flying enemies" theme. Poor ravens, red wasps, bumblebees, insubstantial wisps, and vapours. However, 1d6 and 1d9 bees at higher power is also just really unimpressive and unexciting compared to the rest of Nemelex's summon cards, and there's three bee types already available for the card to rely on. Since another summons card was just nerfed, reaching out to those should be fine, and since they're all still groupable together as bees, it shouldn't be too much more complexity overhead. The 1d3 killer bees at the bottom end of the Swarm card isn't changed by this commit, but the second tier is now 1d4 bees plus a queen bee, and the third tier is now 1d5 bees plus a queen bee plus three meliai. They're all still quite frail summons, but it should be interesting to have queen bees as a support summon mixed in amongst the rest, and they'll still fall off against higher AC and AOE later on anyway. -------------------------------------------------------------------------------- 1a011fea95 | regret-index | 2023-12-05 16:13:06 -0330 Elements card: more summon swaps * Replace the fire vortex summon with a solitary fire bat. While they're technically weaker, the fire bats fit the beasts theme as opposed to a raw elements theme, and also they're not awkwardly perma-confused allies. * Replace the iron golem summon with a war gargoyle. Also weaker, but this is substantially less awkward than the number of times and ways one may want to swap around and speed up the obscenely strong, basically unkillable, and also slow melee-only ally. Also, more motile ranged emphasis in Nemelex's summoning cards helps distinguish the decks from the Summonings school as well as from other gods' summoning invocations. (It even introduces a nice curve of 2/4 -> 3/4 -> 4/4 ranged summons!) -------------------------------------------------------------------------------- 73d24e4865 | Nicholas Feinberg | 2023-12-05 10:04:26 -0800 Tweak docs for species intrinsics -------------------------------------------------------------------------------- b247575874 | regret-index | 2023-12-04 22:47:31 -0330 Frederick buffs and spell revisions Frederick's current killratio, even for a lategame unique, is currently very sad- over the past 16 months of recent versions it's a paltry 0.27%. Spellforged Servitor is a cool gimmick, but with various player magic overhauls it's meant a fair bit of special-casing for spells the player can no longer cast, and the other conjurations are all relatively common spells from a multitude of other lategame enemies currently available. An update can help deal with all of these matters at once. Frederick now loses Iron Bolt, Bolt of Cold, and Force Lance for the new spells of Plasma Beam and Bombard, while keeping Spellforged Servitor which can cast those both. We seem to be fine with these spells on player ghosts, anyway, and it can introduce interesting complicated ally targetting tactics as another distinct gimmick alongside the Servitor amplifying this. Since Plasma Beam does extremely high damage in monster hands, he gets a bit of an HD nerf. (It's more resistable than his prior spellset, at least.) Since Bombard is knocking him away from melee more (and since phials of floods / scrolls of silence neuter him a lot more than other uniques), he gets a bit more health and a bit of a damage buff. Hopefully he should catch up to all the surrounding power creep here for another 8 years. (In converted saves his servitor won't do anything, but also, a single unique having 1/4 spells not work is probably not worth the compat tag. TODO: adjust another unique to use ice magic to compensate for this contributing to uniques fire bias?...) -------------------------------------------------------------------------------- 2d9f522bd3 | regret-index | 2023-12-04 22:47:31 -0330 Make red very ugly things not lose AF_FIRE for AF_STICKY_FLAME AF_STICKY_FLAME made sense as an upgrade mostly when there was still item destruction; when we lost item destruction in 0.15, sticky flame's non-scaling damage made it pretty harmless beyond pretty early parts of the game. Sticky flame could do with a new mechanical purpose, but until it gets it, it is probably for the better that something so prominent in 3-rune winning games as 19 seperate spawns isn't noticeable weaker than its default form if it rolls the wrong element. -------------------------------------------------------------------------------- 48e20ad691 | Nicholas Feinberg | 2023-12-04 18:12:57 -0800 Tweak blastminer description again (Darby, r-i) Clarify why the cannon is a kobold exclusive. -------------------------------------------------------------------------------- 339af1cd1d | Nicholas Feinberg | 2023-12-04 17:58:48 -0800 Simplify Dimensional Bullseye Remove the MP cost, per a comment from DO. It probably wants more buffs than this, but a simplification is a nice start. -------------------------------------------------------------------------------- ff0e985136 | Nicholas Feinberg | 2023-12-04 17:56:36 -0800 Disable descent in stable It's not ready yet! Brain Bite (minor damage + mp drain, no int drain) Brain Feed is an extremely weird monster spell in most games. With so little stat drain around by default in a three-rune game, individual hits against a stat approach 0 extremely rarely unless a player has next to none, which is influenced heavily by character start combo and very little by normal character growth. The relatively minor hit of intelligence also does very little for its use on higher Int characters aside from slightly worsening spell success rates, which works weirdly against the flavour of various brain-eating monsters not actually caring about the quality of brain so much as just killing those with incidentally little of it. It's kind of difficult to tell what this spell should do. It'd be entirely possible to make it drain a lot more intelligence or percentage-based + flat intelligence to make actually effect more characters, but while strategic damage of a restorable sort would be more mechanical diversity, screwing with spell success chances and non-tangible damage rolls aren't mechanics we've kept to the present day (c.f. skilldrain, old sap magic). So, I'm sidestepping the original effect of the spell entirely, while focusing still on its theme. Brain Feed is now revised into Brain Bite, a mildly-experimental mix of half a Smite plus a percentile version of Draining Gaze- 4-8 irresistable direct damage doubled if you have no mp, then draining 20% of one's max mp (rounded down). (This now also works on monsters, dealing damage checking on antimagic and then applying antimagic.) The percentage part lets it scale across the game (compared to Draining Gaze rapidly heavily draining most player mp), and irresistable but restrained damage sources are currently pretty reserved designs (Smiting, Damnation, usually Torment) that could be iterated further upon. (It'd be good to think over what the point of statdrain even is outside of Hell, Tomb, and klown pies. Possibly a variant of flaying but only for stats would be interesting, possibly making an even shorter para but with brief stat-zero would be an interesting revision of current para. This is kind of out of this particular commit's scope, though- getting to stat zero via Brain Feed didn't really happen for a very large number of character combinations, so concerns over that are minimal.) Tile update uses the old mimic teeth tile by coolio, modified by jpeg, on top of the current Brain Feed icon by snw-0. -------------------------------------------------------------------------------- 9ad1905e61 | regret-index | 2023-11-30 19:45:19 -0330 Adjust K blastminer stats / placement a little more. Nerf their HD so Bombard hurts less and have them cast it a little less, lower their HP to demonologist levels, and have their bands coinflip for going solo rather than always appearing in a band. Also, lower their placement in some of the Orc ends that use them. In exchange for said nerfs, we can up their individual spawning weight a little more, and toss them into a few more appearances (post-Lair kobold vaults, late kobold special rooms, archer zig floors, and so on). I'm wary of upping their spawn rate too high for sheer testing purposes, as Orc still could do with more non-orcish additions, blastminers aren't intended to be the sole non-Orc notable threat, and I'd rather not actually flatly increase the threat level of ever-awkwardly-positioned Orc as is. Still, it's reasonable to mildly nudge them up for now. (As to whether people will internalize getting into the cannon's range makes a given blastminer as dangerous as an orc sorcerer rather than just being another weak kobold... well, we can let that take its course.) -------------------------------------------------------------------------------- 11243cb979 | regret-index | 2023-11-30 19:45:19 -0330 Make the V "preserve_walls" tag actually preserve rock Kind of looks like it wasn't actually following through from looking for the tag to actually doing anything with it since its concept in e7d2410, I think? -------------------------------------------------------------------------------- 7fa767f3fe | Implojin | 2023-11-30 15:30:37 -0600 Let stash searches for mapping match revelation This commit adds a {magic mapping} stash search tag to revelation scrolls, purely for UI convenience. Searches like "map", "mappi", etc., will now return any revelation scrolls that may exist in your game. -------------------------------------------------------------------------------- 6898e6545c | Nicholas Feinberg | 2023-11-29 13:59:18 -0800 Even out demonspawn starting attributes The extra point of int is an antique oddity leftover from aa62dae1b9dd. Demonspawn are generalists; no reason to shift them very slightly toward casting. -------------------------------------------------------------------------------- a03ddba797 | Nicholas Feinberg | 2023-11-29 10:11:18 -0800 Remove explore healing from Arena Folks have noted for a while that Meteoran gets a huge burst of explore healing from entering Okawaru's Arena. This is kind of cute, but it's not really exploring, and it's not in keeping with the intention of explore healing. Since Arena is quite strong enough as is, let's cut this. (Don't think this will violate player intuition.) -------------------------------------------------------------------------------- 246cf0196b | Nicholas Feinberg | 2023-11-28 20:52:24 -0800 Display drown damage -------------------------------------------------------------------------------- e6ea8fd53f | Nicholas Feinberg | 2023-11-28 20:50:24 -0800 Fix the monster build (gammafunk) -------------------------------------------------------------------------------- e172a6e21a | Implojin | 2023-11-28 17:30:50 -0600 fix: refactor some unusual items monster messaging 750b6846b9 introduced a bug that could cause monster bands to come into view with messages like "A gnoll is ." if one of the mons in the band was carrying an unusual item that was neither branded nor artefact, like a throwing net. Here I've refactored and unified the relevant code to be able to handle messaging for arbitrary unusual items, but `get_monster_equipment_desc` is still pretty fragile, and has had many similar messaging bugs over the years (e.g. 7046ed1b37, f44d0c5ad2, 1e14066ec4). Fingers crossed that this doesn't break anything else. -------------------------------------------------------------------------------- adecf4124d | Nicholas Feinberg | 2023-11-27 22:43:20 -0800 Refactor slimify This logic is ridiculous and should probably be rethought, but this is at least easier to read. -------------------------------------------------------------------------------- d61ee18ceb | Nicholas Feinberg | 2023-11-27 22:38:15 -0800 Refactor polymorph Continuing from 6ee961360c27e626047 (2020), make all poly code use a more consistent, simpler to understand set-based logic. This includes Xom, Nemelex, chaos, etc. Also removes RANDOM_TOUGHER_MONSTER, unused since the removal of polymoths in b5aec581b1ad18 (2013). -------------------------------------------------------------------------------- 283494c966 | Nicholas Feinberg | 2023-11-27 21:43:45 -0800 Add controversial Rakshasa tile (Sastreii) The depiction of rakshasas as tigers seems to be an antique D&Dism. To be mythologically accurate, we should move away from it; or, if we want to keep this sweet art, we should retheme rakshasas as eg 'felid illusionists' or 'devil-cats' or similar. Anyway, this is newer and more dynamic than the previous cat-like Rakshasa tile, so let's use it :) -------------------------------------------------------------------------------- c13cea2ef3 | regret-index | 2023-11-27 21:29:46 -0330 New dragon-octopode tile, more dragon tile updates (Sastreii) Yet more good work. -------------------------------------------------------------------------------- b20eab6ec2 | regret-index | 2023-11-27 21:03:30 -0330 Fix arcanists just saying "Occultist", give occultists their tongues back (Undo) Accidental fallthrough dealt with. Actually rarely directly mentioning the rivalry in their dialogue is cute, though, so I added a rare new line for either. -------------------------------------------------------------------------------- b0f5842387 | regret-index | 2023-11-27 20:16:50 -0330 Non-placeholder kobold blastminer tile (Sastreii) Obviously a lot better than prior frankenstein'd tiles, and much cooler looking, but there's some awkwardness in reading rare hand cannons on the right hand. Still looks good for arbalests and fine enough for bows. Maybe it could swap cannon hands by giving said cannon wheels instead of hoisting it on an arm? This is good enough for now, anyway. -------------------------------------------------------------------------------- 3a14828bb5 | regret-index | 2023-11-27 20:16:50 -0330 Throw kobold blastminers + more ogre mages into a few Orc vaults / ends New monster with reasonably different functionality for the branch, new placements. Mostly fit into more cave-like ends (that they dug open), and vaults that would fit some ranged monsters or more general variety. Also, since ogre mage bands are very rarely used anywhere anymore (dropped from both V and Depths, so mostly just a post-Orc D spawn), they can be pushed a little bit more than the exactly one Orc end to give Orc a little bit more scariness. (Also also, fitting in a little per-end balance nudging and head reformatting, while I'm here.) -------------------------------------------------------------------------------- 6ba0ef72ef | regret-index | 2023-11-27 20:16:49 -0330 New Mines enemy: kobold bombardiers Part of how Orc got its levels cut in half was the lack of variety inherent to an orc-centric branch, with a variety of orcs already sitting on most of the possible roles orcs could play, and with the obvious other cavedwellers mostly overlapping with the rest of the game. This is part of an experimental batch of new enemies meant to fleshen out the identity of the Orcish Mines on the latter part rather than the former, which should also grant it a fair bit more enemy variety to actually vary up its ends with beyond the standard four strongest orc types and rare per-end uses of ogre / centaur / giant guests, all already available elsewhere in D and V. Kobold bombardiers are uniquely both ranged monsters and conjurers, benefitting from the distance of the former and the burst damage of the latter. They use the player species' +3 ranged weapons apt with an orcbow, arbalest, or very rarely a hand cannon, and exaggerate this further by also operating a monster-only cannon with which they slowcast Bombard. The latter deals quite fairly more damage and lets them back away from those approaching, but is more limited in range compared to their weaker arbalests, which should provide an interesting tension without needing too much further complication. (Possibly monster Bombard might warrant an 100% self-knockback rate rather than a 50% self-knockback rate, to be any noticeable compared to Iron Shot, but I don't know if that'd be a bit too much of a buff to ghosts using it). They naturally spawn in duos, and probably could fit in a slim number of D vaults already focused on kobolds. A couple of less conventional Orc end vaults (like the one currently reliant on centaurs, the serial vault towns and mushroom circles, and the encompass vault) will get these in the future. For now, they replace the completely harmless gnolls in the branch alongside a little bit of the orc warrior bands and cyclops weight, skimming off of monsters one sees plenty of in D. They're more dangerous than any of those, but they're probably not more dangerous than higher-tier orcs, so it should be fine. (Extremely placeholder tiles frankensteined between roctavian's old big kobold tile, needle trap tiles, and one of the granite statue tiles. TODO: decide on the best name between kobold demolitionist (maybe too close to demonologist?), kobold blastminer (extremely on the nose but maybe the best reading?), and the bombardier name used here (less rather direct and not a portmanteau?)) -------------------------------------------------------------------------------- 5585b42bd2 | regret-index | 2023-11-27 20:16:49 -0330 Make monster Bombard knockback the caster 100% of the time Currently the only users of it are player ghosts, and player ghosts being optional weird threats with dramatic spells mostly assigned to them is their current entire point, so them getting Bombard as opposed to Iron Shot should be more noticeable. It also makes any future monsters (as is slated in a future commit) casting Bombard be more parseable and consistent at using that as a gimmick mechanic compared to the normal Iron Shot. (It's not symmetric with player Bombard still being a coinflip to move, but monsters have lots of ways their spells are stronger than players anyway, and nobody's complaining about monster summons working out of monster LoS currently.) -------------------------------------------------------------------------------- b392501acf | Nicholas Feinberg | 2023-11-27 12:13:55 -0800 Add a message for AF_CONFUSE (CarefulOdds) -------------------------------------------------------------------------------- 4fe0c3d864 | regret-index | 2023-11-27 04:18:01 -0330 Make living jellies immune to nets, note this + their rConstrict in x-v Making jellies immune to nets is consistent with their immunity to constriction, and matches with how insubstantials are immune to both. It's a nerf to throwing nets, but we just buffed nets mildly by being able to hit SIZE_GIANT monsters in 7dc041b anyway. Aside from making fused slime creatures a bit scarier to run from, this is most noticeable for removing one of the many TRJ strategies. There's possibly a little concerning increase in threat in Slime between that, some of the newer slime end layouts, and the new prevalence of glass eyes and their non-golden / creature company. Might be worth looking into with slightly reduced floor spawns or something, but it's probably fine for now. This also adds a note to x-v that jellies are amorphous and immune to ensnarement (both nets and constriction), as is noted for insubstantial monsters. It'd be nice if this amorphousness note also was useful for Shatter's effectiveness, but Shatter checks the general Jiyva creatures and I don't think eyes should get immunity to either of the ensnaring effects? Probably. (XXX: jelly simulacra being too solid to avoid nets / constriction is fine from a flavour perspective, but does that justify jelly zombies also being vulnerable to the same stuff?) -------------------------------------------------------------------------------- 7d1fb776a8 | Nicholas Feinberg | 2023-11-26 14:21:34 -0800 Maybe fix Dispater dropping his orb (cool2) -------------------------------------------------------------------------------- 3c0c803687 | Nicholas Feinberg | 2023-11-26 14:18:07 -0800 Maybe fix item AC changes in morgues Shouldn't waste time talking about the effect of equipping/de-equipping your armour in your morgue. It's too late! -------------------------------------------------------------------------------- 2febe9be03 | Nicholas Feinberg | 2023-11-26 14:02:11 -0800 Let Boris switch away from Morg Since he never actually used it, and, also, it was removed. -------------------------------------------------------------------------------- 23a41d6f7c | Nicholas Feinberg | 2023-11-26 14:00:18 -0800 Add more Grinder lines Try to add a little variety for player deaths to Grinder (frequent). Pay no attention to the inconsistency. -------------------------------------------------------------------------------- 9f3f65008f | Nicholas Feinberg | 2023-11-26 13:52:11 -0800 Remove wizardry hard cap Benefits from wizardry capped out at six rings of wizardry, or one wiz ring plus Veh's bonus. This was almost totally irrelevant, since benefits from more than one wiz ring were almost imperceptible anyway. Remove the cap. -------------------------------------------------------------------------------- f8cb93b20b | regret-index | 2023-11-26 18:05:40 -0330 Size up smoke demons (PleasingFungus) I don't know how many other weird sizes are going to be found out from the new size indicator list and honestly I don't know how long most sizes (or at least more than three) will even last, but since this was asked for directly, I'll make this random demon with a non-small tile not small on dev request. -------------------------------------------------------------------------------- 54a1e13892 | regret-index | 2023-11-26 17:58:42 -0330 Shrink ufetubi. Make them SIZE_SMALL, not SIZE_NORMAL. They're defined by swarming whether by themselves or from ynoxinuls, and most other tier-5 lesser demons are smaller than default (aside from lemures, who are at least former souls). This probably means very little, but size is more visible with the examination streamlining, so. -------------------------------------------------------------------------------- 4d48fc061a | regret-index | 2023-11-26 17:52:17 -0330 Some more of the indefinite vault review Some adjustments to Zot stair vaults, some buffs to serial_magic_research since it's been severely power crept plus some restraining its spawning floors in Depths, some teleport closet handling from serial_baiyou, giving more of a cue for the antique champions in wizlab_zonguldrok in console, more abyss rune tweaks, and some other stuff. A slim few things of note: * Digging directly adjascent to the abyssal rune has been made harder in a few vaults using such (though digging can still randomly help.) * Reduced the weaker enemy count in infiniplex_zot_generator, in exchange for more of the enemies that do matter at that depth. lemuel_fire_house and lemuel_acid_trip may create some precedent for large numbers of harmless enemies in Zot (and they're definitely using much weaker ones), but they're both in much smaller maps and dump them out alongside the nonbase draconians more reliably. * lemuel_draconian_sentries mostly just eats digging charges as a stairs vault, since there's little push towards trying to run past them instead of just pulling each out individually. Experimenting her with changing it into an ambush vault instead, so one can't avoid being heavily blasted by multiple draconians unless they dive down a hatch. * pan_frozen_over is very far under the other guaranteed demonic rune vaults in kill statistics, so clearly it'll be safe to replace the juggernaut simulacra with walking frostbound tomes, right? It overlaps even less with Cocytus, at any rate. -------------------------------------------------------------------------------- 0b22e4e0f1 | Nicholas Feinberg | 2023-11-25 20:57:26 -0800 Tweak butterfly stats Remove their will (ridiculous that they had any) and put their EV back up a bit. I dropped it to make scrolls of butterflies better against ranged enemies, but now that ?butterflies summons way more and does knockback, this should be less necessary - and intuitively, butterflies *should* have very high EV! -------------------------------------------------------------------------------- 6eca2949b2 | Nicholas Feinberg | 2023-11-25 20:56:51 -0800 Fix: don't make Dith hate boulders Don't trigger shadow shard after casting Brom's Barrel o' Boulders. It's sadly counterproductive. -------------------------------------------------------------------------------- 202bf7ea07 | Kyle Rawlins | 2023-11-25 16:04:13 -0500 fix: guard against a webtiles failure mode I'm not exactly sure how this is reachable, but it apparently is. Possibly now via a startup error of some kind, following aead2f62b19a4b? -------------------------------------------------------------------------------- aead2f62b1 | Kyle Rawlins | 2023-11-25 14:15:28 -0500 fix: better handle webtiles ttyrec write errors If a ttyrec write on game start triggered an OSError (e.g. on a full disk), the process object wouldn't get started, but also wouldn't get fully cleaned up due to a bug, resulting in spurious processes in the lobby. This fixes this bug, so now the process should get cleaned up (and the user gets an error message). This commit also tweaks the handling of OSError on ttyrec writes for a started game. Previously they just led to an unhandled exception from the callback, now they log a better error; unclear if something else should happen. -------------------------------------------------------------------------------- 7e9613595b | regret-index | 2023-11-25 03:16:41 -0330 Erica: from human to octopode Erica, while a functional threat, is also a pretty weird mix inherited from old mixed monsters quite a while ago. Few pre-Lair uniques have five different spells- could you actually name them all off the top of your head? She's also got some very boring kill-you dialogue, which could do with almost anything else to compliment it. Changering her from a human to an octopode can focus on IRL octopus camouflage and venomousness aspects, making her venom bolt + invis less generic, and gets in another player species representative with minimal complexity burden. It also replaces her robe with a random ring as a secondary reward for defeating her, and helps her weird melee / conjurations split some more with a little constriction (which also gets to be witnessed and experienced for new players before the Snake entry with something besides harmless ball pythons). This commit also cuts Confuse and Force Lance out of her spell set- the former due to the adjacent prominent of monsters with invisibility and confusion, and the latter due to its clash with constriction. (It'd be reasonable to have another early-game unique with Force Lance instead, but that's out of this change's scope). The cast rate from both is directly put into her Slow and Venom Bolt casts. Placeholder tile uses Bloax's old octopode crusher tile paired with roctavian's prior Erica tile palette and flaming sword. -------------------------------------------------------------------------------- 69a08244f0 | regret-index | 2023-11-25 03:16:37 -0330 Maurice: from human to vine stalker Maurice has lost most of his distinctly weird gimmick at this point. He uses his own wand now to discourage players from dropping wands instead, he can't drink your potions and read your scrolls any more, and he can't even sprint. He clearly could use something new to cover for this. Changing him from a human to a vine stalker lets him threaten with antimagic bites, a vector of threat not particularly prominent until Lair branches, and thus gives him something new to do. It also improves his melee a fair bit, so that he's not noticeably weaker than, say, the vampires one could encounter in near equal depths, and alongside the customary vine stalker regen helps him actually just outright kill his foes. This even also swaps out another plain human to instead represent one of the many weird player species Crawl so prominently presents, one that reflects his thieving background in being a magical body-snatching parasite. While this is a notable buff to his melee and durability, he's still not much stronger than, say, the functional Amaemon, so I'm also nudging his depth a little shallower- D:7-12 instead of D:8-13. Possibly he could also lose AF_STEAL entirely with this change, but I'll leave that for others to decide. Placeholder tile is frankensteined from Sastreii's unused jack-o-lantern tile mixed with roctavian's thorn hunter vines + palette and the current Maurice tile's palette (also by roctavian). -------------------------------------------------------------------------------- 5939ac1fb6 | Edgar A. Bering IV | 2023-11-22 09:03:26 -0800 fix: condition troll hide on species (Lici, Ge0ff) No more green hides from Earth Mages and Shamans -------------------------------------------------------------------------------- b2354cd04e | Monkooky | 2023-11-22 01:06:33 -0600 feat: Armataur rework: Rampage healing Players and devs alike have expressed that Armataurs felt like they needed something more, so here it is! This commit is a minor rework of At. The new feature here is rampage healing: At XL 7, Armataurs now gain a stacking regen buff when they roll towards enemies. This regen buff is loosely based off of Powered by Death, but instead of triggering on kills, it triggers when you roll. Rampage healing only triggers when rolling towards threatening mons, as an attempt to limit the long-term incentive to kite slow mons around. This is an imperfect solution and I don't like how this can be opaque to players; expect further simplifications in future. Awkward Tongue is gone. Poof. Buh bye. It was awkward. At's rugged brown scales 3 are replaced with tough skin 3: No more 7% MHP, but you keep the 3 AC. There are many different directions rampage healing could go from here, but let's try it out this way for a bit? Co-authored-by: Implojin -------------------------------------------------------------------------------- 35875b34c7 | regret-index | 2023-11-21 18:26:58 -0330 Give player Ghouls +4 Intelligence Ghouls as one of the three undead player species are otherwise extremely one-note compared to the more prominent gimmicks of contrasting vampires and mummies (whether or not those gimmicks work in practice), due to their mix of apts and stats. They've got a few decent casting apts but atrocious intelligence and dexterity apts, and they've got +1 Unarmed + Claws 1 with -1 in all weapons otherwise, so they almost all end up pointed towards unarmed melee builds in practice. Buffing their base Int to not be so low makes it not nearly so terrible to consider their +1 Ice and Earth apts (or their +0 Necro and Poison apts) as an alternative. They still don't get random int boosts from levelling and their Dex has been left still extremely low, so they're still somewhat flavourfully pointed towards unarmed ravaging, but player ghouls now also get at least the chance to consider other options while they still exist (and not just get merged into Vampire or whatever). -------------------------------------------------------------------------------- 7710a678fc | Nicholas Feinberg | 2023-11-21 13:42:41 -0800 Damn the Serpent of Hell (gammafunk) rDamn is normally only on monsters which cast damnation. The SoH's rDamn was leftover from before 06872b5b195 (2015), when it had a Hellfire breath. -------------------------------------------------------------------------------- 88a7baa7fa | Nicholas Feinberg | 2023-11-21 13:42:41 -0800 Show non-regenerating mons (CarefulOdds) -------------------------------------------------------------------------------- b0162a2734 | regret-index | 2023-11-21 17:03:14 -0330 Crunch down and tweak more Zig set populations Since a variety of branch populations were more fleshed out over time, less and less of the sets need to emphasize broad yet specific monsters in them over time. Also of note: * Vaults sets properly use V out-of-depths as I intended to use and accidentally left out ages and ages back. Makes them notably more dangerous on average, but mostly only for those not megazigging, and that's fine since the full V ood set is already one of the most varied of available branches anyway. * Crypt sets focus less on the heaviest hard-hitting undead, since Tar and Dis picked those up, and instead more on revenants, since they've got Dispel Undead to go threaten megaziggers with. * Fire is scarier because we've got enough monsters in that element we can avoid overlapping with all those normal-endgame dragons and giants. * Lair branch Roulette is more crunched down so it can place more ghost moths. * The new Vestibule set is now rarer and somewhat nerfed to weigh the random spawns higher than the handpicked ones. It's still pretty dangerous just by being another silent spectre set, of course, but it doesn't need to be quite so prominent while zigs are trying to be varied instead of just twenty-seven floors of silent spectres + orbs of fire + tzitzis. This buffs the scaling for the non-Tar hells, while they're also being more focused down, as a little recompense. -------------------------------------------------------------------------------- 277233ada9 | Nicholas Feinberg | 2023-11-21 12:04:26 -0800 Adjust minor monster descriptions (Flugkiller) Only show regen rate for fast-regen monsters (Flugkiller) and move sInv back into the 'text description zone' to make room for holiness. -------------------------------------------------------------------------------- b799ba9de5 | Implojin | 2023-11-21 13:15:19 -0600 Fix an AK pocket abyss save upgrade crash Abyssal Knight games that were saved while in the starting pocket abyss, and subsequently upgraded past e63b5e0675, ended up having no level id on the stack when trying to exit the abyss. This commit should allow any affected saves to return to D:1. -------------------------------------------------------------------------------- 2bbac1624d | Nicholas Feinberg | 2023-11-21 09:59:55 -0800 Describe panlord/ghost brands again (Lici) Got lost in 3dd9dd10254512485882. -------------------------------------------------------------------------------- 83d41fd8b6 | Nicholas Feinberg | 2023-11-19 16:58:41 -0800 Tweak glass eyes' description 57150269e139b239e5 made glass eyes LRD-able, based on an early WIP description of glass eyes that described them as being literally glass. In the meanwhile, the final version of 492612b1e5dc9033738 changed glass eyes to only be glass-y. This was inconsistent. The mechanical implications of the decision are limited, and player intuition probably does want 'glass eyes' to be literally glass. Adjust the description to match, and cut out a sentence that duplicates the 'spells' section. -------------------------------------------------------------------------------- b85d59ca80 | Nicholas Feinberg | 2023-11-19 16:51:47 -0800 Fix: maybe avoid a boulder crash (geekosaur) Try to only make boulders push things which are alive. -------------------------------------------------------------------------------- 70f3316b05 | Zhang Kai | 2023-11-19 09:18:47 -0800 Create godname.txt -------------------------------------------------------------------------------- b2e1c032c2 | Zhang Kai | 2023-11-19 09:18:47 -0800 Fix montitle.txt -------------------------------------------------------------------------------- 0e25566502 | Zhang Kai | 2023-11-19 09:18:47 -0800 Fix gods.txt -------------------------------------------------------------------------------- 0976ef0c61 | Zhang Kai | 2023-11-19 09:18:47 -0800 Fix cards.txt -------------------------------------------------------------------------------- 86b3dce6e7 | Zhang Kai | 2023-11-19 09:18:47 -0800 Create monspell.txt -------------------------------------------------------------------------------- 1ba604ef71 | Zhang Kai | 2023-11-19 09:18:47 -0800 Fix godspeak.txt -------------------------------------------------------------------------------- d157652452 | Zhang Kai | 2023-11-19 09:18:47 -0800 Update features.txt -------------------------------------------------------------------------------- a6869d85f1 | Zhang Kai | 2023-11-19 09:18:47 -0800 Update unrand.txt -------------------------------------------------------------------------------- 64512e9d5b | Zhang Kai | 2023-11-19 09:18:47 -0800 Update spells.txt -------------------------------------------------------------------------------- 71cec17ea4 | Zhang Kai | 2023-11-19 09:18:47 -0800 Update items.txt -------------------------------------------------------------------------------- 2e2ac5b567 | Zhang Kai | 2023-11-19 09:18:47 -0800 Update monsters.txt -------------------------------------------------------------------------------- cbe862445d | Zhang Kai | 2023-11-19 09:18:47 -0800 Update status.txt -------------------------------------------------------------------------------- 13f20ad9b5 | Zhang Kai | 2023-11-19 09:18:47 -0800 Update mutations.txt -------------------------------------------------------------------------------- f23a8c9ba6 | Zhang Kai | 2023-11-19 09:18:47 -0800 Fix ability.txt -------------------------------------------------------------------------------- 4d60c6eab0 | Nicholas Feinberg | 2023-11-19 09:09:39 -0800 Remove sleeptime supershields (cool 2, Ge0ff) -------------------------------------------------------------------------------- a9834b393d | Nicholas Feinberg | 2023-11-18 17:41:00 -0800 EVIL HACK: Don't pre-ID randbooks I regret every writing code. (And 658a57c81a4/85e71fe22c973af) in particular. Fixes #3345. (Hopefully.) -------------------------------------------------------------------------------- 1e7a56e4ca | Nicholas Feinberg | 2023-11-18 15:58:15 -0800 Tweak Spellforged Servitor spells Cut Sticky Flame (quite depressing in melee), add Irradiate. -------------------------------------------------------------------------------- 97aaa3725a | Nicholas Feinberg | 2023-11-18 15:42:54 -0800 Remove size's effect on shields (again) Continuing from 6e8f0f562f661212d597, remove the effect of monster size on SH. (For simplicity and sanity.) This is a small nerf to spriggan monsters, which get -4 SH now (if they had bucklers before). Spriggan riders, for example, go from 24 SH to 20. We can comp 'em some HD or EV or something if needed. -------------------------------------------------------------------------------- f7a513a3ec | Nicholas Feinberg | 2023-11-18 15:32:26 -0800 Display monster equip/ench resists It was previously a rude secret that, eg, Fannar had rF- from his ring of ice and that Parghit had GDA resists. This also messed with targeters. Well, now that all monster equipment is ID'd, this is easy to fix. So let's fix it! -------------------------------------------------------------------------------- 7238fd0580 | Nicholas Feinberg | 2023-11-18 15:05:43 -0800 Display monster SH Also, round monster stat pips up. Don't claim monsters with 4 AC have 'none'. -------------------------------------------------------------------------------- add1f9aa00 | Nicholas Feinberg | 2023-11-18 14:28:04 -0800 Rephrase singular attacks (Namsan) You know, why not. -------------------------------------------------------------------------------- 31867e143a | Nicholas Feinberg | 2023-11-17 23:15:33 -0800 Compact more monster info Plop threat, regen rate, size, intelligence, and sInv into another line in the 'stat block'. This isn't as important as speed or attack, so arguably it should be below them, but it looks nice all together. -------------------------------------------------------------------------------- d25c09d0c2 | regret-index | 2023-11-18 02:50:04 -0330 Big themed scaling vaults batch across D, Depths, Swamp, V, Zot. About twelve, mostly focusing on gods or locale echoes, generally spanning D:8-14 or D:12-14 and Vaults / Vaults, some also fitting into Swamp or Zot. Most of them are relatively safer than what god-themed vaults can already do for D:13- or what generic floor spawn vaults can get from few controls on out-of-depths, so it should be fine. Most of these, barring the Makhleb, Nemelex, and Zot + Pan arrangements, are experiments and practice in stretching out how far natural branch spawns might go to provide anything resembling a coherent theme: a pseudo-swamp, a Halloween mansion, some sinful smouldering keep, an undead garden, some shadows of Dith, and so on. Some of the most extreme scaling monster listing headers might warrant revisiting by throwing such into lua functions and then trying out other layouts under the same idea and a uniq_ tag, but it's important to first see if these game-spanning vaults have everything down right first. D's enemy set hasn't gotten removals in ages and both D and Depths support a lot of guest themes, so such lists probably shouldn't go out of date any time soon, either. -------------------------------------------------------------------------------- 536417deff | yrdzrfxndfvh | 2023-11-18 02:50:04 -0330 new Ziggurat pillars (#3348) [Committer's notes: No to the ballistomycetes; while it's a nice concept to vary Zig floors by occasionally helping the player out directly, ballistos are pretty exclusive to Fedhas at this juncture and they're far too harmless for zigdelvers otherwise to much justify. Also, adjust the two monsterful ones' depths to a more standard point of double digits zig floors. Closes #3348.] -------------------------------------------------------------------------------- 3cc34cc19e | regret-index | 2023-11-18 02:50:04 -0330 Fix up the new cutlass ship vault (#3002) Removes the lair branch ancient champions (spoilery aggression) and lair branch or deeper large counts of wights / wraiths / eels (completely harmless) for spawns more reasonable for each of the branches. Also, compress the rest of the header to house style standards, and fix up some teleport island and placement issues regarding the vault's water. Alongside the prior merged commit, closes #3002. -------------------------------------------------------------------------------- 30827cb387 | kippig | 2023-11-18 02:50:04 -0330 Add ghostly pirate ship vault. -------------------------------------------------------------------------------- 809df13f7d | regret-index | 2023-11-18 02:50:04 -0330 Update the shared lists in mon-spell.h Don't mention klowns in the list without pies, mention formless jellyfish for now in MST_BLINK_CLOSE, and rename + move down the howler monkey and ghost moth spell lists to their corresponding glyphs, since those don't share entries anymore with demonic crawlers or eyes of draining. -------------------------------------------------------------------------------- 6fe15c62fe | Nicholas Feinberg | 2023-11-17 21:55:40 -0800 Let spectral weapons regenerate Don't see any reason to ban it. Dancing weapons and animated armour both can regen. Doubt it'll matter. -------------------------------------------------------------------------------- e8c24b2130 | Nicholas Feinberg | 2023-11-17 21:46:01 -0800 Fix: free foeless foes from the bat zone (autarch) If a batty enemy ends up with no foe (perhaps because of Ru), don't leave them stuck in BEH_BATTY indefinitely. -------------------------------------------------------------------------------- 8808d95e9a | Nicholas Feinberg | 2023-11-17 19:55:14 -0800 Don't crash when examining kraken zombies (r-i) Or anything else with negative stats (!). -------------------------------------------------------------------------------- fb7600b534 | Nicholas Feinberg | 2023-11-16 21:58:10 -0800 Unbrace -------------------------------------------------------------------------------- 91e83f5f74 | Nicholas Feinberg | 2023-11-16 21:56:39 -0800 Make test spawners flammable Remove rStickyFlame, which was almost entirely useless. It was mostly applied to insubstantial monsters/forms, which... are already immune to sticky flame, by virtue of being insubstantial. The main effect here is that red very ugly things can now be sticky flamed. But they have rF++, so who cares! -------------------------------------------------------------------------------- 2e47921a08 | Nicholas Feinberg | 2023-11-16 21:47:50 -0800 Remove rVortex (hellmonk) It did nothing. The only thing that had it was twisters, which already have immunity from Polar Vortex by virtue of having 'cast' one themselves. -------------------------------------------------------------------------------- f85fca5ced | Nicholas Feinberg | 2023-11-16 16:32:08 -0800 Move monster attacks up Out of the random garbage zone, up to the exciting fun zone. Spells should go above them. -------------------------------------------------------------------------------- 0ab6d62aba | Nicholas Feinberg | 2023-11-16 16:04:12 -0800 Experiment: simplify shields Previously, shields degraded in effectiveness with each attack they blocked. This helped differentiate SH from EV, but was quite subtle - many players had no idea. To make the mechanics clearer and simpler, replace this effect with a limit on the number of blocks shields can make each turn. Bucklers get two blocks a turn, kites three, towers four, and players with SH but no shield (eg from "reflect or bone mut) get just one. This should hopefully make the different shield types feel a little more distinct, as well. The numbers here are extremely rough and need testing; I wouldn't be surprised if the max blocks all dropped by 1 (except for shieldless), for example. Some other things that might be good follow-ups: - Print a message whenever someone *would* have blocked an attack, but was out of blocks. (Would this be too spammy?) - Make bone plates give an extra max block (perhaps instead of some of the SH?). -------------------------------------------------------------------------------- 66a32c7c6b | Nicholas Feinberg | 2023-11-16 15:19:35 -0800 Simplify abominations The random speed gimmick was not very exciting; most players didn't know it existed, and knowing that the majority of large abominations were slower than normal speed would not improve anyone's game experience. Make small/large abominations a constant 12 and 10 speed, respectively. We can add new gimmicks to them at some point if we get good ideas, but this change shouldn't really have any effects on the status quo. -------------------------------------------------------------------------------- 0361d129ea | Nicholas Feinberg | 2023-11-16 15:15:53 -0800 Display AF_DROWN damage 'Max' is a bit misleading for these values, since the average is higher than half the max, but what can you do. -------------------------------------------------------------------------------- 441186997c | Nicholas Feinberg | 2023-11-16 15:03:36 -0800 Don't claim statues can outpace nagas Nagas are slow, but not that slow. -------------------------------------------------------------------------------- 3dd9dd1025 | Nicholas Feinberg | 2023-11-16 14:51:41 -0800 Tableify monster attacks As we've added more info about monster attacks, their descriptions have gotten increasingly unreadable. One example: They can claw for up to 40 damage; kick (for up to 23 damage) to blink self if any damage is dealt; tentacle-slap (for up to 35 damage) to cause mutations if any damage is dealt; and gore for up to 30 damage (about 58% to hit you). Address this by plopping attack descriptions into a table. This lets us remove the redundancy of "if any damage is dealt" for most cases, and should hopefully be easier to read and sort through generally. One downside is that mons weapon brands are no longer shown at all, which could be pretty misleading. I ran out of space to fit them, but maybe they could be shown somewhere? -------------------------------------------------------------------------------- f29f09145b | Nicholas Feinberg | 2023-11-16 12:04:30 -0800 Move TRJ stats out of attack descriptions TRJ jellies aren't an attack! -------------------------------------------------------------------------------- 7cb12e4e53 | Nicholas Feinberg | 2023-11-16 11:19:25 -0800 Show common monster resists en-bloc Putting together a stat block. -------------------------------------------------------------------------------- 0064d2672a | Nicholas Feinberg | 2023-11-16 10:40:18 -0800 Caveat abomination speed (Lici) Rip. -------------------------------------------------------------------------------- fa0b634519 | Nicholas Feinberg | 2023-11-16 10:29:16 -0800 Caveat sixfirhy/jiangshi speed (Monkooky) Since they're very weird! -------------------------------------------------------------------------------- e72b690d9f | Nicholas Feinberg | 2023-11-16 10:10:09 -0800 Rework monster speed descriptions Speed is one of the most important traits a monster had, but we buried it in a sea of trivia and described it quite vaguely. The old speed adjectives used to work OK, but once we started adding monsters with extremely fast or slow actions (e.g. juggernauts, animated armour), they were quite inadequate. Instead, show: - A speed percentage (eg 150% for 15 speed monsters, 80% for 8-speed mons). This percentage is unaffected by haste, slow, etc - it's just base speed. Higher numbers are better. Hopefully this is intuitive. - More percentages for special action types ("swim: 166%", "attack: 33%"). These percentages are pre-multiplied by base speed (so a juggernaut with 33% attack speed takes about 3.0 dAut per attack), and higher is still better. Hopefully this is intuitive. - An estimate of whether the monster is normally faster or slower than the player, without taking into account buffs/debuffs or terrain for either the player or the monster. There might be some int rounding errors here. -------------------------------------------------------------------------------- 2d28e49fa5 | Nicholas Feinberg | 2023-11-16 09:21:11 -0800 Simplify snapping turtles Previously, they had a slow 'base' speed and a reduced attack delay, exactly cancelling each other out. This was silly. Return their attack delay to normal (slowing their attack by 25%) and increase their attack damage to very roughly compensate. This also means they now work the same way as alligator snapping turtles. Numbers are rough; possibly the damage increase should be higher. If they feel weak after this, we can turn numbers up a little more. -------------------------------------------------------------------------------- 54f1719f28 | Nicholas Feinberg | 2023-11-16 09:17:04 -0800 Remove support for customizing some energy types We had no* monsters with custom action speeds for item use, item pickup (!), or 'special' actions, and I'm skeptical that we'd need to. Remove support for customizing these speeds. *snapping turtles don't count. -------------------------------------------------------------------------------- ee8ca3e5de | Nicholas Feinberg | 2023-11-16 09:03:03 -0800 Remove ACTION_ENERGY Unused since d1872aa6dd455cb2 (2014). -------------------------------------------------------------------------------- 5322dac6a2 | Nicholas Feinberg | 2023-11-15 18:02:04 -0800 Collapse basic monster stats onto one row Part one of a process of hopefully making monster vital info a bit easier to digest at a glance. -------------------------------------------------------------------------------- 454b1f1e0a | Implojin | 2023-11-12 18:12:39 -0600 Add a new Meteoran title (inflori) -------------------------------------------------------------------------------- 5b978dac0e | Nicholas Feinberg | 2023-11-11 13:49:05 -0800 Add an Ooze status description (hypergardens) -------------------------------------------------------------------------------- 858d187a59 | Nicholas Feinberg | 2023-11-11 13:47:29 -0800 Tweak death talisman names To avoid "the talisman of death of Plog", rename artefacts to "death talisman". -------------------------------------------------------------------------------- 77c946d0b9 | gammafunk | 2023-11-11 11:48:42 -0600 fix: Use the correct floor tiles in a vault (PleasingFungus) For lemuel_minitomb, use the appropriate sandstone floor tile under traps. -------------------------------------------------------------------------------- fbdfbacc72 | regret-index | 2023-11-09 20:04:27 -0330 Quick adjustments for several other zig sets Cut the no-longer-used hell knights and demons from Gehenna, Cocytus, and Tartarus zig sets, shove a little more varied threat not emphasized in other sets into Fire floors, and trim down the Swamp set since most of the weaker enemies are gone plus we have Tartarus and Tomb sets now for miasma spam anyway. -------------------------------------------------------------------------------- 5fc2386627 | yrdzrfxndfvh | 2023-11-09 19:40:25 -0330 new ziggurat floor type: vestibule (#3117) similar to the lair roulette, but with hell branch monsters instead [Committer's notes: Don't name it Hell Roulette, since all four hell branches are in each game at this current juncture. Lair roulette refers to a specific selection without Slime and all. Cut out the incomplete selected Vestibule set + derived undead for mostly place:Hell spawns, since it's not meaningfully much different and avoids desynching with only minor hell knight / necromancer additions otherwise. Instead, focus on placing specific monsters from each Hell with zig completion count, to match with the Lair roulette set and so there's another silent spectre floor. Also, futz with the math a fair bit. Closes #3117.] -------------------------------------------------------------------------------- 9676161fe1 | yrdzrfxndfvh | 2023-11-09 18:07:33 -0330 change holy ziggurat floors to include more monsters (#3118) adds sun moths, holy swine & seraphs to holy zig floors holy swine have a decreasing chance to spawn at lower depths & seraphs have an initially very low spawn rate which increases with depth and zigs completed [Committer's note: No holy swine. Plenty of non-branch Zig sets leave out the weakest enemies in their themes, and the current slim vaults using holy swine have at least some gesture of demonic magic, Xom, or Kirke having done something malevolent, while a ziggurat doesn't. Sun moths get half weight; they are technically holy, but they don't really fit much with the other holies, they're pretty harmless for zigs, and also their design needs shifts beyond "conjurer in the non-conjurations branch" and "rarely tell new players ghost moths exist". Pearl dragons no longer try to spawn more often than daevas, since their breath went from 3d36 to 3d18. Seraphs are restricted from the first half of ziggurat floors until one does sufficiently many ziggurats, so that unholy players aren't any further discouraged from single-digit first zig floors in regular 15 rune games. Thanks, c0fddb9. Still will probably ruin a bunch of megaziggers to be surrounded by fire-immune cleansing flame users, but I'm sure they'll adapt. Closes #3118.] -------------------------------------------------------------------------------- 8e65716e6e | yrdzrfxndfvh | 2023-11-08 16:19:40 -0330 orb shop vault (#3141) a rare, sealed off shop vault with (when applicable) orb-like enemies guarding it that appears in the mid-to-late game hopefully this will encourage people to use orbs over shields for once [Committer's note: Appreciated concept. Added a set for Vaults placement. Removed the Spider placement, as we have no other Spider shops currently and only one non-unique monster in the whole branch can even wield orbs. To still get out an orb spider appearance, use such in a new D:13- placement instead. Said D:13-15 placement is also the only one with a runed door, as the middle range of branches don't really warrant it compared to other minivaults- instead, it just gets thicker walls to prevent much spillage. The Depths and Zot placements are nerfed rather than relying on a runed door, though- higher hd shapeshifters are pretty extreme gimmicks out of Abyss / Zot and only very loosely linked to the magical orb theme, and ancient / dread liches are rather heavy to put in a limited-reward Zot vault that also has an orb of fire in it. Not sure how much people will get crystal (ball), fireball, and damnation sphere themes alongside direct orbs, but whatever. Closes #3141.] -------------------------------------------------------------------------------- 770356a28f | regret-index | 2023-11-07 19:18:57 -0330 A quick sweep over wizlab.des Of note: * There's been some voiced interests in keeping more of the extended monsters more exclusive to extended, for both making extended more exciting and special in using such plus keeping some very awkward monsters in their specified context. It'll take a while to assess the each of those, but for now, a quick swap out of the ds warmonger / black sun in wizlab_demon for a hellephant / dread lich should work. * Crunch down the Cigotuvi's deformed header list with some lua, with some different descriptors. Drop the monstrosity's reaching stinger (which would prevent it from approaching to trample and constrict) for a second trampling attack. Give the wizlab the unrand named after the same wizard, for more player temptation. * While monsters not drinking potions gives Eringya's some actual rewards, it could do with a bit more to correspond to both the master archer spam and the actual spells named after Eringya. ENB is now guaranteed, with a big stack of either lignification (bouqet) or poison scrolls (bog), and the random spectral weapons now use Asterion's spectral weapons (broad axe or demon weapons) alongside the quarterstaff or lajatang. * According to their kill statistics: mildly nerf Borg's and Eringya's, mildly buff Hellbinder's and Cigotuvi's, continue to buff Golubria's. -------------------------------------------------------------------------------- d5ff2fe127 | regret-index | 2023-11-07 19:18:57 -0330 Finish fixing up wizlab_zonguldrok (#732) Crunch down on the untidy header, reduce spectral and ghost presence to reduce overlap with wizlab_borg and to mostly fit theme + focus on them appearing via Haunt, put more martial-focused theme loot in the rewards, make graves being replaced by monsters raise some dust and smoke to emphasize the shift more than a sudden swap, visually mark the antique-awakening tiles to be less spoilery, simplify the random monster list instead of trying to be an exact 1-to-1 of possible gravestone spawns, open up some chokepoints on the inside, slightly lower the grave count after these spawn buffs. Alongside the prior commits, closes #732. -------------------------------------------------------------------------------- f599b16ab9 | regret-index | 2023-11-07 19:18:56 -0330 Antique lich -> Antique champion (also no longer just a rename!) Zonguldrok's Wizlab sure features a conjurer boss for something named after a sword. To help it with more mechanical distinction, to help the wizlab not be so far behind in kill statistics, and to actually match the flavour, the antique lich as a jokey rename is instead replaced with another vault-exclusive actual monster in the same fashion as most wizlabs use, one that can actually wield the titular weapon in its own hands. Aside from having a lot more HD, somewhat more HP and EV, plus a little more melee damage than ancient champions, antique champions live up to their name by having a spell currently unused elsewhere that ancients lost in 2016 (Haunt) and an upgrade to another lost in 2021 (Bolt of Draining -> Ghostly Fireball). They retain Haste and also cast Might for even more face smashing, and they spawn in a pair (rather than the current solo ancient lich or the PR's additional plain lich company) to stand out from the singular vault monsters in other Wizlabs. (Why do almost all namesakes presume they're describing individuals and not groups, anyway?) (If the name being confusable is somewhat bad now that it's actually more dangerous, then just renaming these some more is entirely reasonable. Some sort of battlelich style name theming would probably work.) -------------------------------------------------------------------------------- 94548685de | NormalPerson7 | 2023-11-07 19:18:56 -0330 Buff Zonguldrok's Shrine [Committer's note: Zonguldrok's wizlab is indeed underperforming; the gimmick's actual used contents don't match up to the player or dungeon power creep. This squashes a fairly large number of commits together: adding two extra liches to the antique lich fight, bumping the derived undead to midgame and endgame giants / trolls / dragons instead of ogres or plain trolls, and throwing in a lot of random Crypt spawns in place of prior lategame wights and vampires. It's a reasonable effort, but I've got my own rather different work to add on ontop of it, so unlike prior vault pull requests, I'm going to leave my edit out of this and instead put them in following commits.] -------------------------------------------------------------------------------- 9a2f3ffc92 | Nicholas Feinberg | 2023-11-06 21:29:33 -0800 Fix some felid blade paws issues Blade paw tiles don't work well for most of the alt felid tiles, so disable em. -------------------------------------------------------------------------------- 3b49de5836 | Nikolai Lavsky | 2023-11-06 13:13:12 +0300 fix: colour artefact talismans white (SentientSupper) Their names weren't white due to a missing colouring prefix. -------------------------------------------------------------------------------- 04711c9635 | regret-index | 2023-11-05 19:04:13 -0330 Editing pass + extra fleshing-out vaults for serial_library (#2903) Mostly adding to the decorative vault count, to try to get a sufficient variety count for something innately as pressured as another serial vault relying solely on walls / doors / floors rather than any features or monsters. If there was more threat vaults, it'd be reasonable to guarantee one or two rather than rolling up to all four, but whatever. Edits on the prior material: * Clean up a ton of repeat lines by throwing them into a standardized lua function and default-depth line. Also, move author name from the tag to the vaults. * Trim out one of the most generic decoration vaults, the decor tag from several other relatively generic vaults, and downweigh the appearance of these outside of the library vault. Some caution should be exercised to prevent spreading out a decorative tile from being too common, and a bunch of the tiniest ones here are quite plain outside of a full serial vault level theme. * Tried to make several of these pieces less boxy. * Updated the few enemy vaults in multiple ways: use a specific enemy set for D:4-7 instead of spawning out-of-depths much more dangerous than the later themed caster spawns, update for the wizard split, and nerf some of the branch placements (a box with 2-10 Elf:3 elves, walking tomes, or nagaraja and tyrants is a bit much at the top end). * Expanded the branch placement from D / Depths / Snake / Elf to also include Vaults (as individual rooms, not the serial vault) and Crypt. Both of those branches could also use some added variety. Closes #2903. -------------------------------------------------------------------------------- b08921ce47 | hellmonk | 2023-11-05 18:58:34 -0330 feat: Another library vault -------------------------------------------------------------------------------- c0b921035c | hellmonk | 2023-11-05 18:58:34 -0330 feat: Serial library vaults Add a new serial vault type that places a large number of vaults that use the wall_studio tile set. Most vaults are small and relatively simple, but a few large vaults that place thematic monsters and/or book loot are included. The vaults can place in D, Snake, Elf, and Depths at 0.5% chance. -------------------------------------------------------------------------------- 676ae46b74 | hellmonk | 2023-11-05 18:58:34 -0330 feat: Small library arrival vault -------------------------------------------------------------------------------- c0ee4c512b | hellmonk | 2023-11-05 18:58:34 -0330 feat: Two library overflows -------------------------------------------------------------------------------- 60c323e8ed | hellmonk | 2023-11-05 18:58:34 -0330 feat: Library ghost vault -------------------------------------------------------------------------------- aa2abb9e42 | Nicholas Feinberg | 2023-11-05 08:06:05 -0800 Fix some monspeak keys (rypofalem) -------------------------------------------------------------------------------- 08d55dae12 | Implojin | 2023-11-03 15:25:50 -0500 Fix spelling (Ge0ff) -------------------------------------------------------------------------------- 3233f18187 | Implojin | 2023-11-03 10:06:07 -0500 fix: Antique shop talisman ID (particleface, Ge0ff) Talismans purchased from antique shops were previously not having their id flags set, causing them to be valid targets for ?identify. More broadly, item identification flag handling continues to be a mess, and some further refactoring is probably in order here, but this commit fixes the immediate bug, at least. -------------------------------------------------------------------------------- 5e6e4ef867 | Nicholas Feinberg | 2023-11-02 21:10:23 -0700 Fix another Trog pain bug (Implojin) No idea what I was thinking with 9c3d1c461af. -------------------------------------------------------------------------------- 1d0c90dd83 | Nicholas Feinberg | 2023-11-02 21:02:09 -0700 Fix pain ego with Trog (Implojin) Don't block monsters from using pain ego if the player worships Trog (broken in 9c3d1c461af). Do block monsters which worship Trog from using pain ego. Goodbug. -------------------------------------------------------------------------------- bfb7dba898 | Implojin | 2023-11-02 17:05:59 -0500 fix: Don't randomize UC damage description (confidence interval) Previously, the displayed UC base damage with @ was being randomly rounded whenever the player pressed the key. -------------------------------------------------------------------------------- 7b6862f502 | Nicholas Feinberg | 2023-11-01 22:19:43 -0700 Swap evilness of "Macabre and "Vitality The amulet of Vitality was made evil so that we'd have more evil unrands. This has persistently confused players, since the theme doesn't scream 'evil' (even with the lovely new lore!). Try moving the evil onto the macabre finger necklace instead, which *does* seem rather unwholesome. -------------------------------------------------------------------------------- 1816016f30 | regret-index | 2023-11-01 19:31:57 -0230 Fit some more vaults from Depths / late D into Vaults, more .des clean-up The ironic thing about the Vaults layout set all the way back in 0.12 is that the variety of large theme vaults themselves were somewhat lost in exchange for the small vault focus instead. With a relatively coherent and specific monster set at this point, it doesn't take too much to fit more into such requirements. A few late D vaults are now also scaled to fit in V, while a couple of unexciting Depths vaults with flavour and enemy choices more suiting for V have been moved to V instead. (The old TSO-talks-to-you-directly angel vaults in particular might be somewhat screwed up by ironbound convokers, but that sure also applies to the contents of ghost vaults, so for most character it's probably fine; if one isn't unholy, then martial-master deep elves and cacodemons are already far more vexing to have suddenly drop in anyway. It also very slightly adds to the overlap of Depths and Vaults here, but angels and daevas aren't individually much threatening by Depths, so a somewhat earlier placement should help them out.) (Also, while I'm here, continue to adjust a bunch more headers in terms of house style, proper organization placement, and rotating for line-saving.) -------------------------------------------------------------------------------- eadf994542 | regret-index | 2023-10-30 18:22:34 -0230 Quick swamp.des adjustments Mostly house style imposing + some particularly weird enemy set adjusting. Most worthy of note: * Put a single @ in each of the super-common deep water pools, so they finally stop randomly being completely closed off from the level. Closes #3171. Doesn't close 3055 due to the Orc example there. * Properly put the extra tag on most of the decor vaults and move some of them to the right section. Means even more decoration in the most decorated branch, but it's probably fine. * Replace the vampire knights in byrel_swamp_growth_death_and_undeath with ghouls. Yes, it's a Yred vault in a branch with paralysis monsters and undead. The vault's also a major outlier as the most lethal Swamp end by a noticeable margin (alongside the pentagram end) and armoured aristocratic knights are flavour-wise rather out of place for this wild bog compared to the ghouls currently directly in the branch spawn list (and also on the Yred spawn list, of course). Buffs for the distant weaker list to balance out this absurd positioning, when weighted, the two newest swamp ends having 36% of kills together and two of the earlier swamp ends having 7% together is impending. * (Speaking of which, until I'm done replacing it entirely, shove some will-o-the-wisps into the fiery swamp end and toss out the harmless steam dragons for a bunch more lindwurms.) -------------------------------------------------------------------------------- 988fe4f06c | yrdzrfxndfvh | 2023-10-30 16:22:10 -0230 Two small Swamp vaults (#3330) [Committer's notes: Put some hard caps on the body / husk count in the former vault, put deep water in some of the chokepoints, and put more equipment on the witch. Removed the latter vault from the Swamp ruins constant level placement, instead making it place a random other decorative vault from that batch. Decorated it a bit more, and also increased the earth loot variety in such, since half of all games don't actually have the tin of tremorstones to find and it's good to keep sneaking in more flavourful talisman vault rewards. Also renamed it to something even slightly parseable for an archeological dig, unless there's a sixth song named "mirage" with actually relevant lyrics I couldn't find. Closes #3330.] -------------------------------------------------------------------------------- f127b1a779 | regret-index | 2023-10-30 15:46:18 -0230 Show equipment on more monsters + adjust base DS monster tile * Fenstrider witches have been able to pick up weapons for a long while without actually showing it on the tile; since they're currently already wearing robes, might as well show gear if they find anything else. * Show weapon + shield on base demonspawn monsters and those vault-decoration-only armataur / meteoran monsters. The former matters for the one Orc end still, the latter doesn't but we're still doing it for most of the other species dummy monsters like formicids and octopodes and tengu. * Swap the plain demonspawn tile with the old monstrous demonspawn tile- the current one doesn't have claws or horns as the crunching down of the base types into one monster gave them, which leads to occasional underestimating of their melee in the current Orc end placement. -------------------------------------------------------------------------------- 1e143483b6 | Skrybe | 2023-10-29 17:12:50 -0230 Xom-themed vaults (#2616) [The first:] Inspired by the Xom worshiping daevas that can generate in the Abyss. Contains daevas that call on Xom to smite the player, dancing holy weapons, and chaos effects through apocalypse crabs and chaos weapons wielded by the angels and daevas. Some angels that bored Xom have been turned to holy swine. [The other:] Undead Xom worshipers have built a deep shrine (or maybe they just took over a temple to Yred/Kiku?). Some of the followers are wielding chaos weapons, a few dancing draining weapons are wielding themselves, and cacodemons will provide plenty of opportunity for hilarious mutations. The temple is led by mummified Xom priests in the back. [Committer's note: Cleaned up both headers heavily. Minorly nerfed the Abyss vault. Converted the Crypt end into a regular D + Depths vault and heavily lowered its derived undead / skeletal warrior spam, leaning more on regular D + Depths chaos + demons (and some MuCks), and with a touch of Xom's standard messy decor. Even when taking out the wide number of demons harmless by depth, I'm ruling out cacodemons and chaos brand being a noticeable part of the broad and notably focused Crypt end sets. D and Depths have chaotic / demonic monsters and undead themes plenty to cover for the union, and we could do a lot more with juxtaposition in bigger vault themes anyway.] -------------------------------------------------------------------------------- c230f8ef24 | Nicholas Feinberg | 2023-10-28 14:11:52 -0700 Ban a grate warden play (Midn8) Don't let vault wardens seal doors/stairs through grates. Too easy for it to lead to a soft-lock. -------------------------------------------------------------------------------- 643d43726f | Nicholas Feinberg | 2023-10-28 14:00:59 -0700 Unban felid claw muts (Lici) This restriction was, as far as I can tell, totally arbitrary and unneeded. It's been in there since felids were first added and I'm not sure anyone has really thought very hard about it since. Partially reverts d4ad7b454ee (2010). -------------------------------------------------------------------------------- 5d48084ff3 | advil | 2023-10-28 14:19:43 -0400 fix: levelgen freeze with zin + randart talisman `@god_name@` in a randart talisman name would trigger a check as to whether the randomly chosen god likes the artefact. There was an accidental dependency in this code path on you.religion specifically for god_despises_artefact, so the wrong god would be checked for this case, and in particular a zin character would cause levelgen to run in a tight loop while trying to generate a talisman. (Possibly the relevant code in `replace_name_parts` should have an escape clause of some kind?) -------------------------------------------------------------------------------- 2a3aa404fa | advil | 2023-10-28 11:19:57 -0400 feat: a webtiles lobby idle timer Over time a running webtiles server tends to accumulate lobby connections where a browser window is still open to the lobby after someone has saved; CAO runs at about 40-50 at any given time (a big proportion of the total sockets), and I tend to think the vast majority of these aren't real. This commit adds a basic idle timer running in the lobby that is configurable (and disableable) by the server admin. At the end of the timer, the connection is closed. Any action in the lobby restarts it, but there aren't many actions that can be taken. The default is enabled with a fairly long (3hr) timeout. TBD: does this break beem without further special casing? -------------------------------------------------------------------------------- 6ef4313e94 | advil | 2023-10-28 11:19:57 -0400 refactor: improve webtiles socket/process cleanup The target of this is a bit theoretical: there's some kind of leak-like behavior happening over time where sockets that correspond to closed connections don't get removed from the socket list, if `process` fails to be cleaned up. I can't really figure out why the latter is happening, but I can see it on CAO. This commit should ensure that non-running closed connections get handled correctly, via a single cleaner code path. It also logs the case where there's a stale instance of `self.process` on socket close. This bug was somewhat obscured by a logging bug, fixed in the previous commit. -------------------------------------------------------------------------------- f86a31d22a | advil | 2023-10-28 11:19:45 -0400 fix: don't report stopped webtiles processes as idle -------------------------------------------------------------------------------- 75a2e9a4b4 | Implojin | 2023-10-27 14:40:06 -0500 fix: Victory nearby monster checks Prior to this commit, Victory's nearby monster checks occurred after using consumables. This unintentionally allowed reading ?blink and ?fog without resetting Victory's bonuses, if the character's line of sight became empty afterward. Victory now checks for nearby mons before using consumables; reading ?blink with hostiles in LOS should now reset Victory's stats. -------------------------------------------------------------------------------- d09d022031 | regret-index | 2023-10-27 16:05:43 -0230 Clean-up, revise, buff wizlab_golubria This messy slice of Abyss has the worst direct kill rate of its peers, and also is pretty boring compared to an Abyss trip after teleporters became far more standard fair to see throughout the rest of the Dungeon. This also needs some more revisions thrown its way. * Spatial vortices, blink frogs, and dispersal + distortion mages are now replaced and downplayed correspondingly for some Spider enemies instead. Plays off of themes of both ghost moths as interdimensional and also Spider:$'s spider silk aux armour for Shrouds of Golubria; gives an identity to contrast with"micro-Abyss"; removes the annoyance of vortex handling. * Enemy set cuts out early Abyss spawns due to being irrelevant for Wizlab depth, shifts a fair number of middle-tier enemies into earlier tiers, and has some commented closer to parseable weights for its enemy list. * The center chamber no longer places the teleporter-in spot in nearly so easily away from the eldritch tentacle, adds another eldritch tentacle to the random spawning to try and make more spots open to tentacles, and adds two of the higher tier enemies to the spot to add more variable variety than just an obsidian statue and its tentacles. * Randomization finally commented. Still immense. * Outer circle made slightly less open so there's less autoexplore time wasted trying to explore all of the open space outside the relevant chambers. -------------------------------------------------------------------------------- 306229cb8d | regret-index | 2023-10-27 14:48:04 -0230 Brief vault review of some slice of mini_monsters.des and float.des Header cleaning, vaguely shoving things towards one house style, fair ways more appropriate depth scaling for vaults with broad ranges, some proper branch fitting. A couple of severe kill statistic deviations also targetted. Will do more of this review in the future. Notes: * Some orc minivaults have been moved from Depths to Vaults, since Vaults still has orcs as regular spawns and Depths doesn't. The endless toil to divide those two continues. * nicolae_hydra_factorization places the 27 one-headed hydras in its sequence as dead skeletons, not as monsters. Since one-headed hydras die instantly when beheaded, the first section otherwise hands out about as much XP as Lair:$ with little threat, which is far from ideal. * hangedman_aerie_drop hasn't properly distributed its enemies before the runed door is opened since 826ad36 made traps not worked behind glass. As a salvaging of the vault, it focuses on an unavoidable dispersal trap- still awkward, but at least it still has any functional gimmick now. * There's a long list of enemies that shouldn't bleed out of their branches even if it's otherwise hypothetically thematic, and doom hounds without Grunn near the top of that list, so they were dropped from a vault. Some proper review will target a lot of these things eventually- other stuff will probably include iron golems and creeping infernos. * I would have gone after more vaults with D:2 scorpions or D:5 unseen horrors, but that list is several dozen vaults long. Maybe there should be more caps on D out-of-depth placement for the extremely early material, maybe I should just hit only one of those ranges a little. * There's a lot of ORIENT: float vaults that are pretty small and empty. I'm not exactly sure why quite a few of said vaults aren't minivaults, except to make Depths:2 and 3 to roll not getting a notable vault. This deserves more deliberate and length review in the future (and / or debate over if those floors should roll guaranteed minivaults instead), but for now, I'm trimming a handful of them out from Depths. -------------------------------------------------------------------------------- 24f9ace8b5 | advil | 2023-10-26 08:39:53 -0400 fix: add a bounds check in webtiles menu code Resolves mantis bug 12718 -------------------------------------------------------------------------------- 7f5505f354 | MainiacJoe | 2023-10-26 04:13:36 -0230 Two Swamp entries (#3240) [Committer's note: Thickened walls in the former vault to reduce the chance noise makes them wander out of the vault, and removed bunyips while mildly downgrading some of the threat in case they wake up anyway. Reduced spriggan druid count and removed dryads + teleport closets from the latter vault. (Monsters that don't exist outside of spells are not currently accepted vault contents. We had cut out druids from Lair many years ago, but they're relatively weak in Swamp these days?...) Also, cleaned up both headers. Closes #3240.] -------------------------------------------------------------------------------- e1948c8a92 | hellmonk | 2023-10-26 02:57:53 -0230 feat:Talisman vault (#3211) Small vault that places a talisman and corresponding monsters/scenery. [Committer's note: Limited the sets per branch in terms of threat level and branch theme, so there's no autoexploring into a Lair dancing weapon or a Mines air elemental + raiju band. Cleaned up the header, added more of a border, a door, and the patrolling tag so they wander away a lot less from the vault theming, since most of these are pretty out-of-depth. Made threat monsters not sit on top of the talisman so one doesn't miss the reason to bother with the vault. Give each of them a small chance of being a randart. Closes #3211.] -------------------------------------------------------------------------------- 8a8ce12e04 | Kyle Rawlins | 2023-10-25 17:39:51 -0400 fix: various issues with webtiles use item mode cycle Toggling modes in this menu in webtiles was incredibly buggy, because menu info was not fully updated (headers could become hoverable, tiles stuck around, etc). This commit fixes every issue that I was able to find. -------------------------------------------------------------------------------- 7ea235fadd | Nicholas Feinberg | 2023-10-25 07:39:12 -0700 Tone down talisman prices (Lici) These values were a bit too high. -------------------------------------------------------------------------------- a325b2283a | Nicholas Feinberg | 2023-10-23 08:15:58 -0700 Fix the build..? -------------------------------------------------------------------------------- 9b7d53a0bd | Nicholas Feinberg | 2023-10-23 08:11:05 -0700 Fix a randart talisman gen bug -------------------------------------------------------------------------------- b7fda78df9 | Nicholas Feinberg | 2023-10-23 07:51:04 -0700 Add prices for randart talismans & staves -------------------------------------------------------------------------------- 0fca184906 | gammafunk | 2023-10-21 23:19:03 -0500 feat: Add evokable item damage to clua This added an evoke_damage string field giving the damage dice display seen when examining the item in the UI. This works for wands and XP evokers that deal direct damage. -------------------------------------------------------------------------------- a24f6d603d | gammafunk | 2023-10-21 23:19:03 -0500 feat: Add damage and noise to evoker descriptions For the XP evokers that do direct damage and have casting or effect noises, namely the Tin of Tremorstones, Phial of Floods, and Lightning Rod, show the current damage die and noise values in the item descriptions, like we already do for wands. The Lightning Rod damage situation is a bit complicated due to arc length decreasing the damage, but we mention this now in the main description text. -------------------------------------------------------------------------------- 4004991382 | Nicholas Feinberg | 2023-10-21 20:40:29 -0700 Add randart talismans This has been planned from the start of talismans. Should add some occasional spice to talismans - more excitement when you find a strong one, tough decisions when you find an earlier form with good randart props or a later one with bad props, etc. -------------------------------------------------------------------------------- f2c640e547 | Nicholas Feinberg | 2023-10-21 20:40:29 -0700 Save active talisman For later. -------------------------------------------------------------------------------- 43d22bd090 | MainiacJoe | 2023-10-21 21:23:55 -0230 A Shoals entry and an Orc decorative vault (#3230) * Four pools, three merfolk or a tougher monster, one per pool. * A kraken in a very tiny pool in an oval room. [Committer's notes: Heavy header clean-up. The first of these has been altered for far less plants to let autoexplore actually find the Shoals entry, and swaps out a blind autoexploring into a sea snake in Lair for a manticore instead. The plants might hypothetically provide some warning, but if other monsters roar right beside the walls the vault monsters are likely to tear right through the plants. The second of these was a kraken Shoals entrance, blocked off by plants. There's something to be said for how kraken don't really feel much intimidating any more these days, but there's too much that's awkward with the use of such in Lair: it's not actually super plausible for a Lair character to deal enough damage at full range to get the free XP, but it's both tempting and very tedious to try, plus one can actually just get mangled doing it. For want of another obvious use for it, the vault's name vaguely points it at putting it in some mines instead, as one of a million glass vaults; they didn't kill it and neither should you. Could use another vault PR to go guarantee Orc:1 decor, maybe?... Closes #3230.] -------------------------------------------------------------------------------- cb8bc90ed4 | Nicholas Feinberg | 2023-10-21 14:48:15 -0700 Describe forms in the A-menu Yet more prep for randart forms. -------------------------------------------------------------------------------- 7b14ca2962 | Implojin | 2023-10-21 15:53:36 -0500 fix: Save compat for vitrifying gaze In saved games that upgraded across 492612b1e5, floating eyes silently kept their paralysis gaze after becoming glass eyes, and lost the need to charge to activate the effect, giving those bugged glass eyes the ability to spam paralyse. This commit hopefully fixes any remaining affected saves, by upgrading those mons to gain vitrifying gaze. -------------------------------------------------------------------------------- eb88551f38 | Implojin | 2023-10-21 03:18:25 -0500 fix: webtiles EV colour while Fragile After cd2b144e7b this string became able to match both "fragile" and "agile" statuses, erroneously colouring EV lightblue in webtiles while fragile. -------------------------------------------------------------------------------- fa384e33e1 | gammafunk | 2023-10-21 01:09:01 -0500 feat: Evokable accuracy info for clua Add a target_evoke() method to the monster info table. Like the corresponding target_weapon(), target_spell(), et al. methods, target_evoke() gives the accuracy string seen in the UI when targeting the given monster with the given evokable. It expects an item obtained from the clua items library as an argument, and only returns a non-empty value for wands or the Phial of Floods. The other evokables either always hit or otherwise don't have a meaningful notion of accuracy. -------------------------------------------------------------------------------- fe29db990f | gammafunk | 2023-10-21 01:09:01 -0500 feat: Show the hit chance for the Phial of Floods The Phial didn't show its hit chance in the targeting UI due to the unique setup it has. Ideally it would use your_spells() for most of its setup, like wands and the Lightning Rod do. Other than using a custom range that differs from the default range of the Primal Wave spell, I'm not sure if there are reasons why it can't use your_spells(), so I'm just modifying the existing approach for now. -------------------------------------------------------------------------------- 24c8ebf480 | gammafunk | 2023-10-21 01:09:01 -0500 feat: Add weapon damage ratings to clua The new damage_rating() function in the item metatable gives both the rating as a number and the full damage rating string as return values. An input argument added to the crawl-side damage_rating() function allows us to get the first value. This might be doable in a cleaner way, but this approach was simplest given how the calculation is structured. -------------------------------------------------------------------------------- 57150269e1 | Nicholas Feinberg | 2023-10-20 23:00:07 -0700 Make glass shatter Unlike e.g. stone giants, glass eyes are being described as being made of glass. As such, they should be vulnerable to LRD and Shatter. -------------------------------------------------------------------------------- f5be29c462 | regret-index | 2023-10-20 17:10:36 -0230 Put Zot decorative vaults on 33% of Zot floors. Zot's supposed to be dramatically weird, both in its flavour and as the last branch in a normal game. This is somewhat addressed by its wacky spawn list having been buffed over time, but can't really be that easily conveyed otherwise in normal Crawl modes- notable terrain features only work for otherwise constantly-fleeing normal speed characters when they're constantly unavoidably present (c.f. water), and balance-wise we shouldn't make every floor throw around lengthy stair and ambush-vaults and force players and characters to frequently nearly full-clear Zot. So, an alternative sprucing up notion. This uses the freshly 54 Zot-only decoration-only vaults to place a fair ways more often than they'd normally would otherwise, like how D:14-15 and Depths frequently place their own decorative vaults. Most of them rely on weird level-intersecting negative space tricks or echoing all the rune vaults one finds those keys to Zot. It's not much, but it's more interesting than the current paradigm, anyway. If there's mild concern, luniq_ tags could be made uniq_ instead... (For speedrunners and divers, it's worth noting a fair number of these vaults roll a 1/4 or 1/5 chance for one stair, so there's not too much pressure to memorize the vaults for if they'll have stairs or not under such circumstances compared to anywhere else on the floor.) -------------------------------------------------------------------------------- 59900296c7 | regret-index | 2023-10-20 17:10:17 -0230 Update the older decorative Zot vaults. * Add the new luniq_zotdec_(large/negative_space/liquid) tags as corresponds to the each of them, so they work better with the new set using such. * Remove a teleport island, even if it's unlikely anyone gets stuck by Zot. * Add a quick tiny amount of variation to some previously static curves. * Interplay of stone, metal, and crystal walls is pretty overdone at this point in all the other decor vaults already, since Crawl is so restrained on decoration options outside of fancy tilework. As such, several of the vaults relying much on that get more negative space tricks instead. -------------------------------------------------------------------------------- 76384004bd | regret-index | 2023-10-20 17:10:13 -0230 Large batch of Zot decor vaults. Something like forty of them, joining the prior fourteen for a round 27 X 2. Several different focuses: negative space (by letting regular levelgen fill in or weirdly connect splits), st_stairs_# (as a minivault series seen throughout the game but also higher chance), rune vaults (since they're containing the keys to this realm in the first place), and some of the layouts available for Zot (like layout_onion/_interference). The rune vaults miniatures use a tiny amount of wall-facing coloured glass, since that's been established by a variety of other Zot vaults by this point. Most have only a small chance for a stair. There's some self-explanatory luniq_ tags preventing floors from becoming too consumed by all this: * luniq_zotdec_rune * luniq_zotdec_liquid * luniq_zotdec_large * luniq_zotdec_negative_space If the rune vault gimmick turns out to be a bit too much (so many rune branches involve liquids, after all), then they should be set to scale versus depth: Lair roulette for Z:1-2, V / Abyss / Slime for Z:2-3, and extended for Z:3-4. There's not nearly as much liquid focus in the non-rune-vault-mock-up other decor vaults. Intended for a follow-up commit that standardizes additional decorative vault placement for Zot, like how the bottom of D and Depths both work. Still usable even if that doesn't happen, of course. -------------------------------------------------------------------------------- d0bd89e52a | regret-index | 2023-10-20 17:02:44 -0230 Further adjust arcanist vs occultist spell sets, power, placement Arcanists being hasted paralyzing Lightning Bolt spammers was a bit much for the prior pre-Lair out-of-depth / late D regular spawn, but Freezing Cloud is next to harmless because it won't even fire on itself like the ones with the old spellsets do, but still easily die to it anyway with the right layout. Meanwhile, occultists spawning in Depths is still mostly harmless beyond the necessary state of diluting other spawns, due to their relatively low spellpower by that point; overall, the Fireball + Banish spellset has significant issues with being much more successful at banishing the player (to a harmless Abyss:2) than actually directly threatening to kill them. Yet some more shuffling around is somewhat warranted. The new spellsets are: * Arcanist: Bolt of Cold, Vitrify, Haste, Blink * Occultist: Fireball, Banish, Invisibility, Force Lance The latter also gets more HD and slightly more health. To acknowledge their more consistent blasting threat (alongside the higher banish chance), they've been shoved down another regular level of D, and vaults placing both earlier interchangeably now place occultists slightly deeper- mostly post-Lair. Vaults not focused on high variety also more consistently place occultists over arcanists in Depths, as was clearly intended. Erolcha doesn't need this buff, so her spellset's finally been split off from occultists for now. Though, maybe she could swap Invis for Vitrify to sit between the two? Probably not. (...there's still kind of a big awkward component here where banishment from a weak monster isn't going to do much by Depths anyway, but the V placement is a lot more frequent than the Depths placement and the point was to reduce an increased rate in banishment. Not really sure there's an easy answer to this outside of much further revisions instead, with, like abyssal knights or a completely different spawn for Depths instead. At least with the HD bump, they'll be sending people to Abyss:3 instead of Abyss:2?) -------------------------------------------------------------------------------- 9b124e0958 | regret-index | 2023-10-20 16:51:10 -0230 Great orbs of eyes: Para -> Vitrify, Drain Magic -> Polymorph, +1 HD Great orbs of eyes are some of the stranger designs around, in being both a combination of many other eyes yet weaker than most of them for it between needing line of fire and not focusing on applying the one hex. In their earliest appearances as late D generic slightly-out-of-depth spawns they're only noticeable when one doesn't bother to swap in Willpower or is is doing incredibly badly by the time they see them, and are rather sad when they then appear a whiles later in V, Slime, and a bunch of Depths vaults. Since other eyes themselves have changed a fair bit, these amalgamates can also change to both match up a bit better and to be both more memorable. Another hitdice (12 -> 13) helps with them landing any hexes at all later on. Vitrify matches the floating eye change, while Polymorph somewhat matches shining eyes in comparison to Drain Magic no longer mirroring the removed eyes of draining. (It's admittedly less unique to take badforms away from being mostly a Psyche and Kirke special, but the former still has Chain of Chaos + chaos or disto brand, the latter still has Monstrous Meneagerie, and both spawn much earlier than these do.) The unaltered presence of Confusion and Mindblast somewhat help focus it on weakening the player one way or another before just blasting and meleeing compared to other eyes, so it gets to be noticeably weird and somewhat mean. (Only minimal vault adjustment; they're not in the normal D spawn range, and without a teleporter or runed door they don't spawn earlier than one Lair branch vault or Vaults, which have a lot worse.) -------------------------------------------------------------------------------- 492612b1e5 | regret-index | 2023-10-20 16:51:10 -0230 Floating eyes -> Glass eyes (elliptic) Floating eyes are pretty cool conceptually, by being one of the most exaggerated versions of a support monster, doing zero damage themselves but irresistably paralyzing for accompanying monsters to take advantage of. They're also pretty awkward in practice, being late and rare and frail enough to usually just zap nearly immediately with bolt / blast wands. Of course, if one either can't do such or doesn't notice them alongside other monsters, then they rather directly completely destroy specific character builds when alongside other monsters. This rather binary state deserves some adjustment, which comes alongside some new flavour to make sure people notice the difference. The new Fragile status (take 30% more damage) is plenty meaningful enough to help with any other company, but allows enough counterplay in comparison to Paralysis that the monster itself can be stronger. Turning these floating eyes to glass eyes ironically comes with slightly over twice the health (close to Depths spriggans) and non-zero EV. (They're not brittle for the sake of LRD currently, but people can argue over all of this flavour seperately of the mechanical work.) Also, their Vitrifying Gaze doesn't need to charge up like Paralyzing Gaze does: instead, they rack up the duration 6-10 turns each cast up to a cap of 50 turns. This means one has to dedicate a bit more effort towards them to actually prevent or reduce the effect and regularly may have to suffer through it, but one also can actually strategize around being much more effectively frail. At the very least, a very roughly similiar concept seems to work fine with flayed ghosts, so it should reasonably work out here too. For both testing purposes and variety purposes, they're set to appear a tiny bit more in Depths and substantially more often in Slime, the latter cutting a little into the relatively weak great orbs of eyes. (They're already always set to spawn with another non-banding enemy, so it shouldn't affect other normal spawns too much.) The Paralyzing Gaze monster spell also hasn't been cut here, in case any of this is reverted, though it'll need some work to be properly irresistable again (though maybe any future use shouldn't skip willpower anyway, considering the prior design problems). (Placeholder tile adjustment of the old tile for now.) -------------------------------------------------------------------------------- cd2b144e7b | regret-index | 2023-10-20 16:51:10 -0230 New monster hex - Vitrify (take 30% more damage!) Aside from the slow propagation of Barbs and Will/2, new statuses haven't really been spread around on monsters too often. There's a large pool of old monsters exchanging back and forth a variety of straightforward conjurations and hexes while newer monsters sit on weird one-offs that are risky to spread much further due to their given distinguishing complexity. Surely something new could help freshen up such a pool and allow another high-threat effect. This new Vitrify hex applying the Fragile debuff has the same effect as the downside of two stacks of Harm without the upside: if you take any damage, you'll take 30% more. This is obviously quite bad, but in comparison to paralysis, which this is meant to mildly lower the presence of, one still keeps EV and SH to avoid damage with. Also, instead of rolling 2-4 turns of monster behaviour to randomly fail to / ruin you with with little recourse, one has 10-25 turns to use any number of defensive consumables, spells, and actions to shield one's self with until it wears off. Currently, like Strip Willpower, monsters won't cast it again if you already have the debuff, so they can focus on hitting you instead. (There's been some wondering if lowering current + max HP would be more transparent about its exact effects in comparison to the innate fuzziness and spikes inherent to screwing with damage in a game with such complicated defense calculations; c.f. the time gap between 762e91d and 141e18f. I'm not much of a fan of this alternative; aside from stepping on the toes of the rather widespread flayed ghost, I'd argue that for many players the actual value of one's own max HP numbers is pretty fuzzy in how most people don't remember the exacts of vast network of incoming damage numbers anyway. Still, it's worth noting for future work if this state of Vitrify doesn't work out.) (Balancing numbers, word and phrasing choices, and uses of this, are all openly subject to change in the future. At the very least, it's been nine years since the Vitrification card was around and seven since Xom did the same effect, so it's unlikely for too much confusion on that front, and while Fragile is also an equipment modifier word, I'm sure most people would agree unequipping your self is lethal. This has also been implemented as a status for monsters, for charming or summoning purposes. It's rather boring to directly put much of in player hands, but it might be reasonable to toss into Xom's list or shuffle around some Nemelex cards to fit in over Degeneration's awkward placement in the destruction deck.) -------------------------------------------------------------------------------- 762e91d90a | regret-index | 2023-10-20 15:35:23 -0230 Fix Harm not dealing more damage to players & extra multiplying poison 141e18f has two seperate bugs. Using *= operators in ouch.cc's _apply_extra_harm, due to the order of operations, results in it rounding back down to the neutral 100%, as can be witnessed rather directly with Torment but presumably was otherwise attributed to defenses and damage roll fuzzing otherwise. Also, when poisoned, Harm seems to use the poison value rather than the given Harm stacks on the player / monster. This results in fun multiplicative issues from sufficiently higher hits of poison- redbacks can inflict 200 poison damage in one hit, for example. This fixes both. Time for more re-evaluations of Harm again... -------------------------------------------------------------------------------- daa99269f9 | Implojin | 2023-10-19 21:33:19 -0500 lint: unbrace -------------------------------------------------------------------------------- 9ea0feecda | Implojin | 2023-10-19 21:12:11 -0500 Remove some commented-out tentacle code Presumably some of this has been useful for debugging in the past, but most of it hasn't been touched in >9 years and there's no need for us to retain a bunch of dead code here. -------------------------------------------------------------------------------- 4ff0be5013 | Kate | 2023-10-20 01:21:31 +0100 Fix staff of air description As with the other elemental evoker staves, it ignores AC, so make sure this is documented in the item description. -------------------------------------------------------------------------------- e801674230 | Kate | 2023-10-20 01:21:26 +0100 Apply half AC to Static Discharge damage Instead of ignoring AC entirely, for consistency with other spells dealing BEAM_ELECTRICITY damage. Increase base damage slightly to compensate (although this may not be necessary, since most early monsters won't have enough AC for it to make a difference, and as an L2 spell it should fall off past the early game). -------------------------------------------------------------------------------- b096ee56cb | Kate | 2023-10-20 01:20:21 +0100 Simplify Static Discharge damage calculations For mysterious reasons, Static Discharge had 3 different damage calculations - one for hitting monsters, one for the hitting the player, and one for when the spell caused self-damage to the caster. However, the self- damage calculation was always overwritten by the player-specific calculation so only applied to monster self-damage. Simplify the spell to always use the same damage calculation, which is halved when hitting the caster. In practice this should be mostly indistinguishable - the player will now take noticeably more damage from hostile Static Discharge casters, but there aren't any of these outside of player ghosts. -------------------------------------------------------------------------------- 3617cccc65 | regret-index | 2023-10-19 21:33:52 -0230 Adjust decorative gimmicks for a pair of arrival vaults (#2493) shiori_arrival_elements seems to only generate a single cloud per billowing for three of the sections, currently. The fog_machine code for the vault hasn't been adjusted as far back as 58b486a's cleanup of the header, so it's presumably some accidental quirk of limiting fog_machine cloud spread when not visible or connected to the player. Since the dangerous clouds are all behind stone glass, it should be fine to let them billow a little harder with some higher other parameters and using still-functional spread_rate values. amcnicky_arrival_blooded_trapdoor was adjusted in 91da126 to actually place some blood, but does't guarantee any, so I opted for a little more guaranteed blood splatter. That commit also referred to the wrong github issue, since said issue accidentally listed a different issue number for another game, alas. Closes #2493. -------------------------------------------------------------------------------- f4fcaacff8 | MainiacJoe | 2023-10-19 19:28:55 -0230 Two Sewer entry vaults (#3236) These are maze entries with either 5-6 normal sewer entry monsters or a single iguana. [Committer's note: Cleaned up headers, put the iguana chance a little deeper- D:3 is a floor early for iguanas. Closes #3236.] -------------------------------------------------------------------------------- 6adbb78044 | RypoFalem | 2023-10-19 21:59:16 +0100 fix: implement a correction for imp-liments lich -> death form. Imps can compliment the player again. -------------------------------------------------------------------------------- 8b917bc6d4 | Nicholas Feinberg | 2023-10-19 13:11:36 -0700 Remove weapon enchantments RIP Freezing Brand, Warp Weapon, et al. (Just moving files around.) -------------------------------------------------------------------------------- 7b59d4eb97 | DracoOmega | 2023-10-18 18:34:05 -0230 Make monster low-hp casting stop ignoring fear (and other things) When a monster is at less than 1/3 hp, it has a flat 1 in 8 chance to cast a random spell it knows (in addition to its normal spellcasting chance). But this extra cast chance ignored monsters being afraid (ie: they would cast offensive magic just fine) and also range flags on spells (so spark wasps at low hp could use blinkbolt from melee range, which they are normally forbidden from doing). This commit enforces the same checks on low-hp casting that normal casting has. (Really, it would probably be good to fold all this code together a little more cleanly, but this should fix the most direct problem). -------------------------------------------------------------------------------- 84ea7605eb | Nicholas Feinberg | 2023-10-18 10:52:00 -0700 Mark !invis useless again when perma-backlit (CarefulOdds, elliptic) This was broken by 902d8d2af84. !invis is now marked useless in flux form. This is not really ideal (autopickup should really take it anyway) - someone should fix it. -------------------------------------------------------------------------------- 62d6f922e0 | Nicholas Feinberg | 2023-10-18 10:52:00 -0700 Tweak backlit mut desc (CarefulOdds) -------------------------------------------------------------------------------- 83f249bd18 | Nicholas Feinberg | 2023-10-18 10:52:00 -0700 Simplify repeated !invis use The invisibility spell is long gone, so we don't need to worry about repeat casts (if we ever did?). (This is pre-DCSS logic.) -------------------------------------------------------------------------------- 95c4c6a0d8 | Implojin | 2023-10-18 03:25:21 -0500 fix: Treat the Zot clock as noteworthy ..and stop this note from printing "Buggy note passed" in the log. -------------------------------------------------------------------------------- 8b6cb33e30 | Implojin | 2023-10-18 03:06:59 -0500 Clarify Meteoran Zot clock description (CarefulOdds) As the Zot clock no longer insta-kills, let's be more specific about its max HP reduction effect. -------------------------------------------------------------------------------- 0a390f2509 | Nicholas Feinberg | 2023-10-17 21:17:59 -0700 Fix dream grammar "DickyLongcocking saved by the dreamshard necklace!" is not very grammatical. -------------------------------------------------------------------------------- e39a22a033 | Kate | 2023-10-17 22:04:13 +0100 Fix display of Axe of Woe's damage rating On '@', just display the flavour message on its own, instead of "Your damage rating with the +∞ Axe of Woe is about your enemies will bleed and die for Makhleb." -------------------------------------------------------------------------------- affab04aa4 | Kate | 2023-10-17 21:56:54 +0100 Fix displayed damage rating for non-weapons On '@', just display a zero when wielding any non-weapon (instead of listing out all the strength and skill bonuses that don't apply), and don't count wand charges towards the enchantment portion of the damage rating if wielding a wand. Closes #3280. -------------------------------------------------------------------------------- 6e6a34aff2 | Monkooky | 2023-10-17 21:23:55 +0100 Lower Jinxbite Will/2 Duration Lowers the duration of the Will/2 status to more closely match Jinxbite; additionally remove spell power scaling for Will/2 to remove a minor training disincentive. This should rarely have serious balance implications, but be better for quality of life. [Committer's note - Refactored to avoid a crash, and added a cap to Jinxbite duration itself.] -------------------------------------------------------------------------------- d4ebf70e20 | Monkooky | 2023-10-17 21:23:55 +0100 Adjust handling of caps in you.increase_duration() Removes a behaviour where you.increase_duration() could lower durations when passed a duration with a cap while already over that cap. Relevant in a few rare cases (e.g. Klown pies applying a capped low-duration silence would reduce the duration of an existing silence spell). [Committer's note - rewrote commit message and separated out Jinxbite handling. Closes #3293.] -------------------------------------------------------------------------------- 28cbb04a8c | Nicholas Feinberg | 2023-10-16 17:11:03 -0700 Remember a dream Add a note type and a milestone for having your life saved by the dreamshard necklace. -------------------------------------------------------------------------------- 3060d423dc | Nicholas Feinberg | 2023-10-16 16:55:25 -0700 Unban Ozocubu's Armour + Statue Form (Lici) Not as needed now that Statue Form isn't int-based. -------------------------------------------------------------------------------- ebf5b86a2d | Kate | 2023-10-16 22:37:55 +0100 Remove weapons from some zombies in a bailey Zombies aren't supposed to be able to use items, and giving them polearms in this bailey results in the polearms not being visibly displayed in console. The main threat of the vault is the gargoyles and vampires, so no compensation has been given to the zombies (but they could perhaps instead be changed back to regular orcs, as well). -------------------------------------------------------------------------------- a885b83477 | Kyle Rawlins | 2023-10-16 17:08:50 -0400 feat: clo to force a full des cache reset This option ensures that the des cache is rebuilt from scratch, independent of whether the .des files have changed. It then uses this option in `make test`, so that local runs of `make test` exercise the entire set of des files (and match CI and webserver version update behavior for cases where des syntax changes). (For consistency, I probably should have named this `-resetdb`, but I don't like the name `-builddb` in the first place.) -------------------------------------------------------------------------------- 8387aacbc1 | Nicholas Feinberg | 2023-10-16 13:59:46 -0700 Give wizards their tongues back -------------------------------------------------------------------------------- 50735af31d | elliptic | 2023-10-16 16:06:42 -0400 Make Sif gifts less frequent at lower piety. Where Okawaru or Trog had 0 chance of gifting right after reaching 5* piety, Sif had about an 8% chance; this made it reasonably plausible to get a gift and then drop back below 5* during the piety timeout. This commit generally makes Sif gifts less frequent at piety less than 6* and more frequent at piety more than 6*. This does mean that the expected time to the first Sif gift is longer; if this feels undesirable, I would suggest moving gifts to start at 4* piety instead of 5*. I'm not sure whether this is a large enough change to make it reasonably easy for players to get to 6* Sif piety before getting every spell in the game, but if it does have that effect then I see it as a good thing. The main intent of the change though is to make it much less likely to drop a piety rank without using abilities. -------------------------------------------------------------------------------- 4c35d5ed2b | Nicholas Feinberg | 2023-10-16 07:27:56 -0700 Arcanists: lbolt -> fcloud (regret-index) To differentiate from other lightning bolt + force lance monsters, give arcanists freezing cloud instead. Fun synergy with paralysis and force lance. -------------------------------------------------------------------------------- eeba0b7a58 | Nicholas Feinberg | 2023-10-16 07:23:37 -0700 Give Occultists a hand (dinky) -------------------------------------------------------------------------------- 472e003958 | advil | 2023-10-16 09:48:11 -0400 build: fix some warnings -------------------------------------------------------------------------------- 32ab0262c4 | Kate | 2023-10-16 13:03:39 +0100 Fix the build Remove some stray wizards. -------------------------------------------------------------------------------- 02257934e3 | Zhang Kai | 2023-10-15 23:28:06 -0700 Update monsters.txt Update and revise translation. -------------------------------------------------------------------------------- ebcc7e148e | Zhang Kai | 2023-10-15 23:28:06 -0700 Update monsters.txt Update and revise translation. -------------------------------------------------------------------------------- e0a2eff941 | Zhang Kai | 2023-10-15 23:28:06 -0700 Update spells.txt -------------------------------------------------------------------------------- 26f404366d | Zhang Kai | 2023-10-15 23:28:06 -0700 Update items.txt -------------------------------------------------------------------------------- 6abf09ed30 | Zhang Kai | 2023-10-15 23:28:06 -0700 Create godspeak.txt -------------------------------------------------------------------------------- dc452ea274 | Zhang Kai | 2023-10-15 23:28:06 -0700 Update features.txt -------------------------------------------------------------------------------- 77c0d2a828 | Zhang Kai | 2023-10-15 23:28:06 -0700 Update unident.txt -------------------------------------------------------------------------------- baebb6b12a | Zhang Kai | 2023-10-15 23:28:06 -0700 Update unrand.txt -------------------------------------------------------------------------------- 70e9662eb1 | Zhang Kai | 2023-10-15 23:28:06 -0700 Update species.txt -------------------------------------------------------------------------------- beab03f220 | Zhang Kai | 2023-10-15 23:28:06 -0700 Update gods.txt -------------------------------------------------------------------------------- 907d27a6c6 | Zhang Kai | 2023-10-15 23:28:06 -0700 Update spells.txt -------------------------------------------------------------------------------- 550896e986 | Zhang Kai | 2023-10-15 23:28:06 -0700 Update backgrounds.txt -------------------------------------------------------------------------------- e30bc5b396 | Zhang Kai | 2023-10-15 23:28:06 -0700 Update items.txt -------------------------------------------------------------------------------- be6526df08 | Zhang Kai | 2023-10-15 23:28:06 -0700 Update montitle.txt -------------------------------------------------------------------------------- f21790cbe8 | Zhang Kai | 2023-10-15 23:28:06 -0700 Update monsters.txt -------------------------------------------------------------------------------- 69cb52fc78 | Zhang Kai | 2023-10-15 23:28:06 -0700 Update status.txt -------------------------------------------------------------------------------- 30f743f5ea | Zhang Kai | 2023-10-15 23:28:06 -0700 Update mutations.txt -------------------------------------------------------------------------------- 90a03a5dd1 | Zhang Kai | 2023-10-15 23:28:06 -0700 Update tutorial.txt -------------------------------------------------------------------------------- 1e2b247f76 | Zhang Kai | 2023-10-15 23:28:06 -0700 Update ability.txt -------------------------------------------------------------------------------- 75c64fe6d6 | Zhang Kai | 2023-10-15 23:28:06 -0700 Update help.txt -------------------------------------------------------------------------------- 129f0b0447 | Nicholas Feinberg | 2023-10-15 23:25:40 -0700 Split wizards in half (elliptic) When monster spellbooks were merged in bc7614a589d44b (Jan 2021), the number of wizards with Banish tripled. This increased the amount of Banishment in Crawl by an undesirable amount. Wizards were used quite widely for thematic reasons - they're a Generic Magic Monster. Rename them to 'occultists' and add an 'arcanist' monster, which has the same stats but a non-banishy spellbook (para, haste, lbolt, and flance). Put occultists in Depths, arcanists in Vaults, and a 50/50 split everywhere else. (Wizard name replaced to discourage future overuse and to disambiguate with orc wizards.) Didn't bother reflowing some vaults lines, so some are quite long now. Sorry! -------------------------------------------------------------------------------- 1a8549509d | gammafunk | 2023-10-15 21:33:58 -0500 fix: Colour some clear stone in a vault (elliptic) For gammafunk_dig_for_victory, make all clear stone use the special color currently used to hold the deep troll earth mages flanking the inner path. This colouration was done to distinguish diggable from non-diggable clear walls, especially in console, and there's no reason not to apply it to the clear stone proceeding the loot area as well. We do that and additionally use the colored stone for the outer walls as well, so now diggable and non-diggable clear walls are always distinguished by the same color. -------------------------------------------------------------------------------- 40fc089f4a | Kate | 2023-10-16 00:34:06 +0100 Document Nessos's special-cased brand stacking Closes #3316. -------------------------------------------------------------------------------- 86116bc889 | Nicholas Feinberg | 2023-10-15 15:43:41 -0700 Give fire crabs rLava (elliptic) Brutal buffs, or perhaps nerfs, to hangedman_research_pyrotechnics, cheibrodos_lair_end_hotspot, and minmay_lair_entry_lava. (The latter is the point.) -------------------------------------------------------------------------------- 85e71fe22c | Nicholas Feinberg | 2023-10-15 15:23:18 -0700 Fix: ID randbooks Reverts to the behavior we had before 658a57c81a4f6. Fixes bugs. -------------------------------------------------------------------------------- be960a18b5 | gammafunk | 2023-10-15 16:18:25 -0230 fix: A fix and minor changes to branch entries Add a missing MONS statment and apply some house style rules. -------------------------------------------------------------------------------- 385d4b38af | regret-index | 2023-10-15 16:17:18 -0230 Vault review: Branch entries Most of this is nerfs to notable statistical outliers of the most dangerous, and minor buffs to the absolutely weakest. It's not bad for a branch entry vault to have some notable danger, but the higher it is, the more it de-emphasizes the branch the vault spawned in and the more it emphasizes specific spoiler knowledge or arbitrary surprise spikes of danger. For example, autoexplore being bad around trees in Lair:2-3 if any noise was made because one could travel into blind harpooning beside dual bog bodies / hydrae, or random doors in Depths revealing three hellephants and five hell hogs immediately on the player at once. Not ideal. (This occasionally also just uses more strict NSUBST behaviour to reduce slim chances for absurd numbers, and also makes some minor adjustments for Depths and Hells having continued to change identity over time.) Additional notes: * A slim few rarely-spawning entries rely on a singular extreme out-of-depth: like a fire crab guarding Lair, or a guardian serpent guarding Snake. For now, I'm just adding some terrain cover to mildly reduce the threat; further discussion of the state of these is probably warranted. Some others, like the oklob plant guarding lair and the mini-Vaults:5 entrance get people far more for hubris than inherent chasing danger... so their inherent nature hasn't been touched. * No deep water in Spider entries (no clinging anymore, discourage poking). * No ORIENT: float in Snake entries since other lair branch entries aren't. * While a couple of the tier 4 and tier 3 demons could serve the occasional support functionality (af_corrode, af_barbs, malmutate), their presence in Depths entries to Pan was notably weak otherwise compared to how much the constant Hells entrances got. With this, the entry function now places no tier 4s, less tier 3s, and usually a second tier 2. * This also slips in some minor formatting style standardization- stuff like a standard NAME -> TAGS -> DEPTH -> ORIENT -> MONS -> ITEM -> KFEAT -> [randomization] -> feature tiles and colours order, or minimizing "nothing" in monspec and itemspec. Establishing a firm house style guide and enforcing it might be nice eventually...? -------------------------------------------------------------------------------- d2e1b1f749 | mainiacjoe | 2023-10-15 16:02:24 -0230 One arrival vault (#3178) An oval room with oval walls in the middle, with decorations around the entrance inside. This vault was the sample project in MainiacJoe's "The Beginner's Guide to Contributing Vaults to Dungeon Crawl: Stone Soup". [Committer's note: Moved from simple.des to small.des. Closes #3178.] -------------------------------------------------------------------------------- 75fcfec63a | Implojin | 2023-10-15 12:36:39 -0500 fix: Conjugate aoops pursuit verb (riverfiend) -------------------------------------------------------------------------------- e136f0c47a | regret-index | 2023-10-14 21:43:23 -0230 Remove fast movespeed off of monster tengu, compensate each differently Player tengu have lost faster movespeed due to kiting tedium, so monster tengu should somewhat correlate. While I personally feel that there's some advantages to not strictly trying to preserve symmetry between players and monsters for the sake of making monsters also actually work, the marginal speed advantage of monster tengu is east enough to exchange for actually fleshing out and focusing in on the rest of their gimmicks. Each of tengu reavers, tengu warriors, and tengu conjurers gets a different buff to compensate: tengu reavers get rMsl, tengu warriors get AF_FLANK, and tengu conjurers cast Battlesphere more often + swap emergency Blink for emergency Force Lance. * Late game ranged combat is exceptionally strong and simple, with extremely little notable trying to counter it (spriggans die to area wands, Sojobo / Enchantress are both unreliable spawns and both dislike wand of roots). Tengu reavers currently having an identity of random bolt + decent melee basically makes them a fancier giant. Giving them rMsl like Sojobo has suits the air apt, fleshes out the current focus on having all the bolts, and puts a little more pressure on those late game ranged characters. * Tengu warriors were just slightly more dangerous orc knights aside from their faster move speed, except with another tengu instead of battlecry + other orcs, and in late D after one may have already done Orc. Giving them the new AF_FLANK to fly behind the player in melee gives them a memorable trick without feeding further into stats arms races, and even results in a minor support role when they spawn in Depths. (As mid-D out-of-depth vault / spawns, if the player starts running earlier, then they're easier to escape without the added movespeed anyway. If players don't, well. They'll learn.) * Tengu conjurers are the only normal monster with battlesphere! They're also basically earlier deep elf zephyrmancers that cast lightning bolt less often, down to sharing blink (if in an emergency slot). To give them a bit more of a niche with this speed nerfing, they're getting a higher battlesphere cast chance (since it's completely dependent on proper sequencing of random actions) and replace emergency blink with emergency force lance (which will still put some distance but also actually activates the battlesphere more than a tenth of the time). A few early D vaults using tengu monsters have been adjusted alongside this. -------------------------------------------------------------------------------- 9a209b2425 | elliptic | 2023-10-14 11:18:35 -0400 Remove some Sword of Power breakpoints Now it just fires HP/270 beams, rounded randomly. This is a tiny buff to characters with less than 270 HP and a larger buff to characters with significantly more than 270 HP (hard without statue form + berserk etc), but I suspect the sword is still on the weaker side of unrands. -------------------------------------------------------------------------------- 1609e0ac53 | regret-index | 2023-10-14 02:06:53 -0230 Unbrace -------------------------------------------------------------------------------- 71e63ac981 | regret-index | 2023-10-13 22:56:27 -0230 Give ufetubi AF_FLANK, make them spawn in duos a floor later There's not much that ufetubi have to stand out amongst the early fast monsters- essentially hounds with higher damage and half the health plus some random resists. While they're more notable in early D than anywhere else they once previously spawned, they could do with any actual distinction. Since they're originally mostly noticeable for flocking off of ynoxinuls, let's lean on those origins a little harder. They get the new AF_FLANK capacity to slip past the player on a melee attack, and to make that actually notably matter anywhere, they also get a little more HP and spawn with another ufetubus, in D:5-7 instead of D:4-7. Maybe they'll finally be noticeable when they pin one in from fleeing a given water moccasin or ogre? (The ufetubi-summoning Ynoxinuls are rarely used in vaults at depths where they'll actually hurt the player much, but this commit also nerfs a few earlier vaults that use either without easy recourse, just in case. I'm not too concerned about this affecting demon summoning too much; sure, an orc sorcerer or high priest's ynoxinuls pin one in even harder, but a sun demon or sixfirhy could just kill directly instead.) -------------------------------------------------------------------------------- e004ede0ee | regret-index | 2023-10-13 22:55:08 -0230 New attack flavour - AF_FLANK Like hellwings' AF_SWOOP, this gives a monster a chance and a cooldown to go behind its target if said space is free. Unlike AF_SWOOP, the new AF_FLANK triggers on melee attacks, rather than giving it a free blink close from 2 to 5 tiles away. (Since this isn't being done from long range, that chance is 1/3 hits here, not 1/4 turns active.) Whatever gets this thus gains the notable ability to get past its foes in corridors and chokepoints, but without adding to the heavy use of a variety of different types of blinking used broadly throughout the game. Autofight probably shouldn't be too confused since they're already in melee anyway. -------------------------------------------------------------------------------- fe8ebadbca | regret-index | 2023-10-12 16:10:23 -0230 Transform a tiny amount of Elf:3 loot into thematic Elf:2 Hall of Blades loot The 1/3 chance to actually get an appropriate or even tempting top-tier weapon as the only real rewards from the Hall of Blades is kind of weak relative to the high danger an open vault eating up half of the level filled with dancing weapons presents. It's regularly better to not open the vault, but as a guaranteed placement avoiding it is awkward on top of the meagre rewards- Elf:3 hatches, teleports, and teleport traps are much worse, with little compensation for such an otherwise dramatic nature. As such, I'm buffing Blade's items rewards, while trying to adhere to its focus and flavour. Each vault gets a 50% chance for a blade talisman, so unarmed characters might actually care about it and may get something, plus two scrolls of enchant weapon and either a third or a brand weapon scroll. A third handpicked top-tier dancing weapon also spawns half the time (making the chance to get a specific weapon go from ~33% to ~42%), and their handpicked brands list replaces venom and draining with heavy and spectral. (These odds might be adjusted with further debate.) To balance out such additional items in the branch, the Elf end vault loot has been very slightly decreased- there's two items per endvault now just replaced with gold. (This sort of arrangement might warrant further reducing / "transferring" to support another optional branch's lacking rewards versus danger, in Crypt, but that will take a fair bit more review and debate.) -------------------------------------------------------------------------------- 02e7d12df6 | Nicholas Feinberg | 2023-10-11 18:06:31 -0700 Add Jinxbite tile (CanOfWorms) -------------------------------------------------------------------------------- a9a24b5522 | brandon s allbery kf8nh | 2023-10-11 18:05:49 -0700 prevent a Grand Finale crash If there are lost souls in LOS when Grand Finale is used, one may create a new monster where the exploded one had been, causing a crash. Catch this and take the fallback path. -------------------------------------------------------------------------------- a0274b33d4 | Kate | 2023-10-12 00:53:10 +0100 Fix spacing -------------------------------------------------------------------------------- ba0c9b4c9a | Kate | 2023-10-12 00:50:24 +0100 Fix Dimensional Bullseye leaking Mara clones Expire the effect from the real monster when creating a clone. -------------------------------------------------------------------------------- 346e7cf427 | Kate | 2023-10-12 00:21:45 +0100 Adjust Sigil of Binding messaging It gave a warning exactly 2 turns before expiring, but no message at all on actual expiration. Timeout warning messages should generally be randomised, and in this case there isn't really any need for a warning message at all - remove the warning message and add expiry messages. -------------------------------------------------------------------------------- 10ed682358 | MainiacJoe | 2023-10-11 16:01:39 -0230 Add two Ossuary entries (#3238) [Committer's notes: Moved these to the bottom of the entries section, for now, to fit with the rest of the file. Some later commit should reorganize portal entries to split the threatening from the decorative. Also, made a custom non-slow vaguely Egyptian undead set replacing D zombie use to tone down e.g. unseen horror zombie spam on D:8. Maybe this should be functionized and used all ossuary entries? Ossuaries themselves scaling or not based on not specifying zombie lists is weird and really should be addressed one way or another, much less how the non-scaling ones think rat zombies are interesting D:4 enemies.] -------------------------------------------------------------------------------- cc72cf4df8 | Roadster Tracker | 2023-10-11 12:58:01 -0230 Adding rocket / ship arrival / monster vaults (#2773) [Committer's note: Two smoky arrival rockets (where I heavily reduced smoke), a Greek ship minivault (I moved to D and Depths mixing Shoals and other enemies), and a ...beplagued colony ark capsules of zombie minivault (for which I cleaned up the list and combined together). These are pretty silly in this fantasy context, but I suspect few people will notice they're rockets without source-reading anyway, so it probably should be fine.] Closes #2773.] -------------------------------------------------------------------------------- 674d60d6f7 | gammafunk | 2023-10-10 17:13:13 -0500 fix: Correct an NSUBST For the subvault hex_subvault_crossings, the rock replacement pattern should leave non-modified glyphs as rock, not replace them with floor. -------------------------------------------------------------------------------- 9b2fd80f0c | gammafunk | 2023-10-10 16:47:53 -0500 fix: Place some subvaults correctly (elliptic) For the hex_subvault_* set of subvaults, which are part of hellmonk_hyper_hexagons, the subvaults were missing an unrand tag to prevent their placement as normal vaults. Add this tag and move common tag setup to the hex_setup() function these subvaults all use. -------------------------------------------------------------------------------- b85685009f | Nicholas Feinberg | 2023-10-10 12:48:02 -0700 Make /light match Dazzling Spray (ebonnov) It was confusing that Dazzling Spray didn't match /light for which monsters could be blinded. Restrict /light so that nonliving, plant and undead monsters can't be blinded by it. (Which seems moderately intuitive.) -------------------------------------------------------------------------------- 3d5d91748a | Nicholas Feinberg | 2023-10-09 16:51:52 -0700 BOULDER (CanOfWorms) Add a spell tile for Brom's Barreling Boulder. -------------------------------------------------------------------------------- 74853506b1 | Nicholas Feinberg | 2023-10-09 15:57:14 -0700 Small binding sigil tweaks -------------------------------------------------------------------------------- 087f8585d8 | Nicholas Feinberg | 2023-10-09 15:56:35 -0700 Binding sigil spell & feat tiles (CanOfWorms) -------------------------------------------------------------------------------- f9435882c7 | Nicholas Feinberg | 2023-10-09 15:28:55 -0700 Deduplicate Oka gifts (elliptic) Ban Oka from offering non-artefact weapons/armour of the same type and ego, since it was quite depressing to be offered three bardiches of protection or whatever. This is an Op^Oka armour gift buff especially, since they have so few slots that they're very likely to get gifted artefacts. That's fine, though. -------------------------------------------------------------------------------- 102095e7f3 | Nicholas Feinberg | 2023-10-09 15:27:16 -0700 Fix the build -------------------------------------------------------------------------------- 0814019178 | Nicholas Feinberg | 2023-10-09 15:10:33 -0700 Add Okawaru capstone icons (CanOfWorms) -------------------------------------------------------------------------------- 9dce7d3444 | MainiacJoe | 2023-10-08 20:31:50 -0230 Two late D vaults (#3229) [Committer's note: Both of these were Depths entries with some issues- one didn't have any threat or interest unless one digged out extremely out-of-depth enemies, and the other had little actual connection to Depths as a branch. Both of these have been converted to late D minivaults instead. The former arena made into an Okawaru vault using some D oods, as another experiment with all the backtracking material to make opening something be dangerous even late game. The latter labyrinth was given a few Lab non-minotaur enemies at the entrance to warn a little more and contrast a little with the other current faux-Lab. Note we probably shouldn't have too many more of the latter: added a new uniq_ tag for now, anyway.] -------------------------------------------------------------------------------- 469dc525a8 | yrdzrfxndfvh | 2023-10-08 18:31:02 -0230 new vaults in crypt and depths (#3028) [Committer's notes: A highly specific game reference of an beast zombie pile + curse skulls made into an enclosed Crypt single-stair ambush. Derived undead can't regenerate, but they can't be taken up the stairs either, so it should still kinda work. Also, a tengu + shrike minivault for Depths, after I gave it actual rewards and a little less of a chokepoint. Closes PR #3028.] -------------------------------------------------------------------------------- 86f20125e8 | Nicholas Feinberg | 2023-10-08 13:57:20 -0700 Remove DOS support (Ge0ff) Cont'd from 5577605d7802af08a7cc1c2d09c1b5599dfcee6c (2011). -------------------------------------------------------------------------------- 2a902b0113 | patrick | 2023-10-08 12:56:58 -0400 Add some simple decor vaults to Swamp and mini_features.des Nothing too fancy here. Just some designs that had been stuck in my head for a while. -------------------------------------------------------------------------------- 7dc041b90a | elliptic | 2023-10-08 12:24:05 -0400 Let nets/webs work on giants. The precise set of which monsters are SIZE_GIANT is one that players don't have much reason to learn for anything other than net-throwing, and it could be an annoying gotcha when players were playing quickly and didn't notice the (immune to nets) in the targeter for something they didn't expect to be SIZE_GIANT (e.g. quicksilver ooze vs azure jelly). If letting players freely net hydras, dragons, Cerebov, etc feels too strong, we can reduce net generation and/or add some HD scaling. This commit also affects players in dragonform, who are no longer immune to nets/webs. -------------------------------------------------------------------------------- 362426d53f | Nicholas Feinberg | 2023-10-07 22:17:36 -0700 Fix a randbook info leak (elliptic) "Unknown" randbooks weren't so unknown after all. -------------------------------------------------------------------------------- c9b61b78f7 | Kate | 2023-10-07 21:05:22 +0100 Improve cloud spell targeters When aiming cloud spells that use a targeter_cloud, correctly display when existing harmless clouds can be overwritten. Also fix an older bug that made cloud spells look like they could spill into a Sanctuary, and don't allow trying to cast clouds inside a Sanctuary (previously the targeter would tell you that nothing would happen, but the cloud could spill out of the Sanctuary). -------------------------------------------------------------------------------- 99b8c10eda | Kate | 2023-10-07 20:45:15 +0100 Let ophan holy flames overwrite cosmetic clouds Using the same cloud strength rules as used for other cloud spells. -------------------------------------------------------------------------------- 7ff8af7976 | elliptic | 2023-10-04 17:42:37 -0400 Simplify _cloud_is_stronger Don't let opaque clouds overwrite harmless opaque clouds; this was mainly relevant for using scroll of fog against catoblepas breath (which now works). Now no opaque or harmful cloud can be overwritten other than steam (which might not need a special case, but it dissipates very quickly anyway so it sort of makes sense). -------------------------------------------------------------------------------- 62f75f5e9b | Kate | 2023-10-04 22:06:44 +0100 Fix apply_area_cloud being unable to overwrite clouds (qwqw) Fixes cloud spells (such as swamp drake breath) being unable to overwrite harmless/cosmetic clouds. -------------------------------------------------------------------------------- d1b5ebe444 | elliptic | 2023-10-04 16:16:55 -0400 Fix hand cannon smoke being biased towards certain directions (kate). -------------------------------------------------------------------------------- aac375c287 | Kate | 2023-10-03 23:00:22 +0100 Don't crash when self-targeting Bombard/Mule -------------------------------------------------------------------------------- 2feec9bdef | Kate | 2023-10-03 23:00:22 +0100 Prevent self-targeting purple draconian breath As with 762be4b276345 preventing self-targeting wands of quicksilver, don't grant purple draconians unlimited access to cancellation. -------------------------------------------------------------------------------- b3bcc0d938 | elliptic | 2023-10-02 19:43:47 -0400 Remove pearl dragon as an option in a the_grid subvault It just generated with a pile of gold with no surrounding holy-theming, and there are plenty of other dragons that can be used instead. Mummies etc deserve not to be randomly blasted by a pearl dragon like this, and it's nice to keep them as a more special monster. -------------------------------------------------------------------------------- 9abc20d24f | Implojin | 2023-09-30 10:48:03 -0500 Fix an unintentional fallthrough (PF) -------------------------------------------------------------------------------- dc52ec4e09 | regret-index | 2023-09-27 13:58:09 -0230 Brief reorganizing & header rewriting for some .des files * abyss.des - Shorten the abyssal rune vault header with the addition of runelights, and put the rune vaults after the rune vault combinations with the other non-combined rune vaults. * wizlab.des - Remove the XP listing off the top banner, if it's not going to be used and since we're not tracking average xp off of other portals. Put the two randomly-named wizards' wizlabs at the top of list rather than the bottom so it can otherwise be listed in chronological order. * zot.des - reorganize to seperate decorative vaults from non-decorative vaults, for a future plan. Also consistently put the TAGS line second after NAME. -------------------------------------------------------------------------------- 427724c815 | Nikolai Lavsky | 2023-09-27 15:38:30 +0300 feat: add a default force_more for Okawaru's capstone gifts Otherwise it's easy to miss when these gifts become available. Also, remove an obsolete force_more for Oka's armour gifts. -------------------------------------------------------------------------------- dad65c7809 | elliptic | 2023-09-27 02:56:31 -0400 Don't have god wrath slow the player for 0 turns Giving the message for slowing but not actually slowing the player was confusing; instead use a more typical slow duration (same as *Slow etc). -------------------------------------------------------------------------------- 038b102fc3 | elliptic | 2023-09-26 23:09:42 -0400 Buff finessed rapier of speed. A rapier of speed at mindelay (or various other fast weapons of speed) takes 10/3 aut per swing (random-rounded). With Finesse this should be halved to 5/3 aut, but instead weapon delay was hardcapped below at 2 aut. This commit reduces that hardcap to 1 aut (which should be impossible to reach anyway). When quickblades had the same issue as rapier of speed it was possible to view the 2 aut cap as part of shortblade balance (though only with Okawaru specifically...), but with new quickblades it's hard to defend it as sensible. A finessed quickblade is already effectively a 5/4 aut attack delay weapon. -------------------------------------------------------------------------------- 6d2ecbb638 | Nicholas Feinberg | 2023-09-26 13:18:28 -0700 Prompt before dubious bombard shots Don't stumble backward into eg zot traps without a prompt. -------------------------------------------------------------------------------- 762be4b276 | Nicholas Feinberg | 2023-09-26 10:27:44 -0700 Ban self-targeting /quicksilver (elliptic) It's fun to have multiple uses for items, both offensive and utility, but using wands of quicksilver to cancel effects on the player was entirely too powerful. Since there are so many charges of /qs than there are potions of cancellation, it effectively made most status effects irrelevant. It's good for games to feel different depending on which items you get, but this went too far, unfortunately. Purple dracs can still self-target for now. -------------------------------------------------------------------------------- 67fb590e27 | Nicholas Feinberg | 2023-09-26 09:38:05 -0700 Reduce verbiage By one word. -------------------------------------------------------------------------------- 3fff7bce4a | Nicholas Feinberg | 2023-09-26 07:30:09 -0700 Fix bombard message (Flugkiller) -------------------------------------------------------------------------------- 3ceb0a68c4 | Implojin | 2023-09-25 18:28:50 -0500 fix: Correctly gender M_ARCHER uniques on xv This affects Nessos, Vashnia, and Joseph. -------------------------------------------------------------------------------- 2a3a5bc3be | elliptic | 2023-09-25 02:20:03 -0400 Let monsters throw instead of launch sometimes (Superwelder). Previously a goblin with a sling and curare would look scary but never use the curare. Instead, make it throw in place of launching 1/3 of the time. -------------------------------------------------------------------------------- 8ad8ed16fb | Implojin | 2023-09-25 01:18:04 -0500 fix: Don't steal mons throwables with Tukimas (Darby) Previously, it was possible to pull throwables out of monster inventories by casting Tukima's Dance at them, iff they were wielding a ranged weapon. This behavior seems to date back to when launchers had ammo and seems buggy; I think we're ok to just remove it. -------------------------------------------------------------------------------- c15d34cb79 | Implojin | 2023-09-25 00:30:03 -0500 fix: Allow inventory ctrl+f searches in descent Broken in 9a366f9be8. -------------------------------------------------------------------------------- 3a2c1c66ba | Nicholas Feinberg | 2023-09-24 14:59:41 -0700 Halve bombard knockback chance (Flugkiller) -------------------------------------------------------------------------------- 143b1e81fc | elliptic | 2023-09-24 00:45:00 -0400 Make heavier body armour less common from acquirement. I have no clue whether this is a significant change in practice and this body armour weighting code should really be replaced with something less spoilery and impossible to understand, but this has been bugged since 0.17 (47d87d71 removed this abs alongside other changes and refactoring) and at least now the "highest chance when armour skill = (displayed) evp - 3" comment isn't lying. -------------------------------------------------------------------------------- 2a533130d9 | Kate | 2023-09-24 00:58:48 +0100 Prevent blessed weapons generating without holy brand (qwqw) -------------------------------------------------------------------------------- f545646a5b | Kate | 2023-09-23 22:16:42 +0100 Adjust a Ru hint (Ge0ff) -------------------------------------------------------------------------------- b7646bb5e3 | Kate | 2023-09-23 21:55:03 +0100 Adjust tense in a rampage message And its equivalent message for Line Pass/Power Leap. -------------------------------------------------------------------------------- 2ae921e79e | Kate | 2023-09-23 21:55:03 +0100 Fix a hint -------------------------------------------------------------------------------- a5cc291a1b | gammafunk | 2023-09-23 11:49:22 -0500 fix: Use stone in a runed door vault (Ge0ff) For minivault_13, use stone for the walls sealed by the runed door, otherwise the vault can generate monsters than can dig free. -------------------------------------------------------------------------------- f28bc0971e | Kyle Rawlins | 2023-09-23 11:36:17 -0400 fix: guard against the most obscure possible octoring case -------------------------------------------------------------------------------- e5246a80f4 | Kyle Rawlins | 2023-09-23 11:05:27 -0400 fix: tighten an octoring assert This octoring check should at least be applied during tests; this change strengthens the check quite a bit (possibly too much, see comment). (Note that tests are still passing, at least in one-off local runs.) -------------------------------------------------------------------------------- a682863bf0 | gammafunk | 2023-09-23 09:45:38 -0500 fix: Use stone glass in a runed door vault (CarefulOdds) For minmay_expanding_circles, use stone glass instead of rock so that any monsters behind the runed door can't dig out. -------------------------------------------------------------------------------- 2b794fb95e | Kyle Rawlins | 2023-09-23 10:38:24 -0400 fix: add octoring handling for unrand lookup Also, unrand status handling altogether to some code that is maybe only used in wizmode? -------------------------------------------------------------------------------- d5cc6f37b9 | Kyle Rawlins | 2023-09-23 09:57:59 -0400 fix: fix fix -------------------------------------------------------------------------------- 532e591ea2 | Kyle Rawlins | 2023-09-23 09:52:29 -0400 fix: unrand generation logic in the abyss If an acquirement scroll was read in the abyss, the previous iteration of this logic would allow unrands *only* if they were lost in the abyss, which wasn't intended. I think it would also potentially break logic for items marked as lost in the abyss when *not* in the abyss. -------------------------------------------------------------------------------- f6de2f5ab6 | gammafunk | 2023-09-22 16:19:03 -0500 feat: A lua api for Okawaru capstone gifts This commits adds the lua hooks c_choose_okawaru_weapon() and c_choose_okawaru_armour() to allow automatic choice in the acquirement menus for Okawaru gifts. This is the same method used for lua handling of acquirement scrolls. We add an argument to items.acquirement_items() to request items for a specific source of acquirement. I've just chosen integers values, starting at 1 for the scroll, 2 for Oka weapon acquirement, and 3 for Oka armour acquirement. There's currently no support for checking whether these one-time abilities have been used. The you.one_time_ability_used() interface won't work both because it's currently not used for Oka's capstones and because there are two separate capstones. The latter isn't compatible with the simple boolean values in the FixedBitVector used by player::one_time_ability_used. Rather that trying to generalize this, I'm leaving it to lua scripts to check the ability table to verify availability cache whether the player has used them. -------------------------------------------------------------------------------- e7c7cf74f0 | elliptic | 2023-09-22 01:51:10 -0400 Bias Oka armour acquirement towards body armour. Old Oka gifts had this bias, so let's bring it back here as an effort to counteract the phenomenon of getting 4 not particularly exciting aux slot armour options and being sad that you only get to pick one - great body armour can potentially be far more exciting than other slots. -------------------------------------------------------------------------------- 073b73dce1 | elliptic | 2023-09-22 01:47:06 -0400 Make acquire.cc less divine. The divine parameter in acquire.cc obscured what was going on (e.g. new Oka armour/weapon gifts set it to false) and was redundant with the agent parameter. This commit is mostly a refactor removing the parameter - the only functional changes should be to Xom acquirement gifts, which lost some special-casing that was shared with Trog or (old) Oka gifts for simplicity. Specifically, Xom armour acquirement is no longer biased towards body armour like old Oka gifts and Xom weapon acquirement now uses the stronger skill weighting of scroll of acquirement instead of the weaker skill weighting of Trog gifts (and old Oka gifts). I doubt this significantly changes Xom balance. -------------------------------------------------------------------------------- d61d57ddb1 | Kyle Rawlins | 2023-09-21 17:47:30 -0400 lint: checkwhite? -------------------------------------------------------------------------------- 7e855b048f | Kyle Rawlins | 2023-09-21 17:45:56 -0400 feat: mention (e)quip in tutorial 3 On the theory that the (e)quip menu is simpler for new players to understand, this adjusts a few things in tutorial 3 so that they teach this key. I didn't actually remove mention of the specific keys, so it does risk even more information overload. The tutorial summary is also expanded and refactored. -------------------------------------------------------------------------------- 3877ef4a19 | Kyle Rawlins | 2023-09-21 17:14:28 -0400 fix: fit tutorial 1 summary into one fewer lines Condense a line of this tutorial summary away. This summary was 23 lines long. When this is displayed as a popup in console at 80x24, the more message + spacer eats two lines, which obscures the last line of this summary. -------------------------------------------------------------------------------- 8fc83f02d9 | Nicholas Feinberg | 2023-09-21 11:15:20 -0700 Fix the build -------------------------------------------------------------------------------- 3021e91290 | Nicholas Feinberg | 2023-09-21 10:25:50 -0700 New new iron shot: Bombard Leda's Unmaking felt a little too unimpactful - Iron Shot with a little mud spattered on. Try stealing some new tech from Mule and re-replace it with Bombard, which sends you back a tile when you cast it. Might need to nerf the damage a bit more or make the knockback only a chance (e.g. a coinflip). -------------------------------------------------------------------------------- bd3c83e6a7 | brandon s allbery kf8nh | 2023-09-21 08:37:06 -0700 Explicitly qualify std::move and std::forward Clang++-15 now warns about all unqualified uses of `std::move` and `std::forward`. According to https://reviews.llvm.org/D119670?id=408276 this is a new recommendation by the C++ standards committee, due to "concerns that this might be an usual anti pattern particularly britle worth warning about - both because move is a common name and because these functions accept any values". -------------------------------------------------------------------------------- a77100ea1a | Nicholas Feinberg | 2023-09-20 21:59:39 -0700 Fix Mule reflection crash (elliptic) -------------------------------------------------------------------------------- 9fc3694601 | Nicholas Feinberg | 2023-09-20 21:54:03 -0700 Small boulder buffs Reduce wobbliness and increase structural stability. -------------------------------------------------------------------------------- 3bb973df9e | Monkooky | 2023-09-20 20:31:58 -0500 Fix torpor snail slow Torpor snails currently allows you to clear any other slow, by walking into the snail's LOS then leaving it. This fixes that. [ Committer's note: Squashed, Closes #3313. ] -------------------------------------------------------------------------------- c8a3e26bd0 | Implojin | 2023-09-20 18:43:06 -0500 Slightly increase orb floor drop rate (again) Continuing from 548886b2ed for the same reason (plenty of monsters generate with other kinds of shields as gear, but not orbs), let's again bump the floor orb drop rate slightly. No comp for other weightings: 548886b2ed silently adjusted the total weights here from 60 to 58. -------------------------------------------------------------------------------- 0bc164a743 | Kate | 2023-09-20 12:16:28 +0100 Refactor _acquirement_item_def To make it clearer that this parameter isn't equivalent to the "divine" variable used by acquirement_create_item. -------------------------------------------------------------------------------- e1f4d4d48a | Kate | 2023-09-20 12:16:22 +0100 Fix Okawaru capstone acquirements having lowered quality Confusingly, only the missile gifts should be treated as "divine", since this affects the quality of acquired items in various ways (reduced skill weighting, worse brands, etc). The capstones are intended to be at scroll acquirement level of quality. -------------------------------------------------------------------------------- eb2ac4d552 | Nikolai Lavsky | 2023-09-20 12:47:56 +0300 fix: replace Portal Projectile with Dimensional Bullseye in a shop `nicolae_custom_books` still had Portal Projectile in a few self-published books, even though it's no longer a player-castable spell. Replace it with Dimensional Bullseye, which seems to fit the theme of the relevant spellbooks. Resolves #3311. -------------------------------------------------------------------------------- 95b03c3367 | elliptic | 2023-09-19 21:01:16 -0400 Tweak Okawaru missile gift timing/timeouts. This tries to roughly approximate the old missile gift frequency and overall piety drain from timeouts. In particular, missile gifts were moved to 5* (from 3*); they were quite rare before 5* anyway unless you trained Throwing a lot. Also, this commit removes the spoilery impact of Throwing skill on throwing gift frequency/piety drain rate. More tweaks will probably be needed, since this tweak is purely theoretical based on my (possibly flawed) reading of the code and the other Oka gift changes will impact Oka balance too. -------------------------------------------------------------------------------- 46d7d4cff6 | elliptic | 2023-09-19 21:00:34 -0400 Fix Okawaru missile gift stacks being ten times as large as intended. -------------------------------------------------------------------------------- c67433417a | Kyle Rawlins | 2023-09-19 15:41:09 -0400 fix: don't truncate headings when calculating column layouts This was a bit of code that was incomplete in the multicolumn layout code, where it was intended that headings always occupy their own row. The side effect of it being unimplemented was that even for regular 1-column menus, headings could get truncated if they were longer than regular menu items. (No current multicolumn menus use headings, so this remains a bit under-tested.) Resolves #3305 -------------------------------------------------------------------------------- bc85d14992 | Kate | 2023-09-19 19:55:56 +0100 Replace Okawaru's gifts with capstone acquirements Replacing the (often low-quality) weapon and armour gifts when gaining piety, give Okawaru two capstone abilities gained at 6*, offering two separate acquirement-quality selections - one of weapons, and one of armour. Okawaru still grants throwing weapons regularly, but will no longer give weapons or armour over time. The gift timeout on throwing weapons is slightly increased to compensate for the fact that the longer gift timeouts from weapon/armour gifts no longer apply (but this may need further fine-tuning). -------------------------------------------------------------------------------- 6bc09d010c | hellmonk | 2023-09-18 15:40:52 -0400 Revert "add readme and ci" This reverts commit 6ae0a060256104c6a1ce545c6cb28a428d641ad2. -------------------------------------------------------------------------------- 6ae0a06025 | hellmonk | 2023-09-18 15:36:09 -0400 add readme and ci -------------------------------------------------------------------------------- 356b232404 | Kyle Rawlins | 2023-09-18 09:51:20 -0400 fix: a crash due to bad easy_floor_use code The item use menu, for historical reasons, does some of its logic outside of the menu code proper. This commit fixes a crash that resulted from an ad hoc use of a keycode on menu exit to handle the easy_floor_use case, where that keycode could also be set by normal menu code via processing of CMD_MENU_CYCLE_HEADERS. Instead, just add a bool to specifically handle this return case. The preconditions for this crash are an empty menu, which possibly should be prevented (see 6eb203de8ee), and if allowed, could stand to have better ui. But an empty menu still shouldn't crash. -------------------------------------------------------------------------------- 4b2e6d12cb | Kyle Rawlins | 2023-09-18 09:28:11 -0400 Revert "Temporarily disable tab-to-toggle-(un)wield (Darby)" This reverts commit 6eb203de8eedc1ca9851bf46ce9fca1c41805539. -------------------------------------------------------------------------------- 5eb97db20b | Nicholas Feinberg | 2023-09-17 20:33:49 -0700 Allow fragging boulders (Lightli) -------------------------------------------------------------------------------- c751ee2058 | Nicholas Feinberg | 2023-09-17 20:11:45 -0700 Identify un-ID'd randbooks when read Can't miss out on those exciting names :) -------------------------------------------------------------------------------- 1a4ebe560d | Nicholas Feinberg | 2023-09-17 20:06:26 -0700 Fix missing book articles (elliptic) A leatherbound book, not just leatherbound book. (Cont'd from 4455d0aa58...) -------------------------------------------------------------------------------- 4455d0aa58 | Nicholas Feinberg | 2023-09-17 20:01:54 -0700 Re-identify sif book gifts Cont'd from 658a57c81a4f6df, bb03a45e84812a8b891. -------------------------------------------------------------------------------- 6eb203de8e | Nicholas Feinberg | 2023-09-17 19:45:23 -0700 Temporarily disable tab-to-toggle-(un)wield (Darby) Crash-y. We should add logic to check whether the opposite operation is valid, only display & obey the control when it is, and bring this function back. -------------------------------------------------------------------------------- 672be3cf0e | Nicholas Feinberg | 2023-09-17 19:36:08 -0700 Fix floor talisman crash (particleface) Don't crash when evoking an illegal floor talisman, e.g. when undead or in a forced form. -------------------------------------------------------------------------------- bab767e8fe | Nicholas Feinberg | 2023-09-17 18:30:52 -0700 Reduce boulder wobbliness (elliptic) -------------------------------------------------------------------------------- a445dbd2db | Nicholas Feinberg | 2023-09-17 12:49:23 -0700 Tweak Lugonu powers description (TenthLevelVegan) -------------------------------------------------------------------------------- 59c20c4c50 | Nicholas Feinberg | 2023-09-17 11:56:32 -0700 Credit Cureja -------------------------------------------------------------------------------- 6a5aa610a2 | Nicholas Feinberg | 2023-09-17 11:51:25 -0700 Give boulders a flarhgunnstow (elliptic) Experimentally, to push Brom's Barrelling Boulder toward an appropriate power level for a start-book spell, add a 1/3 chance per move of the boulder wobbling to one side while rolling. This makes it fairly prone to hitting the sides of corridors, for example. -------------------------------------------------------------------------------- 141e18f675 | Nicholas Feinberg | 2023-09-17 11:21:36 -0700 Fix deterministic poison + "harm (elliptic) Multiply poison at time of application rather than at time of damage, to keep the poison display accurate. -------------------------------------------------------------------------------- eda3e60247 | Nicholas Feinberg | 2023-09-17 11:19:00 -0700 Fix toxic bog KILLED_BY (DracoOmega) It should be KILLED_BY_BEAM; _BY_POISON is only for actual poison over time damage. -------------------------------------------------------------------------------- eadacf9148 | Nicholas Feinberg | 2023-09-17 10:06:33 -0700 Fix: large boulder issues (Bardcore) Add a description and make it giant, so that we don't have to worry about handling nets or webs. TODO: check handling of constriction. -------------------------------------------------------------------------------- b9f6cac5a1 | elliptic | 2023-09-17 11:45:32 -0400 Tweak the launcher loot in wizlab_tukima. Make the (potential) randarts a mix of penetration and speed instead of just speed, and don't generate a non-artefact triple crossbow of penetration (since generating an artefact instead). This wizlab still has a high chance of generating the best launcher in your game, but a much lower chance of generating the best launcher in 100 games. -------------------------------------------------------------------------------- 7818237a85 | Kate | 2023-09-17 15:59:31 +0100 Remove a redundant explosion from a description -------------------------------------------------------------------------------- 93f5cd52f0 | Kate | 2023-09-17 15:50:45 +0100 Fix a missing spell description (Sergey) -------------------------------------------------------------------------------- 3199509076 | Kate | 2023-09-17 15:40:30 +0100 Use some canned messages for ability cooldowns -------------------------------------------------------------------------------- 3e901ae6a7 | Kate | 2023-09-17 15:40:30 +0100 Increase Blink's base cooldown The cooldown previously had a base duration of 1-2 turns plus a power-dependent duration, and at full power it was eliminated entirely. Instead give it a base duration of 2-4 turns, which still remains at full power. (In practice the duration is actually 1-3 turns, since the turn spent casting it counts towards the cooldown.) -------------------------------------------------------------------------------- ce1d0c9d47 | Kate | 2023-09-17 15:40:30 +0100 Revert "Allow cancelling/dispelling -Blink" Unlike -Move and -Tele which are debuffs applied by monsters/miscasts, -Blink is strictly a spell cooldown, comparable to the cooldowns on Death's Door, Polar Vortex, Ru's abilities, etc. As with all of these, it shouldn't be dispellable in the same way that standard status effects are. This reverts commit b47e89e9764e3024b6e00f44f3f2080c2a483cd6. -------------------------------------------------------------------------------- 3fee5d3b0d | Kate | 2023-09-17 15:40:30 +0100 Let Dimensional Bullseye be dispelled on targets It was already dispellable but only on the player side. -------------------------------------------------------------------------------- 6c5bf4ee3b | Kate | 2023-09-17 15:40:30 +0100 Adjust wording in a Sigil of Binding message -------------------------------------------------------------------------------- 0d66cbabe8 | elliptic | 2023-09-16 17:03:24 -0400 Species selection screen: DE -> Simple, Gh -> Intermediate, lower At. DE is very simple (no mutations!) and has always been a popular choice for a first casty character. Gr and Dr make fine casters too but they are less obviously casting-devoted, so having a simple casting option in Simple seems good. Gh is reasonably simple if you play it as a heavy-armour Tr, but the low Int/Dex can make it sort of miserable if you deviate much from that without knowing exactly what you are doing. Having it next to Tr seems not great. At was moved closer to the end of Simple because although it's generally considered strong, it does have a solid number of weirdnesses (double potions, weird body armour valuation, rampage). -------------------------------------------------------------------------------- bb03a45e84 | Nicholas Feinberg | 2023-09-16 10:34:15 -0700 Fix randbook names -------------------------------------------------------------------------------- a33818d538 | elliptic | 2023-09-16 12:26:56 -0400 Make Chei piety gain only depend on monster base speed (hellmonk). Previously players could gain more Chei piety while killing the same monsters by going into statueform, waiting for the monster to haste itself, not using abilities that slow the monster, and so on. This was fairly insignificant in practice, but still a concern. This commit simplifies Chei piety gain to only care about the monster's base speed (and not any modifiers or the player speed). Instead of only giving piety for monsters faster than the player, Chei only gives piety for monsters who are speed 10 or faster. This has the largest impact on spriggans, who will now gain piety from regular speed monsters as soon as they worship Chei instead of having to find fast monsters to kill to gain piety at the start. The dependence on player speed was relatively small for non-spriggans in the old system; a human worshipping Chei and killing a speed 10 monster progressed from a 1+3/12 piety multiplier at start to a 1+5/12 piety multiplier at max slowness. This commit replaces that with a global 1+4/12 piety multiplier. This commit also increases the bonus for killing fast monsters, to compensate for no longer giving piety for slow monsters who are still faster than the Chei-slowed player. -------------------------------------------------------------------------------- 505c3d19dc | Nicholas Feinberg | 2023-09-15 21:11:46 -0700 Make formless jellyfish poisonous (elliptic) To clarify that rPois affects their sting. This is 100% and purely for thematic reasons, and there's a reasonable argument that their sting should be rethemed to affect rPois players. -------------------------------------------------------------------------------- d226941206 | Nicholas Feinberg | 2023-09-15 20:34:07 -0700 Make flux form prettier (fbwer) Per request, change the console glyph from radroach to shapeshifter. I hope this brings joy to both all and sundry. -------------------------------------------------------------------------------- 900534bfaf | Nicholas Feinberg | 2023-09-15 20:27:55 -0700 Continue to nerf Jeremiah Killrate too high. Too many dead players. Reduce dead player count slightly. -10% HP, -20% cast rate, -a bit of melee damage. Fix dialogue. -------------------------------------------------------------------------------- 658a57c81a | Nicholas Feinberg | 2023-09-15 20:23:21 -0700 Fix display of part-ID'd artefact jewels (Undo) Instead of "the ring of Maso {Int+6}", show "a twitching amber ring of intelligence" until you fully ID the ring. The former was misleading - it looked like a very bad randart! This change will cause other bugs and is very silly. -------------------------------------------------------------------------------- 80d2040ea8 | Nicholas Feinberg | 2023-09-15 20:04:37 -0700 Make jellyfish para twice as good (elliptic) Remove the coinflip chance for it to fail after post-AC damage. -------------------------------------------------------------------------------- 3d1776edcb | DracoOmega | 2023-09-15 19:31:28 -0700 Brom's Barrelling Boulder (L4 Earth/Conj) This spell creates a boulder in an adjacent tile to the player, which then moves in a straight line in that direction. If the boulder tries to move into a creature, it will damage it (and step into its tile if it dies in the process). If the creature survives, it will be pushed back *and so will every creature adjacent to it in a line*, effectively bowling an entire line of enemies backward. The boulder is a regular 'creature' that can be damaged, and takes self-damage whenever it hits a creature (so that it will eventually die even in the process of rolling over things). If it hits a wall, it will immediately explode into a minor sharpnel explosion. (Like iood, it also disappears if it leaves the player's LoS) The spell is fun to play with and feels significantly different than iood in its uses. (Currently level 4 Conjurations/Earth. I sort of wanted it to be pure Earth, but fear it would be too accessible at 4, and not able to fit into the starter book at 5 (and then it's competing against LRD at that level anyway....)) [Committer's note: refactored, bugfixed, and rebalanced. Very concerned that this spell is wildly overpowered, but not being castable in melee is a real restriction... seems fun to try out, at least. Also added this to the EE start book, as seemed to be intended from the commit message.] -------------------------------------------------------------------------------- 67fe2935dc | Nicholas Feinberg | 2023-09-14 17:54:18 -0700 Be more pessimistic in @ (riverfiend) Let players know when their shields and/or armour are slowing their attacks by at least 0.05, instead of rounding down at 0.1. -------------------------------------------------------------------------------- 8440623082 | Nicholas Feinberg | 2023-09-14 14:15:53 -0700 Remove unidentified decks ' description. Continuing from e45b02a626603baa917b118212daf77ed0a4bb4b (2018). -------------------------------------------------------------------------------- a522cfaf1d | Nicholas Feinberg | 2023-09-14 14:15:03 -0700 Nerf G&G and GotG Gyre, Gimble and Glaive of the Guard were quite busted. They're probably still busted, but maybe more reasonably so. -------------------------------------------------------------------------------- 1b212f6383 | Nicholas Feinberg | 2023-09-14 14:11:57 -0700 Adjust new Hexslinger spell descriptions (🐙Mike) Try to clarify what's going on with each. -------------------------------------------------------------------------------- 2dc9076e4e | Nicholas Feinberg | 2023-09-14 13:44:44 -0700 Revert "Make Inner Flame irresistable" This was wildly busted. Inner Flame was quite powerful enough before. This reverts commit a7a09d1bdf0350176ee9d0e5c956576bfa06e425. -------------------------------------------------------------------------------- fb43ecf041 | Nicholas Feinberg | 2023-09-14 11:16:43 -0700 Reduce fungal nostalgia (CanOfWorms) -------------------------------------------------------------------------------- 645550293d | hellmonk | 2023-09-14 10:14:19 -0700 feat: Reworked collapsing volcano A try at improving one of the least popular volcano maps. Closes #3215. -------------------------------------------------------------------------------- ee50f9274c | Medrano83 | 2023-09-14 10:10:24 -0700 New init file option: lua_max_memory The max memory in MB allowed for user Lua scripts is only configurable via command line options. Setting this value in the init file can be useful in platforms where the command line is not available, e.g. Android. -------------------------------------------------------------------------------- e94db9e091 | Medrano83 | 2023-09-14 10:08:22 -0700 New option use_terminal_default_colours Use the terminal's default foreground and background colors. This can be used to enable a transparent background. Closes #2534 -------------------------------------------------------------------------------- 44fb0289a7 | Nicholas Feinberg | 2023-09-14 10:06:29 -0700 Tweak auto-travel to adjacent squares Refactor to dedent, and don't bother prompting players. (Prompts are evil and only cause pain.) Merges #3250. -------------------------------------------------------------------------------- ec6b7dd1af | cureja | 2023-09-14 09:55:35 -0700 feat: Auto-travel to traversable squares next to non-traversable ones Added UI improvement that makes it so if the player selects a non-traversable target with a traversable cell adjacent, prompt before failing and allow the user to go to the closest adjacent cell instead. This feature doesn't affect controls that wouldn't have invoked the "Sorry, I don't know how to traverse that place." msg. This is intentional. While using touch controls or within the current view, it should be following the current idea to not spam the user with prompts and messages on easy misclicks. This feature could also be expanded to have an options for always saying yes to the prompt, increased radius for the check (and corresponding option for it). This feature request originated from the wiki on UI Improvements -------------------------------------------------------------------------------- 7e385a8f09 | RypoFalem | 2023-09-14 09:53:06 -0700 feat: Note when Maurice steals items/gold Maurice's sleight of hand may go unnoticed by a player; leaving a player who escaped confused by thier mysteriously light pockets. Note the appropriation in the dump/morgue to help players find thier missing loot. Having things stolen is funny so recording this also makes for more interesting morgues. -------------------------------------------------------------------------------- 72ee4cea48 | Monkooky | 2023-09-14 09:44:53 -0700 Publish a cookbook Closes #3296. -------------------------------------------------------------------------------- e0ecf0ced4 | Quinten Konyn | 2023-09-14 09:41:43 -0700 Fix "I'll leave it outside" shop message When purchasing items from a shop when you don't have sufficient inventory space, a message is supposed to appear that notifies you that the shop keeper will put the items on the ground for you. This message was not appearing because it was being immediately reset with line 1328 (update_help) before ever getting drawn. This fix changes update_help based on whether the last command caused items to be left outside. Closes #3149. [Committer's note: I share the author's concerns about whether this is the cleanest way to fix the bug, but don't have time to dig further into menu code.] -------------------------------------------------------------------------------- a7962925eb | Nicholas Feinberg | 2023-09-14 08:36:47 -0700 Take another shot at Jeremiah's description Try to resolve some disfluencies. -------------------------------------------------------------------------------- fe7b580527 | hellmonk | 2023-09-13 21:28:54 -0400 better peek status fix Accounts for delver. -------------------------------------------------------------------------------- a1453ea1fc | hellmonk | 2023-09-13 21:28:54 -0400 checkwhite -------------------------------------------------------------------------------- 12535ecb4f | hellmonk | 2023-09-13 21:28:54 -0400 don't peek on D:1 entrance -------------------------------------------------------------------------------- b8176ab9f1 | hellmonk | 2023-09-13 21:28:54 -0400 fix double portal messages (descent) (real) -------------------------------------------------------------------------------- e8284cb111 | Nicholas Feinberg | 2023-09-13 12:15:24 -0700 Fix the (elliptic) -------------------------------------------------------------------------------- b7a3900dc0 | Nicholas Feinberg | 2023-09-13 11:33:59 -0700 Init skip autofight check (Ge0ff) -------------------------------------------------------------------------------- bc345e7fcb | Kyle Rawlins | 2023-09-12 15:09:51 -0400 fix: tags.cc fixup for monster tile prop type change cb44df74be1 changed the type of this prop from short to int, which led to save compat crashes. be3b949103aec has a temporary fix at the point of the crash. This commit moves the fix to tags.cc so that it happens on load, and can be more easily kept with other save compat code. -------------------------------------------------------------------------------- 45f7035092 | Nicholas Feinberg | 2023-09-12 10:06:36 -0700 Continue removing Stuck -------------------------------------------------------------------------------- 4b8cbeaf33 | Nicholas Feinberg | 2023-09-12 09:21:28 -0700 Fix tag upgrade build? -------------------------------------------------------------------------------- be3b949103 | Nicholas Feinberg | 2023-09-12 09:03:30 -0700 Fix save compat? Very unclear to me what's going on here. (This was caused by cb44df74be13a44.) -------------------------------------------------------------------------------- 87205ac768 | Nicholas Feinberg | 2023-09-11 22:16:50 -0700 Checkwhite -------------------------------------------------------------------------------- cfa880d796 | Monkooky | 2023-09-11 22:16:25 -0700 remove unused variables -------------------------------------------------------------------------------- 7cf6fccd4b | Monkooky | 2023-09-11 22:15:54 -0700 Reallow gozag title for excessive spenders While it's not technically penance, Descent's debt mechanic is close enough to justify giving out Gozag's penance title -------------------------------------------------------------------------------- 754b9d5b1c | Nicholas Feinberg | 2023-09-11 20:13:30 -0700 Remove Stuck status Replace with -Move -Tele. -------------------------------------------------------------------------------- 1e36db7fc6 | Nicholas Feinberg | 2023-09-11 20:10:00 -0700 Describe foxfire damage in xv (elliptic) -------------------------------------------------------------------------------- 775d53a1b6 | hellmonk | 2023-09-11 23:00:31 -0400 Revert "fix double portal messages (descent)" This reverts commit 2891f507e4c8974e39899099021733ffc0b64d9f. -------------------------------------------------------------------------------- 12d0ffd41e | hellmonk | 2023-09-11 23:00:11 -0400 Revert "fix descent peeking" This reverts commit cef226ec5255e91fa15b8420ad21b111a5c2a68f. -------------------------------------------------------------------------------- cef226ec52 | hellmonk | 2023-09-11 22:40:23 -0400 fix descent peeking -------------------------------------------------------------------------------- 2891f507e4 | hellmonk | 2023-09-11 21:53:37 -0400 fix double portal messages (descent) -------------------------------------------------------------------------------- a75f04deac | Nicholas Feinberg | 2023-09-11 11:04:42 -0700 Fix force-attacks with ranged weapons (dilly) Don't warn the player "you're too injured to fight recklessly" if you're hitting ctrl-right, etc. This code sucks! -------------------------------------------------------------------------------- 983cc26eec | Nicholas Feinberg | 2023-09-11 07:45:19 -0700 Fix the build? -------------------------------------------------------------------------------- cb44df74be | Nicholas Feinberg | 2023-09-11 07:16:47 -0700 Tweak Marshlight appearance Make will-o-the-wisps' foxfires match their colouring, and tweak messaging. This should hopefully make players more scared of them. (At least in tiles, sorry!) Some argument for giving the marshlights a different name and/or a fully separate monster type. This may break save compat. -------------------------------------------------------------------------------- 01b46875f1 | Nicholas Feinberg | 2023-09-10 21:30:40 -0700 Switch out hand cannon smoke (elliptic, CarefulOdds) Smoke was a little too impactful, and also didn't fit The Lore (ha). Switch it out for magical condensation. -------------------------------------------------------------------------------- 6167ad07ae | Nicholas Feinberg | 2023-09-10 21:24:50 -0700 Maybe add a debt description (Aoae) This might not work. I forget if we need to strip off the parenthetical in Debt(x) somewhere. -------------------------------------------------------------------------------- 3c93526463 | hellmonk | 2023-09-10 12:10:00 -0400 more no_descent tagging -------------------------------------------------------------------------------- fd0b5baff3 | hellmonk | 2023-09-10 12:10:00 -0400 fix: don't stair map after using hatch -------------------------------------------------------------------------------- 33397049d7 | hellmonk | 2023-09-10 12:10:00 -0400 allow lair->slime puts Jiyva back in the game, sometimes. -------------------------------------------------------------------------------- 802b72c31d | hellmonk | 2023-09-10 12:10:00 -0400 unbrace -------------------------------------------------------------------------------- 1c7ed170bf | hellmonk | 2023-09-10 12:10:00 -0400 rework descent delver -------------------------------------------------------------------------------- 72e5dbe34a | hellmonk | 2023-09-10 12:10:00 -0400 checkwhite -------------------------------------------------------------------------------- 7577179881 | hellmonk | 2023-09-10 12:10:00 -0400 fix debt bugs -------------------------------------------------------------------------------- 3505057eba | hellmonk | 2023-09-10 12:10:00 -0400 feat: Shorten D to 12 floors (Descent) very worried this breaks something -------------------------------------------------------------------------------- 9a366f9be8 | hellmonk | 2023-09-10 12:10:00 -0400 fix: Don't show offlevel items in descent Bad gamefeel etc. -------------------------------------------------------------------------------- 9427e72f32 | Nicholas Feinberg | 2023-09-10 07:23:15 -0700 Add a no_descent tag to fountain_basement -------------------------------------------------------------------------------- c7603755dd | elliptic | 2023-09-09 15:38:16 -0400 Nerf unwielding (0.3 -> 0.5). Other weapon swaps (wielding, switching from one weapon to another) take 0.5. This is a nerf to repeatedly wielding and unwielding distortion in an emergency, but that doesn't seem like enough of a reason to have a weird duration on this action. -------------------------------------------------------------------------------- e00f3ba22f | DracoOmega | 2023-09-09 15:48:20 -0230 Prevent 'Done Exploring' when the player is fenced in by binding sigils And instead properly show 'Partly explored, can't reach some places.' Some parts of the pathfider code are a mess and needlessly hard to follow. The description for this function in particular had clearly become untrue in the 17 years since it was written, and I'm not even 100% certain this is all it is used for anymore. Maybe it could use a better name? I've tried to edit the comment to be a *bit* less deceptive, though, since it clearly affects exploration pathfinding. -------------------------------------------------------------------------------- 975ee8456d | DracoOmega | 2023-09-09 13:47:49 -0230 Prevent autotravel from moving the player onto binding sigils -------------------------------------------------------------------------------- 1f61f89ab9 | DracoOmega | 2023-09-09 13:47:48 -0230 Make Eruption lava creation slightly more consistent Given that Pyroclastic Surge (in most situations) specifically depends on the combo with Eruption, it was a little weird that Eruption could sometimes not create any lava whatsoever. Instead of an independent coinflip per floor tile in its radius, it now guarantees placing at least 1 lava tile per cast, if possible. (Still has a coinflip for the rest of them) These two commits are effectively a meaningful buff to Tyrants. If this makes them too strong, their numbers can be nudged down somewhat, but I think it's better for the player not to have invisible immunity to their spells in ways that aren't transparent at all. -------------------------------------------------------------------------------- d35ca32644 | DracoOmega | 2023-09-09 13:47:48 -0230 Fix Eruption/Upheaval's tracer thinking it was radius 2 instead of 1. Given that both Salamander Tyrants and Draconian Stormcallers come with bands, this made them unwilling to use it in an enormous number of situations where friendly fire wasn't even possible. (For instance, even in an otherwise empty room, Tyrants could never use it on a turn the player steps away from them in melee - resulting in a chase where they will NEVER stop to cast their big spell). As far as I can tell, this was broken since first implemention. -------------------------------------------------------------------------------- b042b5dc4a | DracoOmega | 2023-09-09 13:47:48 -0230 Fix Starburst only prompting for friendly fire to the right of the player More specifically, it would prompt if anything was in the first beam it traced (which is directly to the player's left). At that point, since the same tracer was reused, the fact that player_tracer didn't reset passed_target meant that it would *see* friendlies in other beam paths, but ignore them. I don't see why setting passed_target to false each time would negatively affect anything, but you never know in Crawl... Also: to avoid the player having to answer y/n once for every single direction that has friendlies, a single yes will bypass future prompts for that one cast. -------------------------------------------------------------------------------- c0fddb96e8 | DracoOmega | 2023-09-09 13:47:48 -0230 Let monspec weights of 0 actually be 0. Instead of being quietly changed to weights of 10. (This is useful for some dynamic depth-based weighting techniques) It's hard to tell if any existing vaults are affected by this, but surely one wouldn't be *relying* on a weight of 0 being actually 10, right? (I sure hope not) -------------------------------------------------------------------------------- 517f4904bd | Kate | 2023-09-09 17:13:22 +0100 Display Dimensional Bullseye to-hit bonus when aiming -------------------------------------------------------------------------------- bb17821c20 | Implojin | 2023-09-09 09:00:38 -0500 Fix a compiler warning (shadowed variable) -------------------------------------------------------------------------------- ecc126b380 | Implojin | 2023-09-09 08:20:50 -0500 Don't describe rings/amulets as talismans Closes #3291. -------------------------------------------------------------------------------- 405de50cea | RypoFalem | 2023-09-09 13:19:33 +0100 Correct a typo (credit to fbwer!) -------------------------------------------------------------------------------- a145531891 | Nicholas Feinberg | 2023-09-08 15:39:27 -0700 Remove a charmingly obsolete comment (Obsoleted by the previous commit.) -------------------------------------------------------------------------------- 1016066182 | elliptic | 2023-09-08 17:43:00 -0400 Actually suppress MUT_CLAWS in bladeform. I believe this doesn't functionally change anything, just makes it clearer to the player that blade hands means their claws are useless. -------------------------------------------------------------------------------- cfe89afef6 | Kate | 2023-09-08 12:27:57 +0100 Fix Dimensional Bullseye crashing when aimed The displayed to-hit percentage is now incorrect when aiming directly at the marked target, as the bonus isn't applied to the to-hit calculation in to_hit_pct() - this will need to be handled separately. -------------------------------------------------------------------------------- f82c85558f | Kyle Rawlins | 2023-09-07 13:34:36 -0400 fix: write milestones to SHAREDDIR, not the save directory Originally, there was no distinction between these directories, and everything went in one place. The shared directory was added primarily for servers that keep multiple crawl versions, so that e.g. all trunk games would write to the same logfile / score file. (Previous to this change, servers used symlinks to accomplish this.) I believe it was just an oversight that milestone writing wasn't changed as well, but writing to what is usually a version-specific save directory breaks milestone writing for new versions unless a symlink is produced. Trunk seeded milestones (which aren't really consumed yet) have mostly been broken since they were created, unfortunately, and no one noticed; more recently, this has affected descent mode on CAO trunk. This change will obviate the need for some of dgl-config's symlink management, but crucially, *only when all earlier trunk versions are gone*. So right now, this is mainly a descent-targeted fix. Famous last words, but as far as I'm aware, this shouldn't change the behavior of any current server setup for regular milestone writing. -------------------------------------------------------------------------------- aea1e32358 | Nicholas Feinberg | 2023-09-07 10:22:18 -0700 Move jinxbite into a fineff Simplify - don't have to worry about it killing the defender mid-attack. Also do some minor refactoring. -------------------------------------------------------------------------------- f13585253f | gammafunk | 2023-09-06 20:57:29 -0500 feat: Add a more convenient exit to a WizLab (elliptic) For Wucad Mu's Monastery, put the exit close to the starting area, since we try to do this in general for portals. Previously the player had to walk pretty far across the map to get to it and may have missed that it even existed. Tweak the layout a bit, removing a room that's no longer used and landscape trees appropriately now that the room is gone. -------------------------------------------------------------------------------- 830162fb6c | DracoOmega | 2023-09-06 22:27:22 -0230 Fix something that got broken by Dimensional Bullseye rebase earlier Not sure how this file's changes just disappeared. Makes me worried something else may have also... >.> -------------------------------------------------------------------------------- 4a7cf283bb | DracoOmega | 2023-09-06 20:33:51 -0230 Fix splitting/merging of creatures sharing some enchants it should not Monster cloning already vetoed copying ENCH_HELD and ENCH_VILE_CLUTCH, but slime creatures / starcursed masses use an entirely different code path that cannot be trivially combined. So for now, do the simple thing of just vetoing sharing a couple enchantments that probably should not be shared. -------------------------------------------------------------------------------- 9db281c723 | DracoOmega | 2023-09-06 20:33:48 -0230 Change Hexslinger starting spells The new spell list is: -Jinxbite -Sigil of Binding -Inner Flame -Cause Fear -Dimensional Bullseye Hexslinger was always troubled. Its spellbook was split across multiple schools, making them tricky to cast, and they still didn't do much without ALSO training ranged weapons heavily. Slow was often a trap and in general the archetype was clunky, without providing sufficient benefit for splitting your skills between weapons and spells. The intent of this change is to provide a smoother curve of castable spells, and more immediate value to training hexes instead of simply ignoring them in favor of being a 'worse hunter'. Jinxbite provides a little immediate power to help deal with earlygame threats with which current hexslinger often struggles significantly. Sigil of Binding provides powerful utility and can help set up Inner Flame triggers in a way that the old spellset could almost never safely do in practice. Portal Projectile was always a spell that was far better late than it was early, and so Dimensional Bullseye is now a capstone that provides even stronger long-term value, but with other easier to cast spells that let you bridge the gap to it better. Cause Fear was always good (if you could manage to survive long enough to have access to it!) and remains untouched. (Also give them 1 starting level of Fire Magic, to help just a little bit with getting Inner Flame off the ground) -------------------------------------------------------------------------------- a7a09d1bdf | DracoOmega | 2023-09-06 20:33:18 -0230 Make Inner Flame irresistable, downscale damage and clouds based on power Inner Flame was a powerful effect when everything worked, but it was often very finicky in practice. Even when the hex landed, early characters would frequently struggle to detonate the creature in a timely manner (and then either fail to get almost any value out of it OR blow themselves up by trying). I don't think that making it always land will make it too strong, since you still need other, less-reliable tools to set it off. But this commit also makes the POWER of the explosion scale with spellpower, now that success chance does not. In practice, this means that spell-based inner flame will usually do less damage and produce less clouds than before (but the former may also make it more usable early on!) but hopefully still feel better to use - especially if trying to set up chain detonations. Scroll of immolation and Guardian Golem should still result in detonation effects identical to before this commit (though its arguable that golem could also use this to downscale its effect at lower power). -------------------------------------------------------------------------------- 74abd10e9e | DracoOmega | 2023-09-06 20:32:54 -0230 Experimental spell: Jinxbite (level 2 Hexes) This spell gives a short self-buff to the player. Whenever they attack an enemy while this buff is active, if that enemy fails a will check, you inflict minor irresistable damage and draining (and some playful messages). I realize draining is commonly necromantic, but several player abilities give clear precedent for it being a source-agnostic (and the number of minor debuffs we can hand out to enemies is a little limited...) The spell can only be cast while a susceptible enemy is in sight and will expire two turns after one no longer is (even if this was just from you turning a corner to wait). Additionally, the player will suffer WILL/2 proportional to the duration of the spell when it is cast. The idea was to create a minor opportunity cost to casting the spell - earlygame the extra benefits are clearly worth it, but should fall off later where you'd be better off just shooting something. Behind the scenes, the base duration of jinxbite is fairly long, but each time it triggers additionally reduces the duration of the buff on you by 4 turns (helping to make the number of triggers you get out of the spell a little more consistent) -------------------------------------------------------------------------------- 470c21bd56 | DracoOmega | 2023-09-06 20:30:26 -0230 Replace (player) Portal Projectile with Dimensional Bullseye Portal Projectile was always in a slightly odd space. Its utility was theoretically quite high, but also fairly situational. It only did anything for one particular archetype, and despite being a low-ish level spell, usually not very useful until midgame (since it also required strong ranged attack to do anything reliable, and earlygame battles were less likely to present targets it was relevant for). Hexslinger was clearly the class that *wanted* to get the most use out of it, but didn't get very much out of pushing for it early. Dimensional Bullseye takes the idea of 'smite-targeted ranged weapons', nudges its level up to 4, and aims to make it more immediately impactful. Now you smite-target an enemy with this spell to create a 'link' beween your ranged weapon and it. And every time you perform a ranged attack aimed at any *other* target (that isn't friendly or firewood), your projectile will teleport to the marked target at the end of the attack, allowing you to hit 2 things at once (with a spellpower-based accuracy bonus against the marked target). It still consumes 1 mp per teleporting shot (this may or may not still be necessary, since it can kill at most one target per cast anyway) and now works with throwing weapons as well as launchers (the throwing ammo will land on the ground at the marked target). I've also made a small tweak to autofight that should hopefully make it disfavor attacking a marked target if an unmarked target is also attackable (so that this doesn't start asking people to manually aim in order to avoid wasting the value of the spell) -------------------------------------------------------------------------------- 574d41e441 | DracoOmega | 2023-09-06 20:30:04 -0230 Add Sigil of Binding: new level 3 Hexes spell This spell creates two sigils on the ground at random locations within 2 tiles of the caster (one at range 1 and the other at range 2). If a creature moved onto a a sigil before it expires, that enemy will be bound in place for several turns. This blocks all movement, but does *not* impair action, evasion, or otherwise make the target more stabbable. When the binding expires, that enemy will become Swift for twice as long as it was bound. Swift enemies are immune to sigils. The duration of the binding scales with spellpower, but is also reduced by the HD of the enemy. Only one cast worth of sigils can exist at a time (recasting will replace them with new ones). The caster is still bound in place if they step on their own sigil, so take care about using it in confined spaces! (Self-binding does *not* scale with spellpower, but the caster also does not become swift afterward) -------------------------------------------------------------------------------- f03d1854d5 | Kate | 2023-09-06 13:00:51 +0100 Clarify shop wording when going in to debt in Descent -------------------------------------------------------------------------------- 409c26aa35 | gammafunk | 2023-09-05 18:03:35 -0500 fix: A bounds check for a clua function (qw) The clua monster info method :can_traverse() didn't do a bounds check on its input coordinates before reading map knowledge, which lead to a crash when the coordinates were out of bounds. -------------------------------------------------------------------------------- 7ce4588941 | Nicholas Feinberg | 2023-09-05 13:50:49 -0700 Fix Kiku wrath (various) Kiku's wrath was almost entirely ineffectual. It worked via death curses, which are meant to be relevant in combat or near-combat situations, not when the player is just out and about. Address this by reworking wrath effects. There's now equal chances of heavy HP drain, heavy stat drain, or tormenting + making a loud noise. There's also a new passive which causes dead monsters to sometimes turn into hostile, no-xp zombies/simulacs/spectres - this is an experiment and might need tweaking. This should hopefully make it a bit riskier to abandon Kiku after looting its gifts. -------------------------------------------------------------------------------- 72f39bf969 | Kate | 2023-09-05 18:32:17 +0100 Prevent a dragon armour trove placing for Draconians (#3272) Unlike most other armour troves (which specifically place usable/aux armour), this trove is themed around dragon armour and so is mostly useless for Draconians. While there are a few usable items, it's already banned for Octopodes (who would be able to use the same set of items from it). Closes #3272. -------------------------------------------------------------------------------- 04e7d4291d | Kate | 2023-09-05 18:32:17 +0100 Remove a teleport closet in an arrival vault (#3275) lightli_arrival_windingriver could generate inaccessible areas - most of these were tagged no_tele_into, but one particular spot could create an inaccessible bubble that wasn't correctly tagged. Closes #3275. -------------------------------------------------------------------------------- 0fe126139e | Kate | 2023-09-05 18:32:17 +0100 Fix FoWr starting with a scroll of blinking (#3261) Scrolls weren't being treated as identified for the purposes of determining uselessness at character creation. Closes #3261. -------------------------------------------------------------------------------- f7fab4af10 | Kate | 2023-09-05 18:32:17 +0100 Allow orbs to be acquired (#3262) With a small fixed chance when selecting a shield type. Closes #3262. -------------------------------------------------------------------------------- 86692c7075 | Nicholas Feinberg | 2023-09-05 09:49:09 -0700 Tweak PoG wording slightly -------------------------------------------------------------------------------- 7d3d2d1642 | Kyle Rawlins | 2023-09-05 12:47:43 -0400 feat: give descent games their own save directory This corresponds to a distinct save slot on webtiles. -------------------------------------------------------------------------------- 96623f570b | Kate | 2023-09-05 17:24:57 +0100 Rename sourceless malevolence Explicitly describing it as "sourceless" feels inelegant - just describing it more simply as a "malevolent force" has a similar effect and leaves its source (or lack thereof!) up to the imagination. -------------------------------------------------------------------------------- 1899a4c4f0 | Kate | 2023-09-05 17:24:57 +0100 Reduce Passage of Golubria duration Apply the lowered Zot duration to the spell everywhere, and remove the other Zot special case of increased fuzziness. If it ends up being too strong on Zot:5 again, it's probably better to make changes to the spell that apply everywhere, rather than make more special-casing. -------------------------------------------------------------------------------- 72d93d2d00 | Kate | 2023-09-05 17:24:57 +0100 Add details to a Kiku gift note Weapon branding gifts already also add a separate note describing the weapon, so also add a description for Kiku's spell gift. -------------------------------------------------------------------------------- 325fb90cb2 | Kate | 2023-09-05 17:24:57 +0100 Rebrace & fix indentation -------------------------------------------------------------------------------- d2efda5d0c | Kyle Rawlins | 2023-09-05 12:21:47 -0400 doc: mention descent mode in options guide for `type` -------------------------------------------------------------------------------- 7c33a2ab94 | Kyle Rawlins | 2023-09-05 12:21:04 -0400 feat: tweak welcome messages for non-standard modes This always shows game mode explicitly with the welcome message (except in normal, hints, and tutorial mode); previously it was only apparent from this message for seeded mode. As part of this I changed the game type name for descent mode to match the main menu, which hopefully won't matter for anything (it would matter for database stuff, but aside from welcome messages, there doesn't appear to be any). -------------------------------------------------------------------------------- 08580218fa | Kyle Rawlins | 2023-09-05 12:15:34 -0400 feat: add a few welcome messages for descent mode These are mediocre, so feel free to edit or add more. But, it needed something. -------------------------------------------------------------------------------- ec73a1986a | Kyle Rawlins | 2023-09-05 09:33:53 -0400 fix: add a missing branch-data field -------------------------------------------------------------------------------- 238779eb0a | Nicholas Feinberg | 2023-09-04 11:17:45 -0700 Unbrace -------------------------------------------------------------------------------- 4df812870a | Nicholas Feinberg | 2023-09-04 11:13:00 -0700 Add Descent mode (hellmonk) Descent mode is a new alternate mode for playing Crawl, like Sprint. In Descent mode, once you go down stairs, there's no* going back up! The dungeon has been re-arranged so that you can go through it linearly; the branches have been put in a linear order. When you go down stairs, you're considered to be 'peeking' down the stairs, and can freely go back up. You can also see everything around other upstairs on the level. Once you take any action on the new level, however, *all* of the upstairs crumble forever! This is a very early stage of the mode, and many changes will be needed to help Dungeon Crawl work with this new structure. One that's already been added is 'debt'. You can buy items from shops when you don't actually have enough gold to afford them. However, once you do, you're in debt, and you can't buy anything else before you get back in the black again! Descent is intended to feel different from 'classic' Crawl, but not to be more difficult overall. Further changes will be made as necessary to help push the game's challenge level back. We're also hoping to make other changes to make choosing your path through the dungeon more exciting and dynamic. Please let us know if you see anything broken, especially crashes, unreachable level areas, etc. And have fun! -------------------------------------------------------------------------------- 566e9ce4a0 | DracoOmega | 2023-09-04 10:37:54 -0230 Have moncast.lua use is_valid_mon_spell() instead of manual blacklist Having to manually specify every invalid spell regularly caused crashes when a new spell was implemented, and the list also got out of sync with spells that *gained* monster implementations over time. I did my best to manually verify that this new version doesn't miss things that the old version caught, and I can't find any. This should be much less prone to future problems. -------------------------------------------------------------------------------- 7da72447bb | Nicholas Feinberg | 2023-09-03 22:37:53 -0700 More triumphs -------------------------------------------------------------------------------- 85aee17e53 | Nicholas Feinberg | 2023-09-03 21:51:40 -0700 Update description for '.' (OctopodesWeekly) See #3263. -------------------------------------------------------------------------------- 1b0e0212a4 | Nicholas Feinberg | 2023-09-03 21:51:24 -0700 Elaborate on ?fog/?immo descriptions (OctopodesWeekly) See #3263. -------------------------------------------------------------------------------- 6d49a2b2d0 | Nicholas Feinberg | 2023-09-03 21:51:11 -0700 Fix living crystal spell count (OctopodesWeekly) This was intended to spawn 1-2 spells per cast, but was bugged to create the same 2-3 as other tomes did. See #3263. -------------------------------------------------------------------------------- 34c7ba284f | Nicholas Feinberg | 2023-09-03 21:35:36 -0700 Retheme: hand crossbow -> hand cannon (Sastreii, hellmonk) Hand crossbows are intended to be a rare, high-tier one-handed range weapon, similar to eveningstars or double swords. However, the name and theme hasn't conveyed this well to players. People reasonably ask: wait, wasn't this a starting weapon? And: how come a hand crossbow does as much damage as a two-handed arbalest?! So, retheme them. Hand cannons are alchemical weapons that douse bolts in magical powders to send them screaming forth. (E.g. by causing the bolts to fall forward instead of down, bewitching them into a fatal attraction with their target, etc, etc.) They also belch smoke when fired, for theme reasons (this might need to be toned down) and are extra noisy. They're otherwise identical to hand crossbows. It's a bit silly, but crawl has triple swords and triple crossbows, so it seems within bounds for tone. Let's try it out! Tiles by Sastreii, original suggestion from hellmonk. -------------------------------------------------------------------------------- 39726597b9 | Nicholas Feinberg | 2023-09-02 14:07:57 -0700 Give Flux talismans a glow-up (Sastreii) New item tile. -------------------------------------------------------------------------------- 3fb8326ac6 | DracoOmega | 2023-09-02 11:51:29 -0230 Remove some unused code Left over from the period where zombies died after Animate Dead wore off. -------------------------------------------------------------------------------- 2497d51a65 | DracoOmega | 2023-09-02 11:51:29 -0230 Make wizmode super-heal heal a few more things than it currently does No promises I didn't overlook a few more of them. -------------------------------------------------------------------------------- 902f515a81 | Nicholas Feinberg | 2023-09-01 13:07:46 -0700 Fix "acrobat uselessness for tengu (Bardcore) -------------------------------------------------------------------------------- de94368793 | Nicholas Feinberg | 2023-09-01 11:13:04 -0700 Increase spectral weapon damage sharing Spectral weapons shared half the damage they take with their owner, which historically has been kind of irrelevant. Generally mechanics should be either relevant or removed; let's push toward relevance (as a minor spectral nerf) by increasing damage sharing to 70%. -------------------------------------------------------------------------------- 684573625c | Nicholas Feinberg | 2023-08-30 18:54:22 -0700 Fix tengu flight (Bardcore) -------------------------------------------------------------------------------- 7db66e5c3b | Nicholas Feinberg | 2023-08-30 15:47:03 -0700 Move tengu acrobatics and flight around (elliptic) Tengu stats have also become acrobatic, appropriately. -------------------------------------------------------------------------------- d984b8cdd8 | elliptic | 2023-08-30 18:38:56 -0400 Give tengu their acrobat + flight starting at XL 1. I actually like having big levelup moments later in the game, but XL 5 is a bit early and I think it's good to just let tengu start to experience their acrobatics at game start. I think moving the flight alone to XL 7 or later, possibly coupled with some other thematic buff, could be good. -------------------------------------------------------------------------------- c5a091b79a | Nicholas Feinberg | 2023-08-30 12:04:49 -0700 Replace tengu EV with more EV Flat or multiplicative EV boosts are pretty bland, and not very different from just giving Tengu more dex. Replace their +4 and +20% EV with innate acrobaticism, as the amulet. We can play around with dex or dodging apts as needed after this, if further balance tweaks are needed. -------------------------------------------------------------------------------- 205ce3f705 | DevJac | 2023-08-30 11:31:42 -0700 Fix typo: "It isextremely good for stabbing" An in-game description was saying "It isextremely good for stabbing". Fix the typo. -------------------------------------------------------------------------------- aa4cf243c6 | elliptic | 2023-08-30 09:36:00 -0400 Make CACT_ARMOUR count every time you receive AC-checking damage. Previously it only counted the times when your AC prevented all the damage from an attack. Counting every time AC is applied is more consistent with how other action counts work (e.g. we don't just count melee attacks that kill an enemy) and also more useful. After this change, if you stand still and let a hobgoblin attack you 100 times, your Armour/Dodge/Block action counts will sum to exactly 100. -------------------------------------------------------------------------------- b4d89c20fa | Nicholas Feinberg | 2023-08-29 22:51:35 -0700 Replace tengu speed with more EV Tengu speed has always been rather fiddly to use. A 10% speed bonus means you only gain one tile of distance from a normal-speed enemy every ten moves, which is hard to do much with. Recent changes to attacks of opportunity removed one of its few use cases. Let's leave high speed to the spriggans and double down on tengu's evasion bonus. Give them an extra +4 EV starting at XL 1, and move the second, +20% bonus to XL 7 to give it a bit more breathing room. -------------------------------------------------------------------------------- f2d5465dac | Nicholas Feinberg | 2023-08-29 12:46:21 -0700 Fix passive effects after mons death (ivysly) This code is a nightmare, but as far as I can tell, there is no case in which check_phase_hit() returns false in which we should still try to apply defender retaliation effects. (Almost all of the time, we return false because the defender is already dead, and we can't apply retaliation in that case anyway.) -------------------------------------------------------------------------------- be3e110b4e | Nicholas Feinberg | 2023-08-28 18:50:52 -0700 Fix missing dummy Mule tile -------------------------------------------------------------------------------- 42a08e578b | Nicholas Feinberg | 2023-08-28 18:49:36 -0700 Fix Death's Door expiration message -------------------------------------------------------------------------------- ab4348ca5e | elliptic | 2023-08-28 19:23:36 -0400 Give VS regen at XL 1 instead of XL 4 (Sentei). XL 4 is a bit later than Mu's XL 3 necro enhancer, but still very early. -------------------------------------------------------------------------------- c5503df394 | Nicholas Feinberg | 2023-08-28 16:11:57 -0700 Mark ?torment/?noise as dangerous (lici) Instead of bad. They aren't *strictly* useless, after all. Should probably find some way to mess with default autopickup logic so that it ignores ?torment for non-undead. -------------------------------------------------------------------------------- 5dbfedd742 | elliptic | 2023-08-28 19:06:50 -0400 Move a mummy necro enhancer even earlier. Just give them the first necro enhancer at XL 1 - getting to XL 3 often happens on D:1 anyway, so let's just let players who start a mummy and immediately look at their mutations to see how the species work see the enhancer already. -------------------------------------------------------------------------------- c9f3708fe1 | Nicholas Feinberg | 2023-08-28 15:24:03 -0700 Don't claim daggers rot (cool2) When descending stairs with tukima's weapons refusing to follow, just call them 'mindless puppets'. This code is bad! -------------------------------------------------------------------------------- e1e6cc2d06 | Nicholas Feinberg | 2023-08-28 15:06:15 -0700 Maybe fix a spider sack crash (geekosaur) -------------------------------------------------------------------------------- 38d6a14cb1 | Anabel | 2023-08-28 14:02:06 -0700 Updated tileidx_feature to prevent override of DNGN_UNKNOWN_PORTAL Gauntlet portal would be leaked by magic mapping via a scroll of magic mapping/revelations and then examining shop/portal tiles. gauntlet.des uses the dgn.til lua function, which leads to tile_env.flv(pos).feat being set when laying out the gauntlet entrance vault in a level. tile_env.flv(pos).feat can override env.map_knowledge(pos) in tileidx_feature, which is used by the describe popup to select the appropriate tile. This commit prevents the leak by adding DNGN_UNKNOWN_PORTAL as a tile exempt from being overriden. Removing the dng.tile call on the lua side seems to work as well, but I'm unsure which side effects that could have. Additionally, it makes sense to generally prevent DNGN_UNKNOWN_PORTAL from being overriden. Refs: 3225 -------------------------------------------------------------------------------- 953e295f31 | Monkooky | 2023-08-28 14:00:57 -0700 Remove Storm Form breakpoints Previously storm form would breakpoint EV bonus at integer skill. This fixes that. -------------------------------------------------------------------------------- d5cdc0191f | Nicholas Feinberg | 2023-08-28 13:48:57 -0700 Make Rupert stronger* We have three other uniques whose theme is "they're insane". Make Rupert slightly more distinctive by making him a vaguely Conan-esque strongman. Rarrghrhgrghrgh! I'm not sure why he lost the articles in his speech. I blame TF2. -------------------------------------------------------------------------------- 8e198d3294 | elliptic | 2023-08-28 16:02:48 -0400 Runify a vault (CarefulOdds). So that it isn't an autoexplore trap. -------------------------------------------------------------------------------- 9d45dd1b72 | Implojin | 2023-08-28 11:02:19 -0500 fix: Gauntlet menu hotkeys This fixes the help and (wizmode) travel menu hotkeys for Gauntlet: Previously, they were being blocked by the keybind for the CMD_MENU_CYCLE_MODE command. I'm not very familiar with the menu code, so if this breaks something, please feel free to revert. -------------------------------------------------------------------------------- b136266e7e | Implojin | 2023-08-28 09:11:19 -0500 docs: Add tavern 2.0 link to README.md -------------------------------------------------------------------------------- 1ba1ce399d | Nikolai Lavsky | 2023-08-28 16:37:07 +0300 fix: show }sack usage numbers in morgues (#3271) Previously, the call to `count_action()` at the end of `evoke_item()` was unreachable when evoking the sack of spiders. Resolves #3271. -------------------------------------------------------------------------------- 39d97e502b | elliptic | 2023-08-26 19:17:11 -0400 Move Vhi's Electric Charge to L4 (PleasingFungus). It gives too much utility all game for a L3 spell. Sorry warpers! -------------------------------------------------------------------------------- dbf204ffae | elliptic | 2023-08-26 18:22:01 -0400 Cap ghost EV at 50 instead of 60 (Lightli). It turns out that even an endgame melee character might only be 2.5% to hit a 60 EV monster... -------------------------------------------------------------------------------- 26219f789d | patrick | 2023-08-26 14:26:00 -0400 Tone down a Tartarus vault (LALALALr, gammafunk) now it's possible to get to the silent spectre and kill it -------------------------------------------------------------------------------- c6129fcb3f | Kyle Rawlins | 2023-08-26 11:42:07 -0400 build: fix macos CI Homebrew is failing to update python because of preexisting symlinks in /usr/local. I'm not sure why we suddenly started seeing this (the only potentially relevant change I'm seeing recently is just a homebrew version bump), but the issue is: https://github.com/actions/setup-python/issues/577 I pulled this specific fix from (found via that issue, MIT license): https://github.com/aya-rs/aya/commit/7803db22a062be3cdce760cd6ff7e54b121117ed -------------------------------------------------------------------------------- e1c0e020e0 | DracoOmega | 2023-08-25 14:08:58 -0700 Constify check_willpower I can't see a reason this COULDN'T be const, but maybe it's my lack of C++ knowledge showing? -------------------------------------------------------------------------------- 80654f93e6 | DracoOmega | 2023-08-25 14:08:52 -0700 Remove a seemingly unused function declaration -------------------------------------------------------------------------------- 0682a58b2d | DracoOmega | 2023-08-25 14:08:37 -0700 Fix a crash if a monster pursues you and dies to barbs in the same move -------------------------------------------------------------------------------- 82435fa1af | elliptic | 2023-08-25 10:53:19 -0400 Give shapeshifter a little more int at start (acrobat). I think this is a slight nerf and many shapeshifters will still use heavy armour for much of the early game, but maybe this int will make hybridizing a bit in later forms that can't use heavy armour more appealing as an option. -------------------------------------------------------------------------------- 766dd24fdf | Kate | 2023-08-25 13:27:28 +0100 Fix a crash on reflected missile kills -------------------------------------------------------------------------------- 285b096dc4 | Nicholas Feinberg | 2023-08-24 22:19:59 -0700 Scale sack of spiders count with evo skill Make it stronger in the late game and distinguish it further from box of beasts. -------------------------------------------------------------------------------- 23e5404fd7 | Nicholas Feinberg | 2023-08-24 22:07:14 -0700 Simplify sack of spiders' webs Don't scale web chance with distance. Enemies' chance to evade is enough randomness. -------------------------------------------------------------------------------- 16e5da7f86 | Nicholas Feinberg | 2023-08-24 22:05:35 -0700 Mention Mule's noisiness -------------------------------------------------------------------------------- bcca1bc016 | Nicholas Feinberg | 2023-08-24 21:52:37 -0700 New unrand: Mule Preview of the upcoming handcannon theme. Tiles are, obviously, placeholder. Also it should really fire bullets. -------------------------------------------------------------------------------- d65175cf8b | elliptic | 2023-08-24 10:21:04 -0400 Fix language in deathform status (Ge0ff). -------------------------------------------------------------------------------- 8143ab4f1d | elliptic | 2023-08-23 23:26:12 -0400 Random-round evo skill for sack of spiders. -------------------------------------------------------------------------------- c9c7e45f3f | Kyle Rawlins | 2023-08-23 16:33:11 -0400 fix: prevent unobtainable misc items altogether This is a lot of engineering for exactly one vault, but failing to place a misc item as the superb item in `grunt_nemelex_the_gamble` makes the vault altogether pointless in most cases. So, prevent a superb item from having misc type if it is flagged as unobtainable. (The other case to worry about is unrands, but I believe these should reroll fine -- the object base type doesn't get rerolled.) -------------------------------------------------------------------------------- 18b96920e2 | Nicholas Feinberg | 2023-08-23 10:17:56 -0700 Make forms scale below min skill Don't give the min skill AC, UC, EV etc bonuses for forms until you actually reach min skill. Scale them downward linearly below min skill, following the same formula as the scaling between min and max skill. -------------------------------------------------------------------------------- 92e331aaff | Nicholas Feinberg | 2023-08-23 10:07:50 -0700 Fix phantom status icons (Ge0ff) 05c506a3cf9 introduced a pernicious webtiles bug where status icons would persist across level transitions in very strange ways. This should, hopefully, fix it. All credit to Ge0ff for the investigation and the fix. -------------------------------------------------------------------------------- 8072aed512 | Nicholas Feinberg | 2023-08-23 10:06:37 -0700 Remove talisman offhand descriptions (acrobat) Inconsistent to mention these only for dragon/blade and not for other forms. -------------------------------------------------------------------------------- 95e8b0dc1a | Kyle Rawlins | 2023-08-23 11:12:52 -0400 fix: prevent infinite loops in `dgn_place_item` Previously, if `_apply_item_props` deterministically aborted, this loop would not terminate. After 5a299da95614 this could trigger on `grunt_nemelex_the_gamble`. This commit adds a loop breaking condition based on placement attempts; it's a bit heuristic but fixes this case, and I don't see how it'd cause other problems. (It's unclear to me if there was another way to trip the infinite looping, maybe not?) -------------------------------------------------------------------------------- d1cbd99268 | patrick | 2023-08-22 13:20:06 -0400 Fix up spacing, punctuation, etc. in a quote HAAAARRRRK -------------------------------------------------------------------------------- b34f6ce469 | Nicholas Feinberg | 2023-08-22 09:50:57 -0700 Remove unused AOOP code Continuing from 4209ae197b53c91ba4e1345fe5cd51a30251e854. -------------------------------------------------------------------------------- 7ca08c1ff9 | Nicholas Feinberg | 2023-08-21 22:11:23 -0700 Revert "fix: don't meph cloud rpois players" This reverts commit 0c796e0fe89ce0466a06fc39c39814d0b603bde1. -------------------------------------------------------------------------------- 0c796e0fe8 | hellmonk | 2023-08-21 21:14:24 -0700 fix: don't meph cloud rpois players As far as I can tell this no longer deals even nominal amounts of damage, so it's a waste of a turn. -------------------------------------------------------------------------------- fa8c8b3ea2 | Nicholas Feinberg | 2023-08-21 21:12:02 -0700 Add a comment -------------------------------------------------------------------------------- e7748cc39b | Nicholas Feinberg | 2023-08-21 17:05:33 -0700 Shift shapeshifting apts +1 It felt very bad to have the default apt for the skill be -2. Shift it to -1, and adjust talisman skill levels such that each talisman costs roughly the same XP to get to min and max skill on. It now takes ~1.5x the XP to max out the top-level forms, instead of ~1.8x. Setting the apt to a default of +0 would mean taking only about ~1.25x the XP of getting a top-level form online to max it out; that feels like too tight a squeeze to be a meaningful strategic choice. Nerf Storm Form somewhat, since it's now easier to max out. Death Form didn't really scale with power anyway (though we should fix that!), so don't nerf it. -------------------------------------------------------------------------------- c85dc1c48c | Nicholas Feinberg | 2023-08-21 14:40:13 -0700 Tweak olgreb code -------------------------------------------------------------------------------- 2b87e4e8af | Nicholas Feinberg | 2023-08-21 14:37:03 -0700 Fix: no Olgreb/Dispater under Sac Evo (elliptic) No evoking without evocations! -------------------------------------------------------------------------------- 8c0b59315c | Nicholas Feinberg | 2023-08-21 14:07:24 -0700 Fix: don't require dispersal to do damage to trigger This code was deeply weird. It'd check whether the throw did damage, and then set the damage to 0 later regardless (since darts don't do impact damage, except when they do). Anyway, let's simplify. -------------------------------------------------------------------------------- 515432b62a | Kate | 2023-08-21 20:28:49 +0100 Shorten draining brand description With the full details of its damage/probability now being shown in the description, it's too long to justify also still having the extra flavour line. -------------------------------------------------------------------------------- 6b635dca52 | Nicholas Feinberg | 2023-08-20 23:14:49 -0700 Mention insubstantial effects in storm desc -------------------------------------------------------------------------------- 7bf6ffcfed | Nicholas Feinberg | 2023-08-20 23:06:22 -0700 Describe form aux attacks Badly. Also, dragon form has far far too many. -------------------------------------------------------------------------------- 3901247f13 | Nicholas Feinberg | 2023-08-20 23:06:22 -0700 Remove hydra form 's old constant. ;_; -------------------------------------------------------------------------------- 1819384c72 | Nicholas Feinberg | 2023-08-20 23:06:22 -0700 Add more details about maw aux -------------------------------------------------------------------------------- 7b48fd681b | Nicholas Feinberg | 2023-08-20 23:06:22 -0700 Describe form size in talisman descriptions -------------------------------------------------------------------------------- 06da2885e2 | Nicholas Feinberg | 2023-08-20 23:06:22 -0700 Mention statue form's rTorm -------------------------------------------------------------------------------- 8e0283293c | elliptic | 2023-08-21 00:03:57 -0400 Nerf Gyre and Gimble (+12 -> +10). They've been incredibly good ever since the qblade buff. -------------------------------------------------------------------------------- 29856e7841 | elliptic | 2023-08-20 23:50:37 -0400 Fix Felids not getting an extra life at XL 4. -------------------------------------------------------------------------------- 894f4ffcd3 | Nicholas Feinberg | 2023-08-20 17:41:16 -0700 Fix: handle dead pursuers..? Probably only living monsters should launch opportunity attacks. -------------------------------------------------------------------------------- 5187491046 | Nicholas Feinberg | 2023-08-20 17:36:24 -0700 Improve felid extra lives (elliptic) It's good for species to have their cool gimmick (extra lives) show up ASAP, and felids just had a cruel setback with recent changes to opportunity attacks. So, let's give them an extra life at XL 1, and make them not lose XLs on death. -------------------------------------------------------------------------------- 62dffe198b | Nicholas Feinberg | 2023-08-20 14:50:44 -0700 Simplify Siphon Essence Death Form's Siphon Essence was originally intended to provide an exciting payoff for using the form in extended, where many enemies are nonliving and hence immune to torment. However, Death Form's resistances are already very exciting in extended, and it was surprising and counterintuitive to players that Siphon Essence's torment effect applied to non-tormentable foes. Make the effect match Torment by only applying to living foes. For now, the melee 'blight' Slow and Weak status effects can still apply to non-nonliving enemies, but that may change. -------------------------------------------------------------------------------- 34a2ce5c55 | Nicholas Feinberg | 2023-08-20 14:24:07 -0700 Clean up potential pursuers on leaving levels This might fix a shaft crash, maybe. -------------------------------------------------------------------------------- b6c6aa6955 | Nicholas Feinberg | 2023-08-20 14:24:07 -0700 Simplify pursuit attacks further (elliptic) Ban monsters from launching attacks of opportunity on any but their first move, if they take more than one move between the player's turns. This could come up e.g. when moving away from an adder that's more than two spaces distant from the player. -------------------------------------------------------------------------------- 7c2b8d6e60 | elliptic | 2023-08-20 15:18:57 -0400 Simplify MUT_READ_SAFETY and MUT_DRINK_SAFETY. Previously they used a complicated formula (which was also bugged) taking the player's HP and the damage dealt into account to determine the chance of triggering. Instead, just use a flat 1% chance on any non-poison damage, matching the *Slow randart property. -------------------------------------------------------------------------------- 831eee08f1 | Nicholas Feinberg | 2023-08-19 15:13:28 -0700 Remove an outdated comment (Ge0ff) -------------------------------------------------------------------------------- 4209ae197b | Nicholas Feinberg | 2023-08-19 14:27:02 -0700 Simplify attacks of opportunity (elliptic) Using new pursuit tech, shift the time that enemies launch opportunity attacks from when the *player* moves to when an *enemy* follows the player. This has several advantages: - It means that monsters who don't actually pursue players won't get attacks of opportunity. That includes monsters which cast a spell, fired a ranged weapon, or were just blocked by other monsters instead of moving. - Removes special cases involving actions that were previously disabled for attacks of opportunity, e.g. broodmothers' spider spawning effect. - Removes the need to memorize monster vs player speeds to figure out whether attacks of opportunity could trigger. They'll now trigger whenever the monster manages to pursue. - Removes the counterintuitive behavior by which monsters with reaching weapons (i.e. polearms) couldn't launch attacks from afar. They'll now do so if and only if they move to pursue - that is, on the turn the player moves away, they'll normally stand pat and launch a normal attack instead. - In general, reduces complexity both for players and developers. As always, this is an experiment. Let's try it out. :) -------------------------------------------------------------------------------- 01f9145181 | Nicholas Feinberg | 2023-08-19 09:11:39 -0700 Fix hit% (acrobat, rypofalem, elliptic, implojin) Remove duplication in halo calculation. -------------------------------------------------------------------------------- 7edc133841 | Nicholas Feinberg | 2023-08-19 09:04:13 -0700 Eustachio triumphs -------------------------------------------------------------------------------- eb5f7b07fe | Kate | 2023-08-19 13:12:46 +0100 Add messaging when the reaping brand activates -------------------------------------------------------------------------------- 02b9bc310a | Kate | 2023-08-19 13:09:48 +0100 Fix a typo One that's been around since art-data.txt was created in 2009! -------------------------------------------------------------------------------- 8a5a4361df | Nicholas Feinberg | 2023-08-18 17:54:04 -0700 Increase Jeremiah thematics further (elliptic) Ban orb of wrath (too mean) and orb of light (too goody-two-shoes). -------------------------------------------------------------------------------- 02207c7b4b | Nicholas Feinberg | 2023-08-18 17:47:05 -0700 Make Jeremiah's gear more thematic Instead of a glaive, give them a trident and a spooky magical orb. What secrets lurk within? Perhaps it's occasionally an exciting reward for the player? This is intended as a nerf, since tridents usually do less damage than glaives. A guaranteed glaive is really too much to give out in mid-D, anyway. -------------------------------------------------------------------------------- 14bffd4ff3 | elliptic | 2023-08-18 17:42:14 -0400 Make archmagi randarts more common. They were super rare since just being a randart robe is already quite specific. -------------------------------------------------------------------------------- 5e7861486d | Nicholas Feinberg | 2023-08-18 13:52:50 -0700 Continue an unbroken string of triumphs h/t hellmonk re: Polyphemus. -------------------------------------------------------------------------------- bc2f96ccf4 | Nicholas Feinberg | 2023-08-18 13:52:40 -0700 Fix some Roxanne dialogue Continuing from 18800231877e12caceb48c2f929f842d55aac934. -------------------------------------------------------------------------------- 3b62d3f2bc | Kate | 2023-08-18 21:31:53 +0100 Checkwhite -------------------------------------------------------------------------------- 7517d20e71 | elliptic | 2023-08-18 15:38:47 -0400 Tweak opportunity attack energy. Don't randomize movement energy for a monster that just made an opportunity attack, to avoid a situation in which the player moves away from a monster and gets attacked twice that turn. Also, add a 50% chance that an opportunity attack uses 1 energy, to be kinder to a player when an orc warrior or similar catches up via random movement energy. -------------------------------------------------------------------------------- e31d1ec5a1 | elliptic | 2023-08-18 15:38:47 -0400 Revert "Remove attacks of opportunity" This reverts commit 78364c384948e7431266fbb9e381659bb4dd29ce. -------------------------------------------------------------------------------- e438bbe35c | elliptic | 2023-08-18 15:38:47 -0400 The return of randomized energy (when pursuing the player). Randomized energy (essentially monsters having a random choice between 0.9/1.0/1.1 move delay) was removed in c2095565. It had two main problems - the first was that it felt surprising and 'unfair' when an ogre two steps away suddenly moved and hit the player on the same turn, and the second was that it incentivized running away from an adjacent monster until random energy made a space between the two of you (usually only taking 0-2 hits in the process). This commit re-implements randomized energy, but only when the monster is pursuing the player (replacing the experimental swiftness on pursuit). This hopefully addresses the first issue with randomized energy, since an ogre will only be able to move + attack if the player was adjacent to it and just moved away - essentially an attack of opportunity. The second issue will be addressed by bringing back attacks of opportunity in a separate commit, making running away from an adjacent monster far more deadly. The hope is that randomized energy will help smooth out some of the sharp edges on attacks of opportunity - we'll try it out. -------------------------------------------------------------------------------- 967258e92b | Kate | 2023-08-18 20:19:14 +0100 Remove some outdated language Use primary/replica instead of master/slave for synchronized Lua markers, and update language usage in a few other cases. -------------------------------------------------------------------------------- eb4e1b2031 | Nicholas Feinberg | 2023-08-18 11:01:54 -0700 Ongoing triumphs -------------------------------------------------------------------------------- 5089dd5b6d | Neil Moore | 2023-08-18 12:53:39 -0400 Fix a stray "insane" (ghostwilliz) Using autofight while a neutral monster was visible would result in: autofight.lua:305: bad argument #1 to 'is' (no such moninf flag: 'insane') -------------------------------------------------------------------------------- 23c5e8eb7f | DracoOmega | 2023-08-18 12:46:12 -0230 Properly warn the player when aiming explosions at empty tiles near allies Proper stop attack prompts were only being given if the explosion effect was aimed directly at a creature and NOT if you were aiming at an empty space near that creature. This seems to have been a result of the beam code detecting that we would only hit our ally AFTER the 'target' we were aiming at, and then aiming at the ground at that spot and assuming that was good enough to spare them. (hint: it was not) So now, let's just disable suppressing prompts if the source of the damage is an explosion. -------------------------------------------------------------------------------- d85dfe4a71 | Kate | 2023-08-18 13:00:17 +0100 Don't let perma-confused monsters pursue the player Such as butterflies. -------------------------------------------------------------------------------- 0c08979aea | Kate | 2023-08-18 12:58:11 +0100 Fix conjugation -------------------------------------------------------------------------------- 5a299da956 | Kate | 2023-08-18 12:16:42 +0100 Don't generate "unobtainable" unrands/XP evokers The "unobtainable" tag is only used for nemelex_the_gamble (and should generally be used very sparingly) - portal vaults (and Gauntlets in particular) are definitely still fair game for unrands and XP evokers. -------------------------------------------------------------------------------- 69dc8cc98e | Nicholas Feinberg | 2023-08-17 22:49:46 -0700 A few more triumphs -------------------------------------------------------------------------------- d01e783392 | Nicholas Feinberg | 2023-08-17 18:42:56 -0700 Add more triumphs -------------------------------------------------------------------------------- dcce639ab2 | Nicholas Feinberg | 2023-08-17 18:18:35 -0700 Fix the pronouns of speed -------------------------------------------------------------------------------- 3702cae195 | Nicholas Feinberg | 2023-08-17 18:15:14 -0700 Refactor death messages Hee hee hee. More to come, I think. -------------------------------------------------------------------------------- cbebf7f143 | Nicholas Feinberg | 2023-08-17 16:17:04 -0700 Fix a CRITICAL anaconda bug (Oneirical) -------------------------------------------------------------------------------- 7ea453304b | Nicholas Feinberg | 2023-08-17 10:19:49 -0700 Make Maw Form healing trigger more often This is just a small buff to make maw form feel better, based on playtest feedback. -------------------------------------------------------------------------------- 791418dc5d | Nicholas Feinberg | 2023-08-17 10:17:23 -0700 Adjust Maw Form aux To make it feel a bit more consistent, increase trigger chance to 75% (was 50%) and decrease damage from min/max 16/27 to 12/20. This should make it a bit better against 0 AC enemies and a bit worse against higher AC enemies, hopefully breaking even. -------------------------------------------------------------------------------- 881be02e36 | Nicholas Feinberg | 2023-08-17 10:14:01 -0700 Fix draconian dragon form AC Accidentally got a +6 when the talisman change was made. -------------------------------------------------------------------------------- 6656212320 | Nicholas Feinberg | 2023-08-17 10:07:25 -0700 Feat: hot pursuit (elliptic) Not to be confused with the similar-sounding apparel beloved of certain players, 'hot pursuit' is a new mechanic to encourage fun lines of play. A Brief History --------------- When in a very nasty spot (low on HP and next to a tough foe), players have historically been able to 'pillar-dance', wasting time (both the game's and theirs) to get time to heal. This is both unfun to do and narratively unsatisfying. When in a tight spot, players should pull out a cool trick (a spell, god ability or consumable), fight, and/or die! We first tried to fix this by adding 'random energy', which unfortunately fixed nothing. Then we tried 'attacks of opportunity', letting monsters attack when the player moved away. These worked somewhat, but had several disadvantages, including: - They were very complex. The list of special cases for which monsters could attack the player and when was very long, and it was hard for players to track. - They were very binary. If a monster was next to the player, danger was vastly higher than if they were 2 tiles away. If a monster was as fast as the player, danger was vastly higher than if they were just a bit slower. - They had odd and unintuitive interactions with polearms (which didn't launch reaching attacks of opportunity). - They were frustrating. Players felt profoundly unhappy when they were killed by attacks of opportunity - it felt like the game becoming more hostile. So, let's try something a bit gentler Hot Pursuit ----------- When the player moves away from a monster, if that monster then moves toward the player, they have a one in ten chance of putting on a 'burst of speed', moving ~25% faster (move delay 0.8) for the next ~20ish turns. This speed bonus affects the move that triggered it, so players walking away from an adjacent yak have a 2% chance of getting a surprise bap from them. The intent is to again discourage 'pillar-dancing' and other fiddly stalling tactics (e.g. running across the entire level to get to stairs) in a 'softer', fuzzier way, without the hard binaries of attacks of opportunity. Wu Jian martial manuevers and Serpent's Lash again give immunity to this effect. Let's try it out! -------------------------------------------------------------------------------- 78364c3849 | Nicholas Feinberg | 2023-08-17 10:07:25 -0700 Remove attacks of opportunity Experimenting with a new approach to discourage pillar-dancing. Reverts d469af4107d0171314512d0e591032a5fe31303c. -------------------------------------------------------------------------------- 3b7de120b3 | Implojin | 2023-08-16 19:31:20 -0500 feat: Suppress rampage with WJC By popular request, this commit suppresses rampage and rollpage while worshipping WJC, thus allowing WJC's martial attacks to occur instead of rampaging. -------------------------------------------------------------------------------- ea3e70a90f | Nicholas Feinberg | 2023-08-16 15:26:58 -0700 Tweak more early-game monster descriptions TY to rypofalem for the typo spot. -------------------------------------------------------------------------------- 758d19d7b2 | Nicholas Feinberg | 2023-08-16 15:16:12 -0700 Fix: keep cutting Blade's Wiz penalty (Namsan) Continuing from 08d4ee96a19852dd389d79ca649037850834e347. -------------------------------------------------------------------------------- ccde6106b6 | Nicholas Feinberg | 2023-08-16 15:09:25 -0700 Remove some dubious sprints Remove Maurice's sprint, since it's very unclear why he had it (or why he has anything he does. Rework someday!) Remove alligators' sprint, since it wasn't very interesting - they cast it often enough that you couldn't really play around it, they were just going to be fast a bunch of the time. Upgrade them to base 12 speed (a bit slower on land then they were when swift) and cut their HP and damage slightly to compensate. -------------------------------------------------------------------------------- d1292be0fd | Nicholas Feinberg | 2023-08-16 14:59:45 -0700 Remove the Swiftness interaction with water Swiftness not working in water was a deeply antique (pre-DCSS) mechanic which was undocumented and unintuitive - why would you stop being swift when walking in shallow water? It's not valuable for balance or excitingly evocative, so cut it. -------------------------------------------------------------------------------- 03b8d61ab2 | Nicholas Feinberg | 2023-08-16 14:51:00 -0700 Fix: make frenzy references consistent We sometimes called it 'frenzied', sometimes 'insane', and sometimes just a 'mindless rage'. Let's try to be mostly consistent. Also fix a few other insane references. -------------------------------------------------------------------------------- c65fdffd30 | Nicholas Feinberg | 2023-08-16 14:35:21 -0700 Mostly remove obscure berserk shouting When berserk or frenzied monsters walked around, they'd continuously make shout-level noise (with no corresponding message). This only occurred on movement, not on waiting, attacks, etc. Very silly! Instead, frenzied monsters keep a chance to shout, and berserk monsters keep their still purely-cosmetic "the foo rages" line. It's iconic. I can't cut it. -------------------------------------------------------------------------------- 6e16503903 | Nicholas Feinberg | 2023-08-15 22:22:47 -0700 Fix: make |earth swing half as often (SentientSupper) Turns out that quick blades and staves of earth are different things. -------------------------------------------------------------------------------- 2b9f58fa2b | Nicholas Feinberg | 2023-08-15 21:14:56 -0700 The Amazing Shrinking Frog Continue shrinking Jeremiah's HP to a more depth-appropriate value. -------------------------------------------------------------------------------- c02eecb565 | Nicholas Feinberg | 2023-08-15 21:06:50 -0700 Break Chain Lightning out of its frame A quick hack-job to imitate other L9 spells. -------------------------------------------------------------------------------- bdf9f2fc11 | Nicholas Feinberg | 2023-08-15 20:52:38 -0700 Shrink Jeremiah Jordan's jelly jar J-frog is proving a little more lethal than intended. Let's try pulling a lever a bit downward to encourage reasonable players to actually tangle with 'em. -------------------------------------------------------------------------------- a1bd9b08d9 | patrick | 2023-08-15 20:52:15 -0400 Add a new quote (Floobenga) -------------------------------------------------------------------------------- aec1239e71 | Nicholas Feinberg | 2023-08-15 17:19:04 -0700 Fix: don't let death-form grow roots (acrobat) Undead players aren't supposed to be able to transform. They *are* allowed to leave death form and enter talisman forms, for convenience, but they shouldn't be able to become trees. Even if Gozag offers! I considered banning lig from potpet when in death form, but that seemed inconsistent with other effects that are presently unhelpful. Sometimes you get a potion you didn't want! -------------------------------------------------------------------------------- 2fa3788449 | Nicholas Feinberg | 2023-08-15 17:11:31 -0700 Remove support for bad jewellery Negative enchantment rings have been gone for years. Let me know if I forgot some. -------------------------------------------------------------------------------- 7ef6b13b4f | Nicholas Feinberg | 2023-08-15 16:22:35 -0700 Remove the dangerous item autopickup exception (Lici) Most of these (eg lig, attraction...) are reasonably useful these days. ?torment is probably the only exception (barring treeform TRJ strategies). Move ?torment from dangerous to bad to make this rule more useful. -------------------------------------------------------------------------------- f98fd537a9 | Nicholas Feinberg | 2023-08-15 14:11:36 -0700 Remove Donald's hat of reflection (acrobat) Use Implojin's new 'unusual monster highlight' to call out monsters with reflection (amulets, shields, Warlock's Mirrors) for both tiles and console players. To reduce visual noise, cut the corresponding icon. -------------------------------------------------------------------------------- a7f35e1160 | Nicholas Feinberg | 2023-08-15 11:34:47 -0700 Give draconians visible maws (Midn8) -------------------------------------------------------------------------------- 463418d2c3 | Nicholas Feinberg | 2023-08-15 11:33:26 -0700 Fix Beast Form slay display (CarefulOdds) -------------------------------------------------------------------------------- c1c765faf9 | Nicholas Feinberg | 2023-08-15 11:27:24 -0700 New Jeremiah tile (Sastreii) This is silly! -------------------------------------------------------------------------------- bf1d6132cb | Nicholas Feinberg | 2023-08-15 11:27:24 -0700 New Beast Form tile (Sastreii) -------------------------------------------------------------------------------- ceb718ecc6 | Kate | 2023-08-15 00:06:32 +0100 Fix a crash with confused drowned souls Confused monsters can get an attack on the player and then another attack on themselves in the same action. If a drowned soul did this, it would self-destruct on the first attack, but then try to make the second attack against themselves before having properly been reset and counted as dead. Fix by cleaning up dead attacking monsters at the end of a melee attack. -------------------------------------------------------------------------------- eaa9c7a2c0 | Nikolai Lavsky | 2023-08-14 15:21:12 +0300 docs: fix talismans on the ?? screen Use `percent` instead of the `%` item glyph, to prevent `insert_commands()` from replacing it with `CMD_EVOKE`. -------------------------------------------------------------------------------- dc2a67831c | Kate | 2023-08-13 21:04:23 +0100 Fix a qw ability name -------------------------------------------------------------------------------- e126be3fee | Kate | 2023-08-13 19:58:50 +0100 Remove a hardcoded number -------------------------------------------------------------------------------- c0d178777e | Kate | 2023-08-13 19:58:50 +0100 Rebrace -------------------------------------------------------------------------------- 27a3252745 | Kate | 2023-08-13 19:58:03 +0100 Adjust some cloning handling Fix there being no message for chaos clones, don't grant experience for clones, and allow chaos-cloning monsters with artefacts now that they'll always be marked as summoned. Also prevent cloning tentacles and conjured monsters. -------------------------------------------------------------------------------- bc85326fa9 | elliptic | 2023-08-12 21:11:21 -0400 Remove the final instance of a speed 11 monster. By making sphinx speed 12. In partial compensation, reduce sphinx casting rate by a similar amount. They are still going to be a bit more dangerous now. -------------------------------------------------------------------------------- 029fa849c0 | Nicholas Feinberg | 2023-08-12 16:31:22 -0700 Mention glow in flux description (Ge0ff) -------------------------------------------------------------------------------- a3e2962e35 | gammafunk | 2023-08-12 16:44:18 -0500 feat: Tweak a Shoals vault (elliptic) For nicolae_shoals_mertower, rework the design a bit so it's less likely to be an autoexplore trap into a big chamber of top end merfolk. Have the monsters be patrolling (appropriate for a tower) and put windows in the tower as well. Add three pieces of loot, one of which has a 50% chance to be a tower shield (this is a pun). For the inner monsters, thin them out so we only place about 3.5 high end merfolk on average, with javelineers made less common. The average number of monsters placed is still about 7. Also remove the tower's inner water. The original intent was for the tower to be raised above the tides, but not so much that it was dry. However this is a bit awkward thematically with the outside dry land, and the vault is plenty hard without guaranteed water. -------------------------------------------------------------------------------- 08d4ee96a1 | Nicholas Feinberg | 2023-08-12 09:20:26 -0700 Remove Blade's Wiz penalty (various) Somewhat superfluous now, and inconsistent lore-wise with other, stranger forms. -------------------------------------------------------------------------------- aab96319b4 | Kate | 2023-08-12 15:04:41 +0100 Fix regret_index_temple_of_mockery (#2667) It was placing random monsters before the mocking monster could be placed, since there was no monster defined for the 1 glyph. Closes #2667. -------------------------------------------------------------------------------- ba14c20cce | Kate | 2023-08-12 14:37:20 +0100 Fix some missing monster cast messages Fixes #2703. -------------------------------------------------------------------------------- 28f74ba3e5 | elliptic | 2023-08-11 20:16:46 -0400 Buff lightning rod's price (Lici). -------------------------------------------------------------------------------- 3015b455e8 | Kate | 2023-08-12 00:54:46 +0100 Remove Ashenzari's passive mapping outside LOS In favour of the newly (re-)implemented LOS-radius perfect mapping at 4*, remove the wider-radius passive mapping that scaled with piety. Passive mapping generally has interface issues, encouraging players to repeatedly re-open the level map while moving around to check distant mapped areas. -------------------------------------------------------------------------------- cacbf3a157 | Kate | 2023-08-11 23:49:26 +0100 Revert "Let monsters know if the player has clarity (Lici)" Having monsters waste their time with useless spells is intended in some cases - gaining certain resistances shouldn't make monsters more dangerous by changing their AI and causing them to only cast spells that the player is vulnerable to. There's very little consistency with this across different monster spells, but in various cases the intended behaviour is for them not to cast spells that the player is "obviously" (by virtue of species etc) immune to, but to still cast them if the player has gained resistance/immunity in some other way. This reverts commit 993fcd7dae2e2a45acc3f264f09929cf83240ccc. -------------------------------------------------------------------------------- 0240bd9e67 | Nicholas Feinberg | 2023-08-11 15:23:13 -0700 Reduce out-of-branch spawns in Snake (elliptic) Halve the number of quicksilver dragons in Snake rune vaults. -------------------------------------------------------------------------------- 0aeb0967f1 | Kate | 2023-08-11 22:16:59 +0100 Remove Gozag's passive gold detection It was a cute minor flavour effect, but had weird consequences in practice - granting Gozag a pseudo-mapping ability that was particularly spoilery around vaults that placed lots of gold. Gold is still moved to the top of item piles, to keep some of the flavour and make gold still stand out. -------------------------------------------------------------------------------- 6b883973aa | Kate | 2023-08-11 22:16:59 +0100 Replace some numbers with constants -------------------------------------------------------------------------------- 7fa58fedfe | Kate | 2023-08-11 22:16:58 +0100 Give Ashenzari perfect mapping within LOS (fbwer, elliptic) As a substitute for the now-removed astral vision, but without the implementation issues it previously had. Enabled at 4*. -------------------------------------------------------------------------------- 993fcd7dae | Kate | 2023-08-11 22:16:58 +0100 Let monsters know if the player has clarity (Lici) Fixes monsters repeatedly trying to cast Cause Fear against immune players. -------------------------------------------------------------------------------- 2a164cf6a2 | Nicholas Feinberg | 2023-08-11 11:27:15 -0700 Reduce Jeremiah smite rate Make it a bit closer to other early-mid D smiters. Also make the spell rates equal, which will make hellmonk happy. -------------------------------------------------------------------------------- 071a6c1ffa | elliptic | 2023-08-10 13:07:06 -0400 Remove rC+ from storm dragons (acrobat). Unclear why they have it, storm form doesn't even have rC+ and it is an actual storm. Plenty of other dragons and late game undead have rC+. -------------------------------------------------------------------------------- c2a4ee3747 | Nicholas Feinberg | 2023-08-10 07:24:19 -0700 Make Jeremiah only butterfly in sight (acrobat) No spamming butterflies when out of LOS. Silly and counterproductive. -------------------------------------------------------------------------------- c7390f8997 | Nicholas Feinberg | 2023-08-09 20:53:40 -0700 Reduce high duration summons (hellmonk, Buttons) To discourage repeatedly recasting summons out of combat, decrease the max durations of call canine familiar, call imp, summon ice beast, monstrous menagerie, and spellforged servitor. We may need to nerf monster abjuration later, but I'm skeptical. -------------------------------------------------------------------------------- e4037352c6 | patrick | 2023-08-09 22:27:04 -0400 Rescue an arrival vault from oblivion and add it orjb1 submitted a PR with an arrival vault in it: https://github.com/crawl/crawl/pull/3246 but after initial feedback they seem to have deleted it. I liked the vault, though, and yoinked it from oblivion. I made a few changes to get it working right, but other than that, I kept it mostly as it was submitted. (I didn't fix the asymmetry of the empty floor spaces around the edges, even though I mentioned it on the PR; I ended up liking how it interacted with the rest of the level.) -------------------------------------------------------------------------------- df67acd773 | Nicholas Feinberg | 2023-08-09 19:06:18 -0700 Warm Jeremiah up (acrobat) Matching player barachim and the monster dummy. -------------------------------------------------------------------------------- 2cb333d0c2 | patrick | 2023-08-09 21:59:56 -0400 Fix the tiles in elethiomel_arrival_fortress_basement been buggin me for years -------------------------------------------------------------------------------- 48e1739576 | Nicholas Feinberg | 2023-08-09 17:04:18 -0700 Tweak *Noise description (acrobat, elliptic) -------------------------------------------------------------------------------- fcb59812bd | Kate | 2023-08-09 21:51:52 +0100 Fix a resting crash with inhibited regen It was possible to start resting with no monsters in LOS, and then have a monster come into view on the other side of deep water and activate -Regen without interrupting the rest, causing it to continue indefinitely and hit the assert threshold. -------------------------------------------------------------------------------- 61598ed1a1 | Kate | 2023-08-09 19:23:52 +0100 Remove a sleepwalking gimmick As requested! -------------------------------------------------------------------------------- 6123214d49 | Kyle Rawlins | 2023-08-09 14:05:53 -0400 fix: initialize a PromptMenu variable (dilly) TravelPromptMenu::refresh_prompt is called before this was initialized in PromptMenu code, leading to undefined behavior (and probably sometimes, the wrong prompt). -------------------------------------------------------------------------------- b2b78dfc09 | Kyle Rawlins | 2023-08-09 13:56:19 -0400 fix: update PromptMenu state when switching modes This could lead to the wrong hints (and maybe other issues) if menu mode is forced by e.g. looking at a long altar list. -------------------------------------------------------------------------------- 28e415ffb7 | elliptic | 2023-08-09 11:19:12 -0400 Fix a misspelling. -------------------------------------------------------------------------------- dc6bdc1437 | Implojin | 2023-08-09 09:27:44 -0500 Add a new tiles icon for paralyse This is a simple recolour of the existing sleep icon, but hopefully it's enough for players to differentiate paralysed and sleeping monsters. Might need to redo the icon later if it's not distinct enough? -------------------------------------------------------------------------------- 5e04a77a59 | Nikolai Lavsky | 2023-08-09 17:20:46 +0300 fix: make grey clouds less purple Remove stray purple pixels from clouds of grey smoke, which are especially noticeable in the Desolation: https://cdn.discordapp.com/attachments/1064517662111178804/1138836044721160333/d esolation_clouds.png -------------------------------------------------------------------------------- d5cd04eec4 | Kyle Rawlins | 2023-08-09 09:50:20 -0400 fix: quiet some enum class+switch related warnings Mentioned in #3227 -------------------------------------------------------------------------------- ee86dcb4cb | Kyle Rawlins | 2023-08-09 09:36:32 -0400 fix: don't crash on line_down in an empty menu Mainly replicable via memorize. This is related to, but not the same crash, as in #3082. -------------------------------------------------------------------------------- bafd7f5274 | Nicholas Feinberg | 2023-08-08 17:41:19 -0700 Fix: don't make flux suppress intrinsics (elliptic) TODO: make this not bad -------------------------------------------------------------------------------- 3d79149578 | Nicholas Feinberg | 2023-08-08 13:22:17 -0700 New unique: Jeremiah, Barachi Dreamer Playing more around with different types of summons in the early game, Jeremiah is an early-game (D:6-9) unique who passively summons butterflies every turn. Jeremiah then hits you with a draining glaive, hops backwards, and smites you. (The glaive is the loot.) Their backstory is deeply tragic but that's OK. They also have a very silly sleepwalking gimmick which kate will remove soon. It'd be thematic to spawn the butterflies while J is sleeping, but it feels spoilery (for players who don't know what nearby summoned butterflies indicate) and a bit too easy to completely avoid J without even seeing them. -------------------------------------------------------------------------------- f982180d95 | Nicholas Feinberg | 2023-08-08 13:01:21 -0700 Credit NephaliaWeaver -------------------------------------------------------------------------------- dd471462e6 | Implojin | 2023-08-08 14:02:52 -0500 New tiles icon for pain bond (CanOfWorms) -------------------------------------------------------------------------------- df1e9e4a2e | DracoOmega | 2023-08-08 16:02:26 -0230 A few minor improvements to quick fsim text output Now prints a header message showing what monster is being attacked and with what weapon (using fsim while unarmed but with a throwing item quivered uses the throwing weapon to attack and NOT your fists, which could produce misleading numbers). Also removes the superfluous lines about the player not being hit during your attack round, and the monster not being hit during your defense round, which I think never report relevant information? (Incidentally remove an old reference to when ranged weapons had seperate ammo, which resulted in file output thinking you were shooting your weapon out of your weapon) -------------------------------------------------------------------------------- 902d8d2af8 | Nicholas Feinberg | 2023-08-08 11:28:47 -0700 Don't give accuracy to Me foes (elliptic, acrobat) Make flux form and meteoran backlighting work the same way as self-halo (from TSO, orb of light, etc), by not providing an accuracy bonus to foes. It still disables invisibility and ruins stealth. Also, remove the flux form EV bonus added to compensate for this. This reverts commit 7f215ca21b984ff96d35925c7007df7b865050c2. -------------------------------------------------------------------------------- c77f77e11d | Kyle Rawlins | 2023-08-08 14:25:54 -0400 feat: improve artefact descriptions This commit mostly aims to improve the display of artefact properties in their long description. * Make indentation for `Name: description` lines much more consistent across item types (and also refactor this code somewhat). If a property name is too long, don't chop it, just expand. * Give jewellery egos a name, not just a description * Move the weapon type description out of the item-specific property list, it now appears before handedness. * Fix a bug with orb description spacing * Parse DESCRIP and DBRAND (splitting by `:`) so that the hand-coded (and often very inconsistent) indentation in that file doesn't matter. * Add some names to a bunch of DESCRIP cases A few remaining oddities: * weapon egos have an extra blank line following them not present in other item types that is hard to get rid of. Occasional weird interactions with this and dbrand. * DESCRIP/DBRANDs that have an infinity symbol are not aligned correctly * Probably other spacing stuff, this code is quite complex -------------------------------------------------------------------------------- 791ea4fb0e | Kyle Rawlins | 2023-08-08 14:25:54 -0400 refactor: show full artefact prop name in long descriptions Previously, this would show just the base name (e.g. rF) instead of the full annotation name (e.g. rF++). Getting this to work sanely involved a refactoring of a whole bunch of code, but artefact prop code is still a mess overall. -------------------------------------------------------------------------------- 6b702e47e2 | Kyle Rawlins | 2023-08-08 14:25:54 -0400 feat: support right click for help in local tiles skill menu Resolves #3086 -------------------------------------------------------------------------------- df853b38fe | Kyle Rawlins | 2023-08-08 14:25:54 -0400 fix: use temporary mode for a prompt This prompt could maybe use a bigger overhaul, but for now, make its behavior more standard with other prompting. Also, fix an unrelated comment. -------------------------------------------------------------------------------- a81648d2db | Nephila Hirsch Oliveira | 2023-08-08 07:02:05 -0700 Only apply Flux contam on player attacks Closes #3242. Closes #3241. -------------------------------------------------------------------------------- 6f97920a28 | Nicholas Feinberg | 2023-08-07 22:22:26 -0700 Deduplicate some gear giveaways This should really be dataified. But, like, in a more readable way than weapons. -------------------------------------------------------------------------------- 15b80361f1 | Nicholas Feinberg | 2023-08-07 17:53:29 -0700 Weaken Flux Form scaling (elliptic) Try to make it less competitive with tier 2 forms on the top end. -------------------------------------------------------------------------------- 98ab19c3ae | Nicholas Feinberg | 2023-08-07 17:05:32 -0700 Shift flux form slightly later Min skill 6, to make it take a little longer to come online. Move beast form's max skill up correspondingly. -------------------------------------------------------------------------------- 2108c08da7 | elliptic | 2023-08-07 19:47:02 -0400 Make fluxform less sleepy. (In console it used to be the same highlight as sleeping monsters.) -------------------------------------------------------------------------------- 6cfc4c83a9 | Nicholas Feinberg | 2023-08-07 16:08:42 -0700 ...really -------------------------------------------------------------------------------- 37d6a9d476 | Nicholas Feinberg | 2023-08-07 16:08:16 -0700 Make players dimmer (elliptic) -------------------------------------------------------------------------------- f00e8c0ca5 | Nicholas Feinberg | 2023-08-07 15:27:56 -0700 New talisman: Flux Intended to serve as a further goal for Shapeshifters to skill toward, flux talismans are a bridge between Beast form and later forms. Users inflict magical contamination on foes with each hit. Level 1 contam backlights foes, revealing invisible enemies and reducing their EV. Level 3 causes a meltdown, doing high damage (0-30 at min Shapeshifting skill, 0-60 at max), malmutating the victim, and resetting their glow. This is intended to create a distinctive rhythm (1-2-3 hits) without breaking autofight or otherwise being 'fiddly'. Flux form also has a moderate EV bonus (5 at min skill, 10 at max), which is intended to more or less balance out the penalty for permanently glowing. The real tradeoff is that your unstable, flux-ridden form is unable to wield weapons or shields and just sometimes destabilizes mid-swing. The latter reduces post-AC melee damage by 1/3rd, similar to statue form's +50% damage. This is intended to give the contam part of the form more time to shine (so the player is less likely to just beat enemies to death before the meltdown triggers), and also to limit how far the form scales - eventually the damage penalty will outweigh the upsides. Beast form is now max skill 6 (was 10), and max slay 5 (was 7). This keeps skill scaling similar while limiting how long users will want to use their 'starter form'. I might still make further changes to this, e.g. replacing slay with an aux. -------------------------------------------------------------------------------- 282fc92437 | Kyle Rawlins | 2023-08-07 16:31:20 -0400 refactor: move altar travel into TravelPromptMenu This commit refactors some extremely janky prompt menu stuff for travel to altars into the more structured TravelPromptMenu as a new mode. Like the regular travel menu, it can appear in either the message pane or a popup, and it has general and option-dependent code for deciding on which it tries and how it lays out. I had considered just removing this submenu entirely (since ctrl-f seems like a better approach to me), but it sounds like players do use this primarily via the ctrl-o _ path. -------------------------------------------------------------------------------- fc25b91918 | Nicholas Feinberg | 2023-08-07 12:49:34 -0700 Let iguanas swim (shmup) One must be biologically accurate. It's paramount. -------------------------------------------------------------------------------- 5493424979 | Kyle Rawlins | 2023-08-07 11:25:32 -0400 fix: improve default handling in travel menus For cases where there is a previous travel target: * If arrow controls are on, highlight that branch as the default * If arrow controls are off, accept [enter] as a quick shortcut (doesn't prompt for depth, because this is how it is done in the message pane, but this is a bit inconsistent..) * When prompting for depth, if the branch matches the previous target, use the target depth as the default. This one is a new behavior, which makes the arrow control case a bit smoother. -------------------------------------------------------------------------------- 8d68a81214 | Nicholas Feinberg | 2023-08-06 22:56:15 -0700 Fix bound soul HP display (acrobat) Continuing from 4fc774d21a5a6b3a19f414e2a6718f74ff07d088. -------------------------------------------------------------------------------- aadceae713 | Nicholas Feinberg | 2023-08-06 22:51:29 -0700 Split gnomes and gnolls (canine) -------------------------------------------------------------------------------- 30e62f8b7a | Nicholas Feinberg | 2023-08-06 16:22:38 -0700 Change the updatelog Or update the changelog, whatever. -------------------------------------------------------------------------------- 96a4d527f4 | Kate | 2023-08-06 23:21:28 +0100 Add an important number To the randart name pool. -------------------------------------------------------------------------------- 37773c3749 | Kate | 2023-08-06 23:21:28 +0100 Remove some Xom names -------------------------------------------------------------------------------- 3e60cf2259 | Kate | 2023-08-06 23:21:27 +0100 Remove some randart names -------------------------------------------------------------------------------- 15872d262f | Kate | 2023-08-06 23:21:27 +0100 Rename an ice cave internal key And a couple of other cases - not an appropriate term to use here. -------------------------------------------------------------------------------- 91c9547826 | Kyle Rawlins | 2023-08-06 15:01:18 -0400 fix: G >/< in webtiles The keys were being intercepted by javascript paging code. -------------------------------------------------------------------------------- 4fd37da4f0 | Nicholas Feinberg | 2023-08-06 09:37:40 -0700 Reduce early-game talisman frequency slightly Reduce beast talisman spam a bit. -------------------------------------------------------------------------------- 9002559900 | Nicholas Feinberg | 2023-08-06 09:37:40 -0700 Sometimes give Josephina a talisman of death (acrobat) Feels thematic. -------------------------------------------------------------------------------- b56e7cad85 | Kyle Rawlins | 2023-08-06 12:33:10 -0400 feat: prompt popup consistency for tiles Several menus that can appear in the message pane support using popups, but for historical reasons would do it only when necessary (e.g. there is already a popup on the stack). The two main cases are the Y/N(/A) menu, and the travel menu. Crawl taking input in the message pane has a long roguelike-y tradition, but it prevents mouse input, and can't work in all cases anyways. This commit moves the default towards consistently using a popup in UIs where the popup works well. In particular, in local tiles, and webtiles, these two popups (where the Y/N(/A) is used quite widely) will now always pop up by default. As part of this change, I have attempted to make a bunch of the behavior more consistent. Specific notes: * For those who prefer the old ways, set `prompt_menu = false`. This is the default still for console (where popups still take over the whole screen), including on webtiles builds. We'll see how much people hate this as a webtiles default...but I think it is a clear improvement on local tiles. * Handling of case in defaults is changed; I think the behavior this is addressing is essentially buggy. Previously, for the popup (but not the message pane?) if a default was lowercased, but the menu required uppercase, the default wouldn't work. * enter (and locally, space) now work to indicate a default in the popup * Y/N prompts now have a smaller min width in webtiles * With menu_arrow_control=false, the defaults are hinted more clearly in the popup * Error messaging in the Y/N popup happens in the more, not in a dummy entry * Arrow selection is now allowed for uppercase Y/N menus -------------------------------------------------------------------------------- 4fc774d21a | Nicholas Feinberg | 2023-08-06 09:28:06 -0700 Don't change bound soul HP (acrobat) Weirdly spoilerly and never relevant in practice, since monsters almost never level up these days. Would maybe be nice to do the same for other derived undead (in make_derived_undead_fineff::fire), but you'd need to play with derived_undead_avg_hp() to rescale skeleton, zombie, simulac etc HP to some fraction of the original monster's HP. -------------------------------------------------------------------------------- a17b723721 | Nicholas Feinberg | 2023-08-06 09:28:06 -0700 Dedent -------------------------------------------------------------------------------- 61b50ae490 | elliptic | 2023-08-05 21:09:13 -0400 Switch the CSET_ASCII character for talismans back to '|'. In CSET_ASCII, '%' is a very bad choice because it is used for corpses. Using a different character for menus and for the item on the map isn't ideal either, but seems less bad. Ideally there would be an option to fully hide corpses, freeing up '%' for an item class. -------------------------------------------------------------------------------- 43a2ca8e1b | Kate | 2023-08-05 22:43:15 +0100 Remove an orb of Zot descriptor The joke of the orb of Zot just being "pretty good" unfortunately doesn't work, since it doesn't scan grammatically in any of the welcome lines. -------------------------------------------------------------------------------- bde574a406 | Nicholas Feinberg | 2023-08-05 13:54:01 -0700 Fix Norris's missing band Surf's up, dude! -------------------------------------------------------------------------------- 390c57a952 | Nicholas Feinberg | 2023-08-05 13:50:23 -0700 Make troll leather armour closer to non-troll After c8f691b2cc77d/dd814f33f16 (2021), when regen's strength was doubled, troll leather armour became a much more powerful item. It's a bit unfortunate that players' endgame armour is now so often found in early D - it gives people less to look forward to. Let's simplify by removing TLA's bonus base AC, making it match vanilla leather armour's 3 AC. MTLA gets +1 enchant to match its +5 MP. -------------------------------------------------------------------------------- da5c5a71be | Nicholas Feinberg | 2023-08-05 13:49:59 -0700 Switch Norris's AF_SLEEP for AF_CONFUSE (elliptic) Former was insanely brutal, in principle. Latter seems thematic and not overused. -------------------------------------------------------------------------------- e939bffe16 | Kyle Rawlins | 2023-08-05 13:52:26 -0400 fix: don't clear repeats when a monster destroys a floor stack `dec_mitm_item_quantity` assumed it was being called by player actions only, but it can be used in a few other cases, notably when a monster (such as a jiyva slime) destroys a floor stack. I couldn't find a reliable general way to check whether a player action is responsible for the call, and this function isn't called that much, so I handled every case. These clear calls are still necessary for floor actions; without them a repeat that uses up a scroll stack (for example) with another stack in the same position has very weird behavior. This fixes a few other call types that shouldn't mess with command history, but they probably don't matter as much. Resolves #3194 -------------------------------------------------------------------------------- 74618ad6ef | Kyle Rawlins | 2023-08-05 13:51:54 -0400 fix: don't count headers in stash search matches Resolves #3188 -------------------------------------------------------------------------------- 98c9adc2b6 | gammafunk | 2023-08-04 16:39:44 -0500 fix: Wizmode talisman UI (acrobat (again)) Escape the '%' since we're using a formatting string. -------------------------------------------------------------------------------- 5a032ab85b | Nicholas Feinberg | 2023-08-04 13:54:23 -0700 Fix wizmode talisman UI (acrobat) -------------------------------------------------------------------------------- f4de33755b | Nicholas Feinberg | 2023-08-04 12:36:46 -0700 Standardize talisman glyphs Unify on %, removing uses of T, | and ◎. -------------------------------------------------------------------------------- 8b0e38b958 | Nicholas Feinberg | 2023-08-04 10:23:46 -0700 Fix Forbidden Knowledge (pyy156941) Closes #3228. -------------------------------------------------------------------------------- c7e1478a07 | Nicholas Feinberg | 2023-08-04 10:22:10 -0700 Add an elemental staff inscript (acrobat, fbwer) Closes #3234. -------------------------------------------------------------------------------- 10b485e85d | Nicholas Feinberg | 2023-08-04 10:17:58 -0700 Update Warper description (projectNoob) Closes #3233. -------------------------------------------------------------------------------- 9e667d4245 | Nicholas Feinberg | 2023-08-03 21:20:49 -0700 Credit rypofalem For a9c6de93fa29999e3921eaf2547a1db91c60a373. -------------------------------------------------------------------------------- c8a9bf3d51 | patrick | 2023-08-03 13:37:52 -0400 Improve the shop spec documentation a bit more Looking at the changes made in c1f2cfb, I saw that the "greed" section of the shop spec documentation still said "Someone should fill the algorithm here!" So I did. And then touched up some other places. -------------------------------------------------------------------------------- 88bc115a23 | patrick | 2023-08-03 12:08:23 -0400 Appropriately adjust agape appellations (PleasingFungus) In 37a08a6, PF fixed a "spaces in a shop spec" bug by simply using a pre-set name rather than a randomly-generated name. This commit puts the randomly-generated names back in and makes sure they don't break the spec with spaces. For this, I simply got rid of the spaces rather than replacing them with underscores: having a second word in the name that probably doesn't begin with "A" breaks the alliteration. (Ditching the spaces is a much easier solution than looking for spaces and changing all the letters right after them to "A".) -------------------------------------------------------------------------------- 237aa7c712 | Kate | 2023-08-03 16:43:50 +0100 Fix monster-cast Arcjolt originating from the player And fix the display of its range on the spell menu. -------------------------------------------------------------------------------- c1f2cfbcc5 | Kyle Rawlins | 2023-08-03 10:23:46 -0400 doc: document a shopspec feature Originally added 8eeaac88ab1b, now documented. -------------------------------------------------------------------------------- 1a7b003ef0 | Nicholas Feinberg | 2023-08-02 21:27:36 -0700 Disallow shafting players on stairs Was too counterintuitive - led to endless surprised questions. Reverts a7c9fdd7d17bda3a43126cbd05e5cae596c2112e. -------------------------------------------------------------------------------- 4a036dd22d | Nicholas Feinberg | 2023-08-02 21:26:39 -0700 Remove XP evokers from alphashops Doesn't work well if they get replaced with wands. -------------------------------------------------------------------------------- c278444e51 | Nicholas Feinberg | 2023-08-02 20:51:24 -0700 Remove an unused var -------------------------------------------------------------------------------- 37a08a676a | Nicholas Feinberg | 2023-08-02 20:50:05 -0700 Actively avoid agape appelations (advil) crawl.name() can have a space in it. -------------------------------------------------------------------------------- 292434cca5 | patrick | 2023-08-02 20:39:13 -0700 Add guarded evoker vaults (Lici, Iguana) Add a few mid-D vaults with lightning rod, phantom mirror, phial of floods, or a box of beasts. The latter features the first hostile mutant beasts in a vault, I think. Maybe we'll see more of them... Closes #3073. -------------------------------------------------------------------------------- 9e84c16775 | patrick | 2023-08-02 16:23:14 -0700 Add new guarded new unrand vaults The slick slippers, Victory, the Storm Queen's Shield, and the lochaber axe can be found in these vaults. Since Victory's flavor mentions Okawaru, and it's an early-game unrand, the Victory vault doubles as an Okawaru overflow altar. -------------------------------------------------------------------------------- e06127da47 | Nicholas Feinberg | 2023-08-02 16:22:13 -0700 Add items.pickable dlua (nicolae) -------------------------------------------------------------------------------- 23386290e8 | Nicholas Feinberg | 2023-08-02 15:55:18 -0700 Shift misc items a little later (nicolae) Misc items (i.e. XP evokers, like Phial of Floods etc) didn't have their generation frequency adjusted after they were made unique, so they tended to all generate pretty early on. Shift them a bit later. This reduces average misc items in D from 1.5 to 0.8ish, Lair from 0.9 to 0.6, Orc from 0.4 to 0.15, etc. Later rates actually increase - for example, Elf:3 will probably now have more misc items to dangle as shiny bribes, since they won't have already generated earlier. -------------------------------------------------------------------------------- 00a50fe4a9 | Nicholas Feinberg | 2023-08-02 15:02:55 -0700 Fix misc objstat -------------------------------------------------------------------------------- 07c4bd200f | Nicholas Feinberg | 2023-08-02 14:53:45 -0700 Fix: remove Forest This has been obsolete since Jan 2014 or so. Reverts d9674dfee0f (Sept 2013). -------------------------------------------------------------------------------- 38cd9da427 | Nicholas Feinberg | 2023-08-02 14:11:31 -0700 Minor objstat refactoring -------------------------------------------------------------------------------- a1f710b590 | Sean Dewar | 2023-08-02 12:43:52 -0700 Fix Anaconda status description, remove unused variable Mousing-over Anaconda status would show "No description found" on WebTiles as it had the wrong name in the db (could still be found via ?/t as it would match the contents). Also remove an unused variable in `get_unusual_items()` after commit 128b3467. -------------------------------------------------------------------------------- 128b34678a | Nicholas Feinberg | 2023-08-02 11:15:49 -0700 Simplify unusual monster markings (Implojin, advil) To reduce noise and simplify option handling, let's only mark as unusual the items that are most likely to be relevant to players. Wands, distortion and chaos weapons, darts and throwing nets are all marked 'unusual' by default. Artefacts, brands to which the player is 'vulnerable', spectral weapons, javelins, and items with plusses are not. As before, this can be configured further in the player's rcfile. -------------------------------------------------------------------------------- 70533b5a48 | mainiacjoe | 2023-08-02 12:40:35 -0400 Add some self-published spell books (#3223) * Add a book of stinky clouds, "Amateur Aromatherapy" * Add a book of spells that swapped schools, "Elemental Confusion" * Add a book of range 1 spells that used to be ranged, "Getting Closer Than Before" * Add a book for introverts, "Peace and Solitude" * Add a book of high-level conjurations suitable for Spellforged Servitors, "Servitor Tips and Tricks" -------------------------------------------------------------------------------- 867994ef1c | Implojin | 2023-08-01 21:28:43 -0500 remove removed chess pieces ..from the autopickup menu. -------------------------------------------------------------------------------- ffbd99370a | Implojin | 2023-08-01 17:14:13 -0500 Prioritize stab highlights in console (Undo, u/SvalbardCaretaker) Since 750b6846b9, monster stabbability background highlighting in console was being drawn at a lower priority than unusual item highlighting. This made it difficult to see when a monster with an unusual item could also be stabbed while playing in console mode. This commit draws stab flags with higher priority than unusual, restoring the old stab background highlighting behavior. However, the monster names on the right side of the screen still have unusual state drawn at a higher priority than stabbability; this way, console players can easily see if a monster is both stabbable and unusual. -------------------------------------------------------------------------------- 10d7c63264 | Implojin | 2023-08-01 17:01:10 -0500 Let vulnerable highlight check cold blood (acrobat) This is a temporary usability fix since the 'vulnerable' unusual option is likely to be re-written soonish; thanks to acrobat for reporting this! -------------------------------------------------------------------------------- 1d4c2d1985 | Implojin | 2023-08-01 16:44:39 -0500 Add datura to unusual defaults (acrobat) Thanks acrobat! -------------------------------------------------------------------------------- 7cee417757 | Kyle Rawlins | 2023-08-01 15:53:55 -0400 ci: workaround for an llvm install issue Solution based on commits in: https://github.com/llvm/llvm-project/issues/64182 This should be reverted once that issue is resolved (looks like the maintainer is traveling right now). -------------------------------------------------------------------------------- a67bebab74 | patrick | 2023-08-01 10:01:20 -0400 Add a new custom book shop Back in 2012, I discovered a bug*. You couldn't define custom spellbooks with more than one spell in a shop. This is because the symbol for separating items in a shop definition was the same as the symbol for separating spells in a randbook's spell list: |. The map parser would just get confused. In 2015, I submitted a patch that changed the symbol for separating spells in a spell list to &, allowing custom shops to handle custom spellbooks. I said, "I promise to abuse this new vault-writing power as soon as possible." Apparently, "as soon as possible" was "eight years later". Some of the book themes are obvious, some less so. No doubt players will enjoy trying to figure them out. I may have gone slightly overboard, but that just means more variety for players. I do it all for them. * https://crawl.develz.org/mantis/view.php?id=5706 -------------------------------------------------------------------------------- 2c6fae2916 | Kate | 2023-07-31 13:55:23 +0100 Start Chaos Knights with a scroll of butterflies Since their Xom chesspieces are gone. -------------------------------------------------------------------------------- 48435b3698 | Kate | 2023-07-31 12:36:38 +0100 Fix bardings being equippable in beast form (#3216) Closes #3216. -------------------------------------------------------------------------------- fad53b2027 | Kate | 2023-07-31 12:36:38 +0100 Remove Xom chesspieces They didn't really fit as XP-based evokers, and weren't a particularly useful or interesting effect. -------------------------------------------------------------------------------- 1d195df450 | Kate | 2023-07-31 12:36:37 +0100 Remove the Awaken Earth spell It was intended as a counter to players digging tunnels in Elf, and while it sort of works in that sense it also acts unintuitively and completely unlike any other spell, being castable by monsters out of LOS and breaking into and out of vaults. Give deep elf elementalists LRD instead. -------------------------------------------------------------------------------- 88bdf31460 | Implojin | 2023-07-30 19:20:06 -0500 Adjust vulnerable venom highlight (Shard1697) This commit changes the behavior of the `vulnerable` unusual items option so that it highlights venom brands when the player is lacking rPois, instead of lacking poison immunity. -------------------------------------------------------------------------------- f8416d752b | Kate | 2023-07-30 16:53:28 +0100 Reduce base piety for Sacrifice Forms As a very narrow sacrifice, make it less valuable unless the player is actually giving up on some invested skill levels. -------------------------------------------------------------------------------- 52e89b3c1f | Kate | 2023-07-30 16:53:28 +0100 Fix an Octopode armour acquirement crash (#12247) Don't crash when acquiring armour as an Octopode with Antennae 3 and Sacrifice Hand (and no valid armour slots as a result). -------------------------------------------------------------------------------- d7735d0b83 | Kate | 2023-07-30 16:53:28 +0100 Fix mephitic cloud interaction with clarity (#12684) Don't mark noxious fumes as dangerous or prompt to enter them when the player has clarity. -------------------------------------------------------------------------------- e20648be1c | Kate | 2023-07-30 16:52:45 +0100 Don't place fire vortices as monsters As with ball lightnings, they have the "conjured" flag and aren't treated as proper monsters in many ways, so shouldn't be placed by vaults or as lava spawns. They remain only in a few cosmetic-only vaults and in some Sprints, and have been replaced either with fire elementals or with nothing in other cases. -------------------------------------------------------------------------------- 3a05650e59 | Nicholas Feinberg | 2023-07-29 22:03:03 -0700 Bland down up fire elementals Not quite baked yet. I'm hoping this doesn't break save compat. This reverts commit d94c9c017c6dc1da663324c1593852aaabcf8696. -------------------------------------------------------------------------------- e92f843865 | Nicholas Feinberg | 2023-07-29 22:00:16 -0700 Unrim Norris -------------------------------------------------------------------------------- 41b3b0883d | Nicholas Feinberg | 2023-07-29 14:06:56 -0700 Restore 1.6k-year-old Polynesian practices (CanOfWorms) Reverts eca0601a2dbd5a46cc1852a0cd81f4bd09d9ae3c. Time Cops Go Home -------------------------------------------------------------------------------- 0dfff664f2 | Monkooky | 2023-07-29 10:08:51 -0700 feat: two gimmick shops Adds a mail order shop that sells mail and order also a shop that sells weapons whose ego alliterates with the base type The mail-order catalogue is structured to always have mail (usually good) and sometimes also have order. Alliterative Armaments generates a list of alliteratively named items. [ Committer's note: Removed holy weapons from the list, too wild. Closes #3004 ] -------------------------------------------------------------------------------- 6444dff9de | hellmonk | 2023-07-29 10:08:51 -0700 feat: Some new Zot stairvaults [ Committer's notes: Reduced a/dlich count in crystal mountain Reduced iron golem count in zot clocked Closes #2977 ] -------------------------------------------------------------------------------- 3b489a7343 | hellmonk | 2023-07-29 10:08:51 -0700 feat: A brand new depths encompass Slightly wip. This needs more subvault maps, wall and floor tile selection to correspond with monster set, a better loot function, and some rebalancing. additional hexagon subvaults - EBERING ARE THESE ENOUGH?? add some aesthetics - EBERING ARE THESE ENOUGH?? improve loot - EBERING IS IT LOOTY ENOUGH?? [ Committer's notes: The PR had subsequent commits to add subvault maps and loot adjustments. Fiend frequency was tweaked a bit. Committer is a console player so can't comment on the tiles but the console theme colouring is good. Adjusted stair randomization and placement to offer some increased skipability as is semistandard with U encompasses. Closes #2666 ] -------------------------------------------------------------------------------- 4f203cd64d | hellmonk | 2023-07-29 10:08:51 -0700 feat: Norris Rework the surfer. Norris returns with a reworked spell set, water nymph aura, a pack of skysharks, and a slightly less edgy theme. Norris tentatively appears in elf, vaults, and depths. Numbers or placement will probably be adjusted. [ Closes #3042 ] -------------------------------------------------------------------------------- d94c9c017c | hellmonk | 2023-07-29 10:08:51 -0700 feat: spice up fire elementals Their attack flavor gimmick is kind of hard to notice even if you don't have rF. Give them a reach-cleaving attack (like lochaber axe) to make them stand out a little bit more. [ Closes #2817 ] -------------------------------------------------------------------------------- 57aedf9c6d | hellmonk | 2023-07-29 10:08:51 -0700 feat: Holy shoals encompass ending I think this is probably too hard right now. [ Committer's note: It was. Reduced monster density to be more in line with other shoals endings on average. Gave the javelineers a better chance at silver javs (the hand of Zin). Closes #2611 ] -------------------------------------------------------------------------------- f88b50090e | hellmonk | 2023-07-29 10:08:51 -0700 feat: New simple depths entry [ Closes #2889 ] -------------------------------------------------------------------------------- 485654376a | AlexanderPosch | 2023-07-29 10:08:51 -0700 vaults: New entry vaults for Snake and Swamp Snake:"alex1729_snake_entry_snake". It contains a few nagas/mambas/moccasins and one salamander with a bow. The salamander is positioned behind a turn so one can retreat and lure/run away if needed. [ Committer's note: removed placement of mambas/mocasins, ego from salamander's bow ] Swamp:"alex1729_swamp_entry_worm_eleionoma". The vault contains an eleionoma and up to 2 swamp worms positioned behind bushes. I hope this isn't to deadly. [ Committer's note: alas it was. toned down monster placement, increased randomization of layout ] [ Closes #2956 ] -------------------------------------------------------------------------------- 263cdf863d | Implojin | 2023-07-29 10:54:46 -0500 Remove vamp from unusual default (acrobat, Ge0ff) Trying to err on the side of less-is-more with this initial set of commits: Each additional brand that we add by default here adds noise and dilutes the impact of the unusual highlighting when it does show up. For anyone who would really prefer more warnings, please remember you can still add them to your rc file! -------------------------------------------------------------------------------- 0ef5263c4e | Kate | 2023-07-29 16:50:16 +0100 Update talisman manual listing -------------------------------------------------------------------------------- 05d06ac2ca | Kate | 2023-07-29 16:50:16 +0100 Adjust some documentation describing HP Crawl canonically uses "health" (rather than "hit points") - adjust some player-facing text to match. -------------------------------------------------------------------------------- d1d04c167f | Kate | 2023-07-29 16:50:16 +0100 Label active talismans in the inventory -------------------------------------------------------------------------------- f8873633c0 | Implojin | 2023-07-29 10:16:31 -0500 Further unusual default tweaks Large rocks are never strictly 'unusual': The monsters that can generate with them always have them. Silver was made redundant with javelins in f782e3da01 : We don't need to be warning for it separately anymore. More tweaks to come? -------------------------------------------------------------------------------- 77248fceac | Implojin | 2023-07-29 09:31:42 -0500 Remove heavy from default unusual warnings (PF) After some discussion, this deals quite a bit less damage wielded by monsters than I thought it did! We're removing this from the default warning for now, but you can always re-add it in your rcfile if you'd like. -------------------------------------------------------------------------------- 750b6846b9 | Implojin | 2023-07-29 08:56:23 -0500 feat: unusual monster item threat highlighting This commit adds a new game option: unusual_monster_items. When set, this option highlights monsters carrying 'unusual' items, similar to the existing tiles highlighting for 'nasty' monsters. This is a list option that matches regexes against each monster's inventory, so players can customize this in a very granular way. You could, for example, highlight any monster carrying snakebite. This works in both tiles and console through a pair of associated options, tile_show_threat_levels = unusual , and unusual_highlight = hi:magenta . Please see options_guide.txt for details. I've setup the default highlighting here based on what felt reasonable to me in playtesting: Future adjustments likely, feedback welcome. -------------------------------------------------------------------------------- b642c7f9a3 | Nicholas Feinberg | 2023-07-28 22:29:57 -0700 Fix holy weapon death form prompts (dilly, acrobat) -------------------------------------------------------------------------------- f782e3da01 | sdynet | 2023-07-28 22:16:01 -0700 Remove silver boomerang Reduce inventory pressure and leave Silver as a place for javelin(and Lajatang of Order). -------------------------------------------------------------------------------- 83a47ab31f | sdynet | 2023-07-28 22:16:01 -0700 Adjusting throwable ego:dispersal Dispersal is a special ego that doesn't hurt, and I think it fits the theme of darts better. Remove boomerang ego:dispersal Add dart ego:dispersal -------------------------------------------------------------------------------- 6c87fcb011 | hellmonk | 2023-07-28 22:03:00 -0700 feat: Three new vaults entrances -------------------------------------------------------------------------------- 1e11dc61e8 | hellmonk | 2023-07-28 22:01:32 -0700 Adjust constriction Remove the stepdown and scale linearly. Also, apply AC without breakpoints. To compensate for increased damage after long durations, reduce the base damage of a couple of the meatier constricting monsters, vile clutch, and wand of roots. Damage is lower before 50 aut, so this may not have been necessary, but we'll play it safe. Closes #2883. -------------------------------------------------------------------------------- ce2be97bb4 | hellmonk | 2023-07-28 21:56:27 -0700 Make some swamp ends less annoying Reduce cloud placements in swamp_icy and swamp_pestilence, and replace the pestilence oklob with a (much funnier) spectral bunyip. -------------------------------------------------------------------------------- 840a4f330f | Antal Spector-Zabusky | 2023-07-28 21:54:28 -0700 Hooves and talons shouldn't force bardings off -------------------------------------------------------------------------------- f073b5ab69 | hellmonk | 2023-07-28 21:50:05 -0700 feat: pasta randarts (major [critical (vital)]) https://i.kym-cdn.com/photos/images/original/001/233/131/e09.jpg Closes #3162. -------------------------------------------------------------------------------- 9dd5d42eca | Nicholas Feinberg | 2023-07-28 21:45:56 -0700 Fix: make /roots require solid ground again (bobross420-1) Broken in 57a6a0d306af5fede1b6d10abc967cf4a8703c84. Closes #3152. -------------------------------------------------------------------------------- 2bcca7f065 | Perren Yang | 2023-07-28 21:35:40 -0700 Add a Troubleshooting section to INSTALL.md (Olga) For expectedly confusing pain points. Comes with a free initial entry! [Committer's note: fixed formatting.] Closes #3197. -------------------------------------------------------------------------------- 32664fa86c | Perren Yang | 2023-07-28 21:35:39 -0700 Remove duplicate mention of zlib It was mentioned twice in the dependencies list. -------------------------------------------------------------------------------- df778148c9 | Jared Miller | 2023-07-28 21:30:49 -0700 Correct typos Closes #3202. -------------------------------------------------------------------------------- eed8119486 | laserbat | 2023-07-28 21:12:25 -0700 Added Necrodancer title -------------------------------------------------------------------------------- 7ea37e432a | orjb1 | 2023-07-28 21:11:52 -0700 Simple Arrival Vault With Lava Closes #3182. -------------------------------------------------------------------------------- af693774bd | Zhang Kai | 2023-07-28 21:09:42 -0700 Update unrand.txt -------------------------------------------------------------------------------- 449a7298ed | Zhang Kai | 2023-07-28 21:09:42 -0700 Update status.txt -------------------------------------------------------------------------------- d5ede58fa0 | Zhang Kai | 2023-07-28 21:09:42 -0700 Update spells.txt -------------------------------------------------------------------------------- 4c5a8775d7 | Zhang Kai | 2023-07-28 21:09:42 -0700 Update skills.txt -------------------------------------------------------------------------------- b7ef08388f | Zhang Kai | 2023-07-28 21:09:42 -0700 Update mutations.txt -------------------------------------------------------------------------------- a4dcbe002f | Zhang Kai | 2023-07-28 21:09:42 -0700 Update monsters.txt -------------------------------------------------------------------------------- 792cb2b54a | Zhang Kai | 2023-07-28 21:09:42 -0700 Update items.txt -------------------------------------------------------------------------------- 40a9fac9db | Zhang Kai | 2023-07-28 21:09:42 -0700 Update backgrounds.txt -------------------------------------------------------------------------------- 13c07b6b04 | Zhang Kai | 2023-07-28 21:09:42 -0700 Update ability.txt -------------------------------------------------------------------------------- 16a96a9694 | Zhang Kai | 2023-07-28 21:09:42 -0700 Update FAQ.txt -------------------------------------------------------------------------------- 120e3251a6 | Zhang Kai | 2023-07-28 21:09:42 -0700 Update help.txt -------------------------------------------------------------------------------- 757720c09c | Zhang Kai | 2023-07-28 21:09:42 -0700 Update backgrounds.txt -------------------------------------------------------------------------------- 832e491317 | Zhang Kai | 2023-07-28 21:09:42 -0700 Update cards.txt -------------------------------------------------------------------------------- cc9f500c86 | Zhang Kai | 2023-07-28 21:09:42 -0700 Update features.txt -------------------------------------------------------------------------------- bcea77f4c5 | Zhang Kai | 2023-07-28 21:09:42 -0700 Update mutations.txt -------------------------------------------------------------------------------- 1dbc096f5e | Zhang Kai | 2023-07-28 21:09:42 -0700 Update status.txt -------------------------------------------------------------------------------- 127e5477f0 | Zhang Kai | 2023-07-28 21:09:42 -0700 Update monsters.txt -------------------------------------------------------------------------------- e6e5c98185 | Zhang Kai | 2023-07-28 21:09:42 -0700 Update items.txt -------------------------------------------------------------------------------- 7c72fd96ea | Zhang Kai | 2023-07-28 21:09:42 -0700 Update unrand.txt -------------------------------------------------------------------------------- 9f80d7ed8b | Zhang Kai | 2023-07-28 21:09:42 -0700 Update spells.txt -------------------------------------------------------------------------------- a17a83b80e | Monkooky | 2023-07-28 21:08:19 -0700 Make artefact orbs use slightly orbier names an exceedingly trivial oversight that I am only bothering to correct since I was already poking around in this code. -------------------------------------------------------------------------------- 649fb47aab | hellmonk | 2023-07-28 21:07:47 -0700 fix plasma beam damage Pull out the lightning component to a new beam. -------------------------------------------------------------------------------- 5ef9b61f8f | Sebastian Zivota | 2023-07-28 21:05:06 -0700 Correct reference to "caster" in granite talisman's description -------------------------------------------------------------------------------- e3233786a7 | Nicholas Feinberg | 2023-07-28 15:50:19 -0700 Fix: flip foes/friends (KurzedMetal) Closes #3218. -------------------------------------------------------------------------------- 25055926c8 | Nicholas Feinberg | 2023-07-28 08:55:56 -0700 Remove //Ignacio (Ge0ff) -------------------------------------------------------------------------------- 8eba5f6939 | Nicholas Feinberg | 2023-07-27 20:18:08 -0700 More paralysis + petrification fixes (hellmonk) Closes #3217. -------------------------------------------------------------------------------- a258d1a3ce | Nicholas Feinberg | 2023-07-27 20:15:29 -0700 Fix chain paralysis + petrification (hellmonk) -------------------------------------------------------------------------------- 8c388e6fe1 | Nicholas Feinberg | 2023-07-27 20:13:56 -0700 Correct a comment These have been wrong since 5c2cb368445 (2015). -------------------------------------------------------------------------------- a77b45bd9b | Nicholas Feinberg | 2023-07-27 09:51:37 -0700 Halve death form HD draining (Midn8, elliptic) 8x the effect of a normal drain brand on HD was a little excessive. -------------------------------------------------------------------------------- cf821cafb2 | Nicholas Feinberg | 2023-07-26 23:00:17 -0700 Remind players when they've finished Pan (Midn8) In case they aren't watching } and/or aren't familiar with Pan. -------------------------------------------------------------------------------- b59cdcccf2 | Nicholas Feinberg | 2023-07-26 20:52:47 -0700 Move more talisman power into scaling Continue to make training Shapeshifting feel less bad by moving more power into skill scaling effects. Boost top skill Anaconda AC and Blade Hands damage. Reduce base Dragon Form and Statue Form AC, moving it into skill scaling. This is a pretty modest change, and more could be done. -------------------------------------------------------------------------------- a53a963a1d | Nicholas Feinberg | 2023-07-26 20:47:12 -0700 Don't drain undead with death (Midn8) Make the 'draining' component of death form's melee effects only affect living and plant monsters, as with other sources of draining. Probably it should check rN too. -------------------------------------------------------------------------------- 6b00f1bea8 | Nicholas Feinberg | 2023-07-26 15:18:00 -0700 Discharge off-level eyes (Sergey) -------------------------------------------------------------------------------- 0f8bd3a31e | Nicholas Feinberg | 2023-07-26 07:42:52 -0700 Fix Scorch damage display (CanOfWorms) -------------------------------------------------------------------------------- b3e1d13bf4 | patrick | 2023-07-25 22:07:56 -0400 Tweak the ending of nicolae_hydra_factorization (gammafunk) Spread the loot out across the floor of the Lerny chamber, instead of piling it all up in a tiny closet at the end. Also very slightly increase the max amount of loot and the number of guaranteed artefacts. I'll get a kill in there one of these days. -------------------------------------------------------------------------------- 7d9b8f557b | patrick | 2023-07-25 21:45:44 -0400 Tweak the center of nicolae_shoals_lighthouse Now that the phantom mirror is unique, there's a good chance it will be replaced with a wand, which would make the flavor not work. (Lighthouses use mirrors to reflect the light where it needs to go, you see.) The only thing I can think of to replace it with is an orb of light, but honestly, it might just be best to not have any loot in there in the first place and close it off. So I'll do that. This also fixes the issue mentioned in this reddit thread: https://www.reddit.com/r/dcss/comments/152vcev/ -------------------------------------------------------------------------------- ac0dbeb3ab | Kate | 2023-07-24 20:06:05 +0100 Give Siphon Essence a unique cooldown Exhaustion is reserved for god abilities that are intended to share a cooldown (Ru in particular). There's no reason for Siphon Essence to share a cooldown with those god abilities, so give it its own separate cooldown as other similar abilities have. -------------------------------------------------------------------------------- 4a313f05bb | Kate | 2023-07-24 20:00:52 +0100 Adjust wording on X help screen (lowfye) -------------------------------------------------------------------------------- 95aa79084e | Nicholas Feinberg | 2023-07-24 10:10:48 -0700 Reduce ?blink trove prices 4-8 scrolls is an enormous price. ?blinking is extremely good, especially now that it works in Zot and that Controlled Blink, Semicontrolled Blink etc are gone. Drop it to 3-5 scrolls. -------------------------------------------------------------------------------- 57cb03d3e8 | Nicholas Feinberg | 2023-07-23 17:06:40 -0700 Fix Siphon Essence exhaust (acrobat) 06437d652345d137a233 was purely cosmetic. Oops! -------------------------------------------------------------------------------- 827e0957a7 | Nicholas Feinberg | 2023-07-22 17:43:11 -0700 Halve siphon essence healing (elliptic) "That much healing is the realm of Borg's and gods." -------------------------------------------------------------------------------- 06437d6523 | Nicholas Feinberg | 2023-07-22 17:40:46 -0700 Make siphon essence exhausting (dilly) -------------------------------------------------------------------------------- 08a7bc6f2d | Nicholas Feinberg | 2023-07-22 16:46:21 -0700 Add serpent talisman to serpentskin sales (dilly) Sometimes! -------------------------------------------------------------------------------- 653cfed441 | Nicholas Feinberg | 2023-07-22 15:22:58 -0700 Bump dreadful rot duration -------------------------------------------------------------------------------- 7b4e30badb | Nicholas Feinberg | 2023-07-22 15:07:48 -0700 Remove Djinn legs (Goratrix, Monkooky) This code is abysmal ;_; -------------------------------------------------------------------------------- 1e5ebcb2c6 | Nicholas Feinberg | 2023-07-22 15:00:04 -0700 Make dragon-form players red in the face (Sastreii) New tiles for dragon form (including making the default form red, following on from fd539b1f27069, 2015), plus Siphon Essence. -------------------------------------------------------------------------------- 810772c3d7 | Nicholas Feinberg | 2023-07-22 14:50:32 -0700 Rework Lucy wrath protection (elliptic) Give a fixed 80% chance of banishing god wrath summons (and other perma summons, due to code sloppiness) and a 30% chance of banishing other monsters nearby, rather than banishing 2d3 random monsters whenever god wrath triggers. -------------------------------------------------------------------------------- e7fe003f5b | Kyle Rawlins | 2023-07-22 12:47:48 -0400 lint -------------------------------------------------------------------------------- b41548654e | Kyle Rawlins | 2023-07-22 10:51:13 -0400 fix: several tutorial end issues * The tutorial summary popups have had broken formatting since 8e7229f42b641c00. This lets ui::message take color formatting optionally and uses it for this case. * Give tutorial summary popups titles, and remove a manually formatted prompt that was hardcoded in the database, now that the popup is more standardized. Also reword the prompt for exit popups. * tutorial exit conditions were also broken; this mostly shouldn't matter but may affect a popup on webtiles * convert the tutorial death message to a popup with text from the database, rather than a hard-coded popup -------------------------------------------------------------------------------- 1ebeae05c6 | gammafunk | 2023-07-22 00:28:01 -0500 feat: Aiming at targets with `spells.path()` Give this clua function a new argument to set whether it should aim its bolt directly at the target, which is the same logic used by the '.' key in the targeting UI. Previously the function always did this, so this new argument defaults to true. The argument is useful for callers to determine whether the full range bolt would hit e.g. friendly monsters or locations that could destroy thrown ammunition. -------------------------------------------------------------------------------- d109795599 | Nicholas Feinberg | 2023-07-20 17:34:17 -0700 Remember to sign your work -------------------------------------------------------------------------------- 456c268693 | gammafunk | 2023-07-20 16:28:19 -0500 feat: Tweak a Shoals vault For nicolae_shoals_abyss_on_the_beach, have loot placed near the Abyss portal instead of on top of it and the Lugonu altar, since this way it's easier to see the loot items at a glance. Add one more star_item to the loot, bringing the total to three items, so that this runed door vault is a bit more worthwhile to enter. This very slightly decreases the average monster placement but still gives it a 2:1 ratio for monsters to loot. -------------------------------------------------------------------------------- 64bd43a5d1 | Nicholas Feinberg | 2023-07-20 13:33:47 -0700 Fix: mark granite talismans useless for gr (N0-LGA) And some code deduplication. -------------------------------------------------------------------------------- 956748295d | Nicholas Feinberg | 2023-07-20 13:33:44 -0700 Add missing logo (gammafunk) -------------------------------------------------------------------------------- 21cae6e6d1 | Nicholas Feinberg | 2023-07-20 13:15:34 -0700 New Eustachio splash (CanOfWorms, King7artist) -------------------------------------------------------------------------------- da1cbd555d | Nicholas Feinberg | 2023-07-19 13:00:19 -0700 Rework Arcjolt Requiring direct adjacency to victims made it a bit harder to set up cool chains of electrocution than was intended. Allow hitting anything within radius 2 (and conducting from there as previously). We may have to nerf damage later, which is fine. Fix the bug that allowed Hep's ancestors to conduct Arcjolt blasts. -------------------------------------------------------------------------------- 91d0a87a8a | Nicholas Feinberg | 2023-07-19 12:41:12 -0700 Don't give /digging to monsters (Ge0ff) Since they can't use it anymore. -------------------------------------------------------------------------------- e6599b31ac | Nicholas Feinberg | 2023-07-19 11:04:36 -0700 Fix treeform not scaling damage with UC (acrobat) Broken somewhere during the shapeshifting changes. -------------------------------------------------------------------------------- 889dc8f05a | Nicholas Feinberg | 2023-07-19 10:17:29 -0700 Encourage Shapeshifting training Reduce max skill for tier 2 forms (maw, serpent, blade) from 20 to 18. This makes each level of shapeshifting give ~20% more stuff. -------------------------------------------------------------------------------- 67f8d5f464 | Nicholas Feinberg | 2023-07-19 10:14:54 -0700 Gobble down some transformative tiles (Sastreii) New tiles for maw form and felid dragons. -------------------------------------------------------------------------------- f858018070 | Nicholas Feinberg | 2023-07-19 09:43:25 -0700 Fix: remove Necromutation (wormbird) From Crypt loot. -------------------------------------------------------------------------------- dd4830dc55 | Nicholas Feinberg | 2023-07-19 09:40:47 -0700 Revert "Increase local tiles default font sizes (ortoslon)" Revealed many latent bugs that I don't have time to fix and caused unhappiness in various circles. This reverts commit 4ac5daa9c1ac0adffcccbb193fca521ebfc9f310. -------------------------------------------------------------------------------- 82a5723daf | Nicholas Feinberg | 2023-07-19 09:40:02 -0700 Shapeshifter: +1 UC, -1 Fighting (elliptic) Push the background a little more toward UC, since at present it's a little too tempting to immediately switch to an early weapon. A good weapon should still be tempting... it's a balance. -------------------------------------------------------------------------------- eda263fcf1 | elliptic | 2023-07-18 21:09:36 -0400 Fix form AC scaling. This was accidentally reduced when current skill was below the max skill in 5cd03af36. I've rounded down to get the new value at min skill, which is a small nerf (but the new FormScaling system is a buff below min skill in general). -------------------------------------------------------------------------------- d7f53cfe47 | elliptic | 2023-07-18 21:09:36 -0400 Fix mawform aux damage. This was accidentally reduced by 9 in f44f7adfa. -------------------------------------------------------------------------------- 52107efa6a | Nicholas Feinberg | 2023-07-18 13:45:34 -0700 Merge Labyrinth and Temple (hellmonk) Cute gimmick map made maybe less goofy with temple automapping. Could also do another version where the altars are in the middle, but maybe that's too much. -------------------------------------------------------------------------------- c0898b9bfa | Nicholas Feinberg | 2023-07-18 11:23:28 -0700 Cleanup: tweak trove.des empty space Hoping I can sneak this by some folks and give em a fun surprise later with the misleaing commit message. If you spot this, don't give the game away! Just add a smiley face on the commit :) -------------------------------------------------------------------------------- f719d907db | Nicholas Feinberg | 2023-07-18 11:07:31 -0700 Remove nasty troves Monsters in troves are just a mean gotcha. They mostly don't matter, but they'd feel quite bad if they ever did. Let's cut the ynoxinuls (pointless) and shining eyes (!!!) from their respective troves. -------------------------------------------------------------------------------- ba68ff8b13 | Nicholas Feinberg | 2023-07-18 10:26:34 -0700 Add about 27 new species To the artefact name pool. -------------------------------------------------------------------------------- 067879e3d3 | Kate | 2023-07-17 21:47:31 +0100 Update map knowledge when fully mapping levels (qwqw) Fixes discovered altars in the mapped Temple not being searchable, and in theory makes it possible to turn on mapping for Gauntlets (although there are still other issues - revealing the end loot immediately isn't ideal). -------------------------------------------------------------------------------- b7aa00794e | Nicholas Feinberg | 2023-07-17 12:48:57 -0700 Fix miasma exclusions in nonliving forms (Monkooky) Ew! -------------------------------------------------------------------------------- aec59ea282 | Nicholas Feinberg | 2023-07-17 10:25:18 -0700 Change talisman console glyph (jejorda) To support the default PuTTY font. -------------------------------------------------------------------------------- 4ddeb37ba4 | Nicholas Feinberg | 2023-07-17 10:20:00 -0700 Fix form base damage Oops! -------------------------------------------------------------------------------- 19405a7a6a | Nicholas Feinberg | 2023-07-17 08:24:47 -0700 Fix lig AC -------------------------------------------------------------------------------- adbfe6a7a0 | Kyle Rawlins | 2023-07-17 10:23:50 -0400 fix: refactor / improve some local tiles menu shade logic This fix also addresses what (in the old implementation) was an off-by-one error that could lead to crashes in size 1 menus on local tiles. Resolve #3204 -------------------------------------------------------------------------------- 4fced400ed | Nicholas Feinberg | 2023-07-16 20:37:48 -0700 Fix maw bite chance (Monkooky) Since this isn't a mutation but rather an item-based effect, it doesn't need to scale with XL. (It already scales with skill.) Fix the chance at 50%. (Formerly ~53% at XL1, ~96% at XL 27.) -------------------------------------------------------------------------------- cff7bd0079 | Nicholas Feinberg | 2023-07-16 17:03:24 -0700 Fix: don't crash on startup (steves) Oops! -------------------------------------------------------------------------------- f44f7adfac | Nicholas Feinberg | 2023-07-16 16:21:24 -0700 Unify more shapeshifting logic with FormScaling -------------------------------------------------------------------------------- fc52928797 | Nicholas Feinberg | 2023-07-16 16:17:16 -0700 Dataify UC base damage And buff blade/dragon form slightly, mostly for aesthetic reasons. -------------------------------------------------------------------------------- 5cd03af367 | Nicholas Feinberg | 2023-07-16 16:03:10 -0700 Refactor form AC Hopefully this leads toward more readability. -------------------------------------------------------------------------------- e76ace5867 | Nicholas Feinberg | 2023-07-16 15:10:40 -0700 Adjust transformation HP scaling (Sergey, CanOfWorms) New and exciting tech: - Enter an underskilled form to regen to your max (10%) HP very quickly, then switch out to be back at full HP. - Leave dragon form to heal 50% faster, then switch back in when done. This commit fixes both issues. It's a little weird when entering anaconda/dragon form, but eh, we'll live. -------------------------------------------------------------------------------- 785cd24033 | Nicholas Feinberg | 2023-07-16 14:38:36 -0700 Remove an unused calc_hp parameter -------------------------------------------------------------------------------- fa1e89e327 | Nicholas Feinberg | 2023-07-16 14:18:18 -0700 Fix tabbing through water in anaconda form (dilly) -------------------------------------------------------------------------------- edf3814b65 | Nicholas Feinberg | 2023-07-16 14:01:14 -0700 Are (ragingrage) Continuing from 3fc6992b3bdcffd37177a7bdf94e09f15f2840b7. -------------------------------------------------------------------------------- 9f8154dce0 | Nicholas Feinberg | 2023-07-16 13:58:20 -0700 New talismans (Sastreii) Plus corresponding descriptions. Serpent talisman might want another pass. -------------------------------------------------------------------------------- 7df5254b3a | Nicholas Feinberg | 2023-07-16 13:58:11 -0700 New ancient lich tile (Sastreii) -------------------------------------------------------------------------------- edc87ead1b | Nicholas Feinberg | 2023-07-16 13:39:08 -0700 Re-tweak Sac Artifice description -------------------------------------------------------------------------------- 8f428e28dd | Nicholas Feinberg | 2023-07-16 13:37:21 -0700 Tweak Dowan dialogue For many years, people unfamiliar with archiac English idioms have been understandably startled by Dowan's charming folkways. Let's accènt this encounter a bit diffèrèntly. -------------------------------------------------------------------------------- 3624f24208 | Kate | 2023-07-16 18:56:43 +0100 Fully map the Temple on entering Adds a new flag for fully mapped branches, and refactors magic mapping to handle full mapping with a parameter instead a special-cased radius check. Fully mapped floors provide no exploration healing or piety, and have no exploration traps (which was already true for the Temple except for the healing). It would be nice to also map Gauntlets on entry but there are some extra things to resolve there - as implemented, monsters and items aren't mapped, but displaying them would also reveal the minotaur's treasure immediately (and removing Meteoran exploration healing would be a bit more meaningful in Gauntlet than in Temple). -------------------------------------------------------------------------------- 165d99f333 | Kate | 2023-07-16 18:54:48 +0100 Recolour talismans of death To magenta, instead of a mostly darkgrey elemental colour. -------------------------------------------------------------------------------- 53e30a7d5b | Kate | 2023-07-16 16:26:52 +0100 Show inaccuracy on the % screen -------------------------------------------------------------------------------- dc8c9485ea | Nicholas Feinberg | 2023-07-15 22:56:34 -0700 Loose a terrible wrath upon forms Reduce damage for anaconda, blade, dragon, and storm forms. Halve maw healing chance. Slightly reduce storm form AC. Further changes probably en route for death and statue form. Let's play around and see. -------------------------------------------------------------------------------- 8e918b0104 | Nicholas Feinberg | 2023-07-15 22:42:15 -0700 Make Dragon min/max skill match Statue (elliptic) To reduce the gap between tier 2 and 4 forms. -------------------------------------------------------------------------------- 0f5680fe28 | Nicholas Feinberg | 2023-07-15 22:41:18 -0700 Increase max HP penalty for shapeshifting From -70% to -90%. -------------------------------------------------------------------------------- 4ac5daa9c1 | Nicholas Feinberg | 2023-07-15 22:32:33 -0700 Increase local tiles default font sizes (ortoslon) For readability. This feels weird to me but maybe I'll get used to it. Or maybe I'll revert it! The old defaults were set up for 1024x700, anyway, which seems absurd. Closes #3116. -------------------------------------------------------------------------------- ecf8365d7c | Nicholas Feinberg | 2023-07-15 22:18:10 -0700 Tweak ?fear description (OctopodesWeekly) -------------------------------------------------------------------------------- 51639376c0 | Nicholas Feinberg | 2023-07-15 22:15:59 -0700 Bearly fix fear references (OctopodesWeekly) -------------------------------------------------------------------------------- ce7730605e | Nicholas Feinberg | 2023-07-15 22:09:15 -0700 Fix Tomb Fo shaft warning (WizardIke) Broken in 4d237caa85e2dd7638bbde1e443ca14111cf8674. Closes #3181. -------------------------------------------------------------------------------- 94ca0303d8 | Nicholas Feinberg | 2023-07-15 21:58:00 -0700 Fix stat display on untransform (MIC132) Closes #3199. -------------------------------------------------------------------------------- 6747c968d8 | Nicholas Feinberg | 2023-07-15 21:49:45 -0700 Tweak Talisman of Death description (jejorda) Closes #3201. -------------------------------------------------------------------------------- 8761c469a7 | Nicholas Feinberg | 2023-07-15 21:43:01 -0700 Remove unused conflicts -------------------------------------------------------------------------------- 6babd820d0 | Nicholas Feinberg | 2023-07-15 21:42:43 -0700 Fix the tag upgrade build? -------------------------------------------------------------------------------- 31dc95f928 | Nicholas Feinberg | 2023-07-15 20:29:06 -0700 Add talismans to ?? -------------------------------------------------------------------------------- 3d276fc77b | Nicholas Feinberg | 2023-07-15 20:23:45 -0700 Let final effects fire during Serpent's Lash (N0-LGA) Seems a little more intuitive to people that e.g. damage mirroring, TRJ spawns, ?immo fire etc would happen right after a serpent's lash attack, even before time unfreezes. -------------------------------------------------------------------------------- 8d65735525 | Nicholas Feinberg | 2023-07-15 20:14:08 -0700 Tag MUT_NO_REGENERATION for removal In the unlikely day we ever break major version support. -------------------------------------------------------------------------------- dca1076213 | Nicholas Feinberg | 2023-07-15 20:08:16 -0700 Continue removing monster potion use Continuing from e8cad7f256b05d and 35f977ffcd317870459. Fun bit here: friendlies wouldn't drink !inv if the player didn't have sinv! How many years has *that* been irrelevant for... -------------------------------------------------------------------------------- 8f4bdadfad | Nicholas Feinberg | 2023-07-15 19:57:38 -0700 Play with unique talismans Add dragon-blood talisman to Bai Suzhen (she was on my short-list initially, and was a popular suggestion from others, e.g. elliptic), and reduce the odds of some other talismans to a coinflip. Aizul stays guaranteed (since that serpent talisman is more flavor than value at the point it appears - until we upgrade it to a randart?!), and Roxanne is of course iconic. -------------------------------------------------------------------------------- c5ec2c201f | Nicholas Feinberg | 2023-07-15 19:57:38 -0700 Fix statue form pop distribution Some testing code was left in. -------------------------------------------------------------------------------- f123eb1c33 | gammafunk | 2023-07-15 18:38:27 -0500 fix: Correct syntax in an overflow altar vault A syntax error in `beargit_hepliaklqana_dungeon_heroes` I noticed from error messages during objstat runs. -------------------------------------------------------------------------------- 2c8c3c2ad7 | Nicholas Feinberg | 2023-07-15 16:18:42 -0700 Tweak maw form / gozag warning (elliptic) -------------------------------------------------------------------------------- 9f2073e164 | Nicholas Feinberg | 2023-07-15 16:09:03 -0700 Remove MUT_ -------------------------------------------------------------------------------- 3a27601e74 | Nicholas Feinberg | 2023-07-15 16:07:12 -0700 New mutation tiles (CanOfWorms) Mostly demonspawn stuff, but some other fun is there too. Also some renames for tidiness and consistency. -------------------------------------------------------------------------------- e85e653229 | Nicholas Feinberg | 2023-07-15 15:46:10 -0700 Improve monster output for talismans -------------------------------------------------------------------------------- c43c3f5763 | Nicholas Feinberg | 2023-07-15 15:46:10 -0700 Clarify Sac Artifice re talismans (Flugkiller) -------------------------------------------------------------------------------- d17712608e | Nicholas Feinberg | 2023-07-15 15:46:10 -0700 Fix double-double corpse combo (N0-LGA) If you're in maw form, Yred should make spectres, not zombies. You ate those corpses! -------------------------------------------------------------------------------- 146b5e124f | Nicholas Feinberg | 2023-07-15 15:46:10 -0700 Add messaging for Gozag gold maw form Feeling cute, might delete this mechanic later. -------------------------------------------------------------------------------- 485e682e34 | gammafunk | 2023-07-15 15:51:00 -0500 feat: Tweaks to a Lair ending (elliptic) For hellmonk_lair_end_abyssal_woods, don't try to place Mlioglotl with a rare chance. For branch ends, we generally don't place `8` level threats since the end vault is both important and already has a high difficulty. We try to keep difficulty a bit more consistent for these maps, and Mlioglotl is a fast and very hard hitting monster. Due to a slight bug in my DES when I modified this vault that wasn't caught when the unique was added to it in ae8ea5ec392b, Mlioglotl couldn't actually generate, but let's just make this official. Also replace the ancient zymes in this vault with a raiju. The zyme sickness mechanic really only works in the Abyss, where having no regen for any amount of time is impactful and resting or moving is a non-trivial decision. Although the damage profile of a zyme is fine, raiju is quite similar, is also an Abyss native, and its unique mechanic is fine for Lair. -------------------------------------------------------------------------------- 31ea1f65cc | Nicholas Feinberg | 2023-07-14 18:27:11 -0700 Fix talisman shopping lists (Midn8, elliptic) -------------------------------------------------------------------------------- e00219d475 | patrick | 2023-07-14 15:47:04 -0500 Make some tweaks to the jellycorners ending Make the center "towers" of the corners more likely (though not guaranteed) to create fighting niches, and provide more walls to potentially make more niches. You might still have to dig out a block or two of slime to get a good niche, though. -------------------------------------------------------------------------------- 988e38f321 | patrick | 2023-07-14 15:47:04 -0500 Add a new Slime Pit ending In my earlier set of Slime Pit endings, I had one ending that was intended to be easier than normal, with a lot of corridors. It turned out to be even easier than I thought thanks to the abundance of glass walls: TRJ could see the player but wouldn't move around the walls to get to them, instead staying where it could see them. When I merged the vaults, I dropped that one ending, thinking I would get around to making another corridor-heavy vault some other time. I wasn't expecting "some other time" to be "a day or two later", but inspiration strikes when it wants. Anyway: slime_pit_nicolae_block_by_block: Features a number of corridors with the slime walls mostly confined to the edges, and more narrow areas as you get closer to the center. -------------------------------------------------------------------------------- c3c14f638d | Nicholas Feinberg | 2023-07-14 10:47:39 -0700 Prompt on unsafe untransform (elliptic) Via the ability. (The evoker already prompted.) -------------------------------------------------------------------------------- a29a1f0fbb | Nicholas Feinberg | 2023-07-14 10:40:44 -0700 Let anacondas autoexplore through deep water (elliptic) -------------------------------------------------------------------------------- 704a3bb60e | Alvin | 2023-07-14 07:01:07 -0700 fix beargit_hepliaklqana_dungeon_heroes formatting remove unneeded "\" -------------------------------------------------------------------------------- b88eb75e06 | Nicholas Feinberg | 2023-07-13 21:31:11 -0700 Talisman tiles (Sastreii) Well, some of these are Sastreii. Some aren't. Guess which? -------------------------------------------------------------------------------- 50393794a2 | Nicholas Feinberg | 2023-07-13 21:30:41 -0700 Make Blade Hands damage scale with skill again For felids and other non body armour users to have some justification to train shapeshifting. A sop. -------------------------------------------------------------------------------- 3aca3be9df | Nicholas Feinberg | 2023-07-13 20:37:45 -0700 Simplify UC accuracy bonus Remove bonus accuracy for throwing and for claws; add more flat accuracy for UC generally and remove the extra skill-based bonus. -------------------------------------------------------------------------------- 4392ee761c | elliptic | 2023-07-13 22:58:10 -0400 Fix display of max maw damage. -------------------------------------------------------------------------------- 3fc6992b3b | Nicholas Feinberg | 2023-07-13 13:43:01 -0700 To -------------------------------------------------------------------------------- cc2c45dbe4 | Nicholas Feinberg | 2023-07-13 13:41:45 -0700 Tweak prunes (Undo) -------------------------------------------------------------------------------- cf7e37af1d | Nicholas Feinberg | 2023-07-13 11:22:42 -0700 Fix aptitudes generation (N0-LGA) -------------------------------------------------------------------------------- a0b03e459d | Nicholas Feinberg | 2023-07-13 10:05:51 -0700 Feat: pyrna hc fbzr ehqrarff Hfr n ebg13-"pvcurerq" yvfg bs fyhef naq bgure ehqr jbeqf gb qvfpbhentr gur anzr trarengbe sebz guebjvat ernyyl anfgl fghss bhg gurer. Cynlshyyl, ercynpr gur ehqr jbeq jvgu gur ebg13'q rdhvinyrag, fvapr gubfr npghnyyl ernq cerggl jryy. Jr pbhyq rkcnaq ba guvf naq nqq zber gb gur yvfg va shgher, nqq shmml zngpuvat, rgp. -------------------------------------------------------------------------------- e8cad7f256 | Nicholas Feinberg | 2023-07-12 23:08:12 -0700 Remove monster potion use As with 35f977ffcd317870459, we have more fun ways to create difficulty. -------------------------------------------------------------------------------- 35f977ffcd | Nicholas Feinberg | 2023-07-12 22:56:17 -0700 Remove monster scroll use This almost never came up these days (since monsters could only use ?summoning, and the relevant bailey vault now set those as no_pickup), and it was mostly frustrating when it did. Crawl has many exciting ways to add difficulty spikes - unique enemies, out-of-depth foes, nasty vaults, malevolence effects... it doesn't need to add item destruction into the mix. -------------------------------------------------------------------------------- 072fdb8a1f | Nicholas Feinberg | 2023-07-12 21:44:27 -0700 Give Death Form its willpower back (elliptic, Lightli) Confusion without !curing is a very special gift. -------------------------------------------------------------------------------- 1326d75512 | Nicholas Feinberg | 2023-07-12 21:40:58 -0700 Fix Siphon Essence description -------------------------------------------------------------------------------- 771a54ca4b | Nicholas Feinberg | 2023-07-12 17:25:21 -0700 Remove anti-snake discrimination (acrobat) Remove the -cast penalty on anaconda, since it didn't really have a strong justification for existence. -------------------------------------------------------------------------------- d316b798dc | Nicholas Feinberg | 2023-07-12 17:08:07 -0700 Add extra accuracy for UC skill Compensate for loss of form-based secret accuracy bonus. -------------------------------------------------------------------------------- f185e81a89 | Nicholas Feinberg | 2023-07-12 15:06:28 -0700 Re-add Begin Untransform ability (Ge0ff et al) ;_; -------------------------------------------------------------------------------- 80acddb972 | Nicholas Feinberg | 2023-07-12 14:15:33 -0700 Remove undocumented UC accuracy bonus (Mike) Simplifying and slightly nerfing UC. -------------------------------------------------------------------------------- 9c3d1c461a | Nicholas Feinberg | 2023-07-12 12:25:24 -0700 Make Trog block pain brand Rather than forbidding it, make Trog disable pain brand while worshipped, as if the weapon was brandless. This should avoid some random annoyances when e.g. finding an early enchanted pain weapon. -------------------------------------------------------------------------------- 800c682d7f | Nicholas Feinberg | 2023-07-12 12:10:06 -0700 Deduplicate evil -------------------------------------------------------------------------------- 473bed0ee8 | Nicholas Feinberg | 2023-07-12 12:07:36 -0700 Make ?/L less gloomy (nicolae) Don't show removed clouds in the cloud help screen. -------------------------------------------------------------------------------- c4385922b5 | Nicholas Feinberg | 2023-07-12 11:57:54 -0700 Make MCC create an electric haze Goofy visuals for blowing someone up with maxwell's capacitative charge. -------------------------------------------------------------------------------- dc1e01ee57 | Nicholas Feinberg | 2023-07-12 10:53:29 -0700 Fix felid statue form horns (dilly) Broken by 8cd43ee5b5aa39107ad42fefe57e79ae61008c11. -------------------------------------------------------------------------------- 2fffdecd26 | Nicholas Feinberg | 2023-07-12 10:45:51 -0700 Fix dragon form max AC display (elliptic) -------------------------------------------------------------------------------- 43b936b0e3 | Nicholas Feinberg | 2023-07-12 10:44:34 -0700 Fix talismans marking evo trainable (dinky) Also, zigfigs. -------------------------------------------------------------------------------- 3dc27fa2b3 | Nicholas Feinberg | 2023-07-12 10:36:00 -0700 Nerf red draconians (Ge0ff) Forgot to set their shapeshifting to -2 when I was adjusting every other species. -------------------------------------------------------------------------------- cfcdfa2135 | Nicholas Feinberg | 2023-07-12 10:35:50 -0700 Add a comment -------------------------------------------------------------------------------- 8cbcc1cb85 | Nicholas Feinberg | 2023-07-11 20:09:14 -0700 Give monsters infinite wand ammo (gammafunk) Following on from d7dd4bcd532, make monsters not use up charges when they zap you with wands. This feels nice for the player - you aren't "wasting" charges by not killing enemies fast enough! Remove monster use of /digging to avoid new goofiness. -------------------------------------------------------------------------------- 985e0631fc | Nicholas Feinberg | 2023-07-11 19:07:09 -0700 Fix the build? -------------------------------------------------------------------------------- 295e72b191 | Nicholas Feinberg | 2023-07-11 18:01:21 -0700 Try to clarify "reflection description Don't imply that it blocks attack in some way other than via shielding. Do clarify that *all* blocked attacks will be reflected. -------------------------------------------------------------------------------- 2f84412e23 | Nicholas Feinberg | 2023-07-11 17:57:03 -0700 Add a fun phial of floods recharge message There's room for more of these from the other evokers, but no need to force it. -------------------------------------------------------------------------------- 5adf0113ea | Nicholas Feinberg | 2023-07-11 17:53:41 -0700 Refactor XP evoker recharge messages -------------------------------------------------------------------------------- 00f4a5a00c | Nicholas Feinberg | 2023-07-11 17:31:05 -0700 Blade Hands -> Rapier Hands (gammafunk) It's a bit overly fiddly now to have blade hands users swap forms to deal with hydras, so make blade hands do piercing damage (ala sbl) instead of slashing damage (ala lbl). We'll nerf it again later. -------------------------------------------------------------------------------- b923e448b6 | elliptic | 2023-07-11 15:28:43 -0400 Remove a Shields skill breakpoint. Raising Shields skill to 3 was extremely cheap anyway, so let's remove a spoilery breakpoint. This is a tiny buff to players with 0 shield skill (and a shield equipped), who now get 0.57 extra SH. Players with 3 or more Shields skill are unaffected. -------------------------------------------------------------------------------- 0a1456f148 | Nicholas Feinberg | 2023-07-11 10:25:51 -0700 Refactor gods disliking brands -------------------------------------------------------------------------------- 1880023187 | Nicholas Feinberg | 2023-07-11 08:03:40 -0700 Tweak forms This change is intended to allow more opportunities for players to shift into or out of a 'transmuter' playstyle, to improve the UI of forms, and to improve some miscellaneous issues, e.g. Lichform being useless in 3-rune games. For more context, see https://github.com/crawl/crawl/wiki/Transmutations-Reform. Throughout, balance is a very rough sketch. I expect many things will need to be buffed, others will need to be nerfed, and some will need to be replaced entirely. This is a grand experiment, not a final state. Talismans --------- The largest change is that forms are no longer entered via spells. Instead, special items called 'talismans' must be found and evoked. Once entered, these 'talisman forms' last indefinitely. Further notes on talismans: - Talismans scale only on Shapeshifting skill (more on this later). They do not care about Int, Spellcasting, other spell schools, wizardry, or encumbrance. (That is, they aren't spells.) - Talisman forms have a 'minimum skill'. Below that skill, entering the talisman form will reduce the user's maximum HP (while in the form). This is intended to roughly mimic the inability to effectively cast spells at low skills/high fail% - it provides a space in which an 'early' form can be better than a 'later' one, even if you've found both. - Talisman forms have a 'maximum skill'. Above that skill, no further scaling applies. This is intended to roughly mimic max spellpower - it makes it more obvious that later-game forms will end up outscaling earlier ones. - It takes 5 turns to enter or leave a talisman form, exactly as with armour or amulets. Use of a talisman form is intended to be a strategic decision, again like wearing armour, rather than something swapped in each fight. - Talismans don't need to be held after they're used. You can evoke them from the floor and leave them there. This avoids inventory pressure. - Talismans can be used with Sacrifice Artifice, since they don't use Evo. - Zin instantly excommunicates users of a talisman. Take that, nerds! - Trog is A-OK with talismans, just as with wands, magic swords, etc. Art for talismans is pending. Skills ------ Transmutations skill has been split in two. Talismans use a new skill, Shapeshifting, and remaining Transmutations spells (of which there are still nine, more than one other school!) continue to use Transmutations skill. There was very little synergy or overlap between forms and Tmut spells, and this makes it easier to make skilling decisions. Some argue that Transmutations should be abolished entirely and its spells punted into other schools; we'll see. Shapeshifting aptitudes look broadly like Transmutations aptitudes, with a -2 penalty applied so that forms are costly enough now that they're all "single-school" and don't require Int. (That is, Humans have a Shapeshifting apt of -2, etc.) A few species have had their apts adjusted to account for the new role of Shapeshifting, but more could be done here. Background ---------- The Transmuter background has been replaced with a Shapeshifter, who starts with a beast talisman and no spells. Their stats have been adjusted accordingly. Forms ----- The following forms exist: *Beast*: This is the starting form for the Shapeshifter background. It melds all aux armours in exchange for a Slaying bonus (ala Wereblood) - +2 at 0 skill, +8 at 13 skill (max). This is intended to provide a bonus which is compelling early game (when no or few aux armours have been found) but more tenuous later, especially for non-transmuters. It's also intended to provide a bridge between Tmut and weapon use, since a transmuter who finds a great weapon can switch from UC to that weapon without giving up their form and Tmut training. Beast form allows use of body armour so that it can present a reasonable slay-for-AC tradeoff without becoming overly strong for 'dex-based' characters, who wouldn't mind losing body armour nearly as much. *Anaconda*: This is a tier 2 form. Anaconda form turns you into a giant anaconda. All your items meld, you can constrict, you get some AC and an HP bonus... This is intended to replace Ice Form, a form to help transmuters transition into the mid-game. The rF- of Ice Form is less appropriate for early-game characters who can no longer switch between forms, and Ice Form is not evocative - no one gets Ice Beasts. On the other hand, turning into a snake... everyone gets that. That's the dream. Limbs are for dorks. Ssssss *Maw*: This is a tier 2 form. Maw form melds the body slot, transforming it into a giant mouth, ala the Brazilian Mapinguari. The maw provides an aux attack with damage that scales on Shapeshifting skill. It also has the old Hydra form devour-on-kill-for-hp gimmick, since everyone loved that. This is intended to be a way that Shapeshifters can transition into the mid-game, especially transmuters who use weapons. It's probably a bit too strong for quick blade users at present - perhaps I'll give it +str -dex, or something. (It may also just be too strong in general - numbers are WIP!) *Blade*: This is a tier 2 form. It's blade hands. To compensate for it being easier to enter, its UC damage has gone down slightly (22 -> 18). It also now gives a deformed body-like AC penalty based on base body armour AC, scaling from a 100% penalty at min Shapeshifting skill to 0% at max skill. (That is, at min skill, +2 plate armour will just give you +2 AC, plus whatever you get from Armour skill.) This is intended to model the dynamic of old Blade Hands - pure glass cannon when you can only cast it in robes, later on more usable in actual armour. Your body is deformed because there are blades inside. Aaiiii! This is intended to be another way that Shapeshifters can transition into the mid-game. *Statue*: This is a tier 3 form. It's statue form. Intended to be a way for transmuters to head into late-game while still being able to use weapons, if desired. Might need to be a bit stronger for weapon users. *Dragon*: This is a tier 3 form. It's dragon form. AC and UC damage now scale slightly with Tmut skill. Intended to be a way for transmuters to head into late-game. Possible this should be tier 4 and Storm should be tier 3 - dragons are cool! Dragons should be the best! *Storm*: This is a tier 4 form. It's storm form. Intended for players who want to dump ludicrous amount of skill XP into tmut. Top end has been adjusted somewhat downward. *Death*: This is a tier 4 form. Replacing Necromutation/Lich Form, Death Form makes you dead (no drinking potions, holy wrath/dispel undead vuln, rC, rTorm, rPois, etc) and also gives you an assortment of spicy powers. On hit (with melee/UC), victims get slowed, weakened, and heavily drained. There's also a new active, Siphon Essence, which costs 20 (!) MP, halves the HP of all enemies in radius 2, and heals you based on damage dealt and Tmut skill. (That works on all non-MH_NONLIVING enemies, as do the debuffs.) It no longer provides innate AC or Will, nor does it give a necro enhancer. Its UC damage is now significantly higher, comparable to blade hands, though still much lower than Statue, Dragon or Storm. This is intended to be a way for players who want to spend huge skill XP on tmut to do so, including those who use tmuts + weapons. It's intended to feel a bit different from other forms while still being competitive in melee. Other forms have huge base damage - Death Form has lower damage but very strong debuffs. Other forms have AC (Statue), HP (Dragon) or EV (Storm) - Death Form gives Siphon Essence as a very powerful survival tool. Other Notes ----------- Various books have been merged and consolidated to make up for the removal of eight spells. It *might* make sense to drop the book generation rate slightly, but I haven't done this yet. Some uniques now spawn with talismans. More could be done with this, e.g. placing talismans of death in Crypt. Later changes ------------- Talisman acquirement is a must. TODO. In the future, artefact talismans (i.e. randarts) could be interesting - to provide more excitement for rare finds. The randarts would have the usual panoply of properties (rF+, Dex-2, etc), which would apply while the player was in the relevant form. It'd be fun to add more form types, e.g. ones that work well for 'casters'. Might be interesting to have talismans start unidentified (like staves), for a frisson of excitement in gauntlets etc. Possibly Wanderers should get a chance to start with beast talisman? -------------------------------------------------------------------------------- 2d982f9f85 | Medrano83 | 2023-07-10 12:26:56 +0200 docs: comment the android game_scale management -------------------------------------------------------------------------------- 9a0961fb85 | Medrano83 | 2023-07-10 00:26:48 +0200 Fix lines longer than 80 characters in the options guide -------------------------------------------------------------------------------- 81891f999a | Medrano83 | 2023-07-09 23:53:55 +0200 Fix index of tiles options Some tiles options are missing in the option guide's table of contents. -------------------------------------------------------------------------------- ad7ace16ef | Medrano83 | 2023-07-09 16:51:19 +0200 Fix: If the menu is bypassed, the Android keyboard doesn't show This bug has been detected while testing qw on Android. -------------------------------------------------------------------------------- 139696dc86 | Nicholas Feinberg | 2023-07-07 10:24:14 -0700 Maybe fix a Makh targeter crash Probably caused by 1fc7ce93e22d3f740f665e9ced33f09dd8965dd7. I couldn't repro the crash locally. -------------------------------------------------------------------------------- b1c03b2570 | Nicholas Feinberg | 2023-07-06 13:12:24 -0700 Base Zot MHP penalties on base MHP Don't include things like Dragon Form when calculating MHP penalties from being zapped by the Zot clock. This should feel more fair to unfortunate Meteoran transmuters. -------------------------------------------------------------------------------- 51bb95cda3 | elliptic | 2023-07-06 13:36:18 -0400 Thundrous -> Thunderous. -------------------------------------------------------------------------------- 09eb5fc4d3 | patrick | 2023-07-06 12:34:53 -0400 Add no_dump to a subvault nicolae_letter_subblock is just a subvault that's used multiple times in the same larger vault and all of its variation is handled internally. The player gains no useful information from seeing it listed in the end-of-game dump a zillion times. -------------------------------------------------------------------------------- 1fc7ce93e2 | Nicholas Feinberg | 2023-07-05 15:15:03 -0700 Fix Makh's Major Destruction targeter (acrobat) And don't make Makh's targeters depend on DEBUGGING_RAY. -------------------------------------------------------------------------------- 0839b0fcba | Nicholas Feinberg | 2023-07-05 15:11:46 -0700 Fix flame wave + fedhas + trees (Monkooky) This probably fixes flame waves going through trees, maybe. I'm pretty leery of this code. -------------------------------------------------------------------------------- a22c3bf811 | Nicholas Feinberg | 2023-07-05 14:57:43 -0700 Feat: increase zombie tolerance If you bring a creature back from the dead as your mindless, horrifying servant, there's no way that they get mad if you ding 'em with the edge of a fireball or a Ford Pinto. They're just gonna take it. It's also bad gameplay for your undead summons to get mad when you bop em. So, make all zombies (and skeletons, and bound souls, etc) no longer become angered when you hurt them. Poor things. -------------------------------------------------------------------------------- 518fb64703 | Nicholas Feinberg | 2023-07-05 14:53:20 -0700 Show Noxious Bog damage Didn't bother setting this up for monsters. -------------------------------------------------------------------------------- f72db212d5 | Nicholas Feinberg | 2023-07-05 14:50:25 -0700 Show polar vortex damage -------------------------------------------------------------------------------- c2ff21d051 | Nicholas Feinberg | 2023-07-05 14:34:51 -0700 Add the Devil's own humor -------------------------------------------------------------------------------- b600c05fae | Nicholas Feinberg | 2023-07-05 14:34:51 -0700 Fix formless jellyfish constriction (Ge0ff) Being sz: small meant they couldn't constrict the vast majority of players, making their gimmick pointless. This partially reverts commit c79956ad2d5f7c16cb62790046a0fee3702d0713. -------------------------------------------------------------------------------- efeffbb62a | gammafunk | 2023-07-04 08:56:32 -0500 fix: Use the correct type for the minor version When reading the "chr" section, pass the read minor version as `uint32_t` and not `uint8_t`, since we converted minor version to the former in 43576957. Using the wrong type was truncating the minor version to 0, resulting in some erroneous unmarshalling that corrupted the value of `you.explore`, among possibly other things. Note: This fix was cherry-picked from ca8d4b91 in the talisman-why-not experimental branch, where the bug was noticed, but thankfully never triggered in trunk. Also remove an unused tag function and clean up a lack of whitespace. -------------------------------------------------------------------------------- bddc013574 | nicolae-carpathia | 2023-07-03 14:11:08 -0400 Add a few vaults in various places (#3087) Add a few decor vaults to mini_features.des, some simple overflow altars to overflow.des, and some monster vaults to mini_monsters.des. --- Ages ago, hellmonk said in the dcss channel: [1/1]: The tier 3 demons. They are: {sun demon}, {smoke demon}, {soul eater}, {neqoxec}, {ynoxinul}, {sixfirhy}. // EVIL HACK: — Today at 2:47 PM imo make some d vaults featuring these guys in about d:9-12 range So I did -------------------------------------------------------------------------------- c2f4f3cf83 | patrick | 2023-07-03 13:07:46 -0400 Add some new Slime Pit endings slime_pit: The main change was splitting out the various functions for making the clear walls disappear when TRJ dies. I also removed some downstairs glyphs, which were in there for some reason. I removed the "no_dump" tag, since now that there are variants, players might want to see which one they got. I also trimmed some excess walls off the edges to get the width less than 70 tiles, allowing the vault to be rotated, and accordingly removed the "no_rotate" tag. slime_pit_nicolae_amoeboid: A variation on the basic slime_pit theme -- stairs near the outer edge of slime walls, with stone, loot, and TRJ in the center. slime_pit_nicolae_inversion: Switching it around a little: stairs near an outer edge of stone walls, with loot and other decorative bits around the outer edge. The center holds slime walls and TRJ. As the comment notes, there is usually an acidless path to the center, but it's not guaranteed. slime_pit_nicolae_jellycorners: Instead of starting near the edge and working one's way inwards, you start at the center and work your way outwards. Here, TRJ is lurking in one of the square stone ruins in the corners. The decaying stone walls might end up providing a little niche to hide in, but also maybe not. slime_pit_nicolae_royal_road_to_ruin: For a bit, I considered a layout that was mostly just an A-to-B path, rather than mostly open areas the player can wander through; this concept was rejected and the map I'd made was turned into nicolae_slime_spelunking. The loot/TRJ section from that was kept and reused here. Here, the three stairs start in a mostly-open area, and then converge on the center together, turning into a short A-to-B path. Like slime_pit_nicolae_jellycorners, players will walk through decaying ruins of the pre-Slime civilization, which may or may not provide fightin' niches. slime_pit_nicolae_trefoil: A concept of 3-towards-1, in which there are three distinct paths to the center, and going from one upstair to another requires going through the TRJ zone. Here, there's quite a bit more loot, so there are more monsters to compensate. For all the new vaults, I mostly kept the same amount and ratios of monsters (types, numbers) and loot (* relative to |) as in slime_pit. That stuff is a pain to balance, and I figured it'd be easiest to go with what I know. I also didn't bother weighting any of the vaults; that can come later with feedback. -------------------------------------------------------------------------------- 8d62b2e7bb | Implojin | 2023-07-02 23:56:41 -0500 Give players the power of Friendship -------------------------------------------------------------------------------- 813d01f837 | Implojin | 2023-07-02 20:05:33 -0500 docs: update contrib docs tavern URLs -------------------------------------------------------------------------------- 58bb5d79cf | gammafunk | 2023-07-01 23:36:03 -0500 feat: Add games.d to gitignore This way you can have local configuration without it showing up in `git status`. Any changes to files in that dir actually in the repo will still be seen. -------------------------------------------------------------------------------- 22e908daa7 | Implojin | 2023-07-01 13:08:04 -0500 Add ctrl+f stash search tags for some consumables This commit adds resistance search tags to potions of resistance, lignification, enlightenment, and scrolls of revelation: e.g., searching for rF+ will now show any potions of resistance that exist. I've also updated the long descriptions of ligni and treeform here, to try to despoiler its rDrown behavior. -------------------------------------------------------------------------------- 8be760b2a8 | elliptic | 2023-07-01 09:41:34 -0400 Fix display of mud in console. Now it works like shallow water, recoloring items instead of hiding them. -------------------------------------------------------------------------------- b37851dbb3 | Nicholas Feinberg | 2023-06-30 13:10:45 -0700 If Tavern is so good, why isn't there a... Resolves #3172. -------------------------------------------------------------------------------- 2c6cdc7aa0 | Nicholas Feinberg | 2023-06-30 13:08:19 -0700 Fix: mass conf shouldn't hex charmed foes (acrobat) Specifically, this was an issue for allied monsters casting mass confusion. (i.e. the hexer Hepliaklqana ally.) -------------------------------------------------------------------------------- aee14a59e2 | Nicholas Feinberg | 2023-06-30 13:05:56 -0700 Fix felid horns Oops! Broken by adcf659a075821c4. -------------------------------------------------------------------------------- baa01a92c0 | Nicholas Feinberg | 2023-06-30 12:54:11 -0700 New Robe of Vines doll tile (Sastreii) -------------------------------------------------------------------------------- ccc998df9b | Nicholas Feinberg | 2023-06-28 07:54:40 -0700 Remove Chant Word of Entropy Gone since e0ef66670186d040d0d4af384bb9dffdff519f6f (2015). -------------------------------------------------------------------------------- 8757bd8695 | Nikolai Lavsky | 2023-06-28 16:36:04 +0300 fix: consider the ring of the Mage to be wizardly so Troglodytes don't autopickup this unrand. After 8fc9a925b, the ring of the Mage is completely useless for them. -------------------------------------------------------------------------------- db31a4691d | Nicholas Feinberg | 2023-06-27 21:52:27 -0700 Cloak your misdeeds (Sastreii) New tiles for Starlight, Dragonskin, Ratskin and the Thief. -------------------------------------------------------------------------------- 184df878d8 | Nicholas Feinberg | 2023-06-27 14:58:01 -0700 Pass an item_def& into evoke_item This is preparation for talismans. -------------------------------------------------------------------------------- b85abca632 | Nicholas Feinberg | 2023-06-27 14:50:51 -0700 Refactor evoke_check Don't pass slots into these functions. This is preparation for talismans. -------------------------------------------------------------------------------- 2cbb21b356 | Nicholas Feinberg | 2023-06-27 13:26:15 -0700 Fix Lucy wrath protection crashes (#3173) Introduced by be6b1f94854b4c053629de70abcc4c16dea3323d. Resolves #3173. -------------------------------------------------------------------------------- 7da18cac08 | gammafunk | 2023-06-26 19:22:13 -0500 fix: Remove an obsolete clua function The clua function `you.can_consume_corpses()` is no longer needed since no species can consume corpses any more. -------------------------------------------------------------------------------- 82f8529059 | gammafunk | 2023-06-26 18:59:00 -0500 feat: A wizard command to unobtain runes and Orb There's no existing convenient way to unget runes or the Orb of Zot, and for testing purposes it's nice to be able to do this. The ideal UI would present a toggle for each rune and the Orb, but that's more work to implement and it's easy enough to re-obtain runes/orb with the wizard mode item commands. -------------------------------------------------------------------------------- 547052bce9 | Nicholas Feinberg | 2023-06-25 16:12:54 -0700 Fix autoexplore on pf_just_have_faith (elliptic) Don't let greedy monsters ruin the joke. -------------------------------------------------------------------------------- ac7c113fc5 | Nicholas Feinberg | 2023-06-25 16:05:04 -0700 Fix: don't double-prompt for forbidden evokes Both use_an_item_menu() and evoke_item() called check_warning_inscription(), resulting in a double prompt when e.g. evoking /poly under Zin via V. I wouldn't be surprised if there were more bugs along these lines still lurking. -------------------------------------------------------------------------------- bc41564c69 | Kyle Rawlins | 2023-06-25 11:46:38 -0400 fix: convert a sanctuary ASSERT to a check This is somewhat theoretical, but, I think if a sanctuary ends exactly when changing level, and the coords that were the center of the sanctuary are in los on the new level, there's a sequencing issue in loading the new level where env.sanctuary_pos is reset, but the FPROPs aren't yet cleared (I'm 95% sure they do get cleared later in the level load process). This case triggered a crash on `is_sanctuary`. This commit tweaks things so that this simply isn't a crash, we don't check the FPROPs unless sanctuary_pos is set. This in principle would prevent identifying a class of bugs with the FPROPs not getting cleared, but I haven't run across such a bug in many years. Resolves #3170 -------------------------------------------------------------------------------- b898f60d1c | Kyle Rawlins | 2023-06-25 11:12:38 -0400 feat: cropped version of main logo This is not used in game, but it's very useful to have around as a branding asset. -------------------------------------------------------------------------------- 2ad674f65e | Nicholas Feinberg | 2023-06-24 13:30:58 -0700 Remove emergency_untransform Back when dropping into deep water would kill you instantly, it made some sense for players with natural swimming abilities (e.g. Mf, Op) to automatically leave non-swimming forms when they ended up over deep water without flight. (E.g., when !flight expired.) These days, there's less temporary flight around and emergency flight is available, so let's remove this complexity. -------------------------------------------------------------------------------- d3b2c1cad5 | Nicholas Feinberg | 2023-06-24 13:28:49 -0700 Increase Deal Four piety cost (Lici) Nemelex's Deal Four is cheaper than Triple Draw but generally more powerful, leaving little space for the former ability. Increase Deal Four's piety cost to be between Triple Draw's and Stack Five's. -------------------------------------------------------------------------------- 86fe4a5e66 | Nicholas Feinberg | 2023-06-23 18:14:31 -0700 Resist the urge to delete resistance (hellmonk, cool2) Oops! -------------------------------------------------------------------------------- 7586a6f1e9 | Nicholas Feinberg | 2023-06-23 17:51:26 -0700 Don't generate archmage ego robes (hellmonk) As an experiment, to encourage more use of mid-range armour and to compensate for the new enhancer staves. Randart archmagi robes can still appear. -------------------------------------------------------------------------------- 08f92feebc | Nicholas Feinberg | 2023-06-23 16:05:05 -0700 Halve generation of staff randarts (acrobat) Compensation for new multi-enhancer staff randarts in 4aa6249778bc. -------------------------------------------------------------------------------- dfe2569204 | gammafunk | 2023-06-23 17:30:45 -0500 fix: Prevent monster generation in a vault (CanOfWorms) For `dk_yredelemnul_ordeal`, don't generate monsters in this as it has both themed monsters of its own as well as a sealed area where it would be odd to generate monsters. -------------------------------------------------------------------------------- a50d7bf3bb | gammafunk | 2023-06-23 16:45:59 -0500 feat: Tweak a runed door vault (CanOfWorms) For `lemuel_bear_cage`, add `no_monster_gen no_item_gen` and put some loot items in the vault. The first tag is to prevent off-theme monsters, and the guaranteed loot is to make the vault more enticing to open. The bear/Lair themed animals are weak post-Lair, so limit its placement to Lair placement range (D:7-11 instead of D:7-). Rework the monster placement to have better separation of monster types with appropriate weights. Also add monster placement that gets harder with increasing placement depth. -------------------------------------------------------------------------------- aeb36284e3 | gammafunk | 2023-06-23 16:45:59 -0500 fix: Let the sense Abyssal rune to be seen in clua If `items.get_items_at()` sees a valid item at a location but there's no corresponding stash item, instead of returning nil, return the map cell item. This allows us to see fully defined sensed items like the Abyssal rune. It doesn't work for sensed items like those from gnoll's strong nose mutation, but such items would need more complete item details before we could return them to clua. -------------------------------------------------------------------------------- 4feb4907b2 | Nicholas Feinberg | 2023-06-23 13:40:37 -0700 Support no_exclude for misc items For wizmode purposes. -------------------------------------------------------------------------------- a26ba32dd1 | Nicholas Feinberg | 2023-06-23 12:50:38 -0700 Make ?revelation last slightly longer (Monkooky) Rather than being strictly instantaneous, allow the player to start their next turn with vision of whatever invisible things are nearby, whatever's through walls, etc. This is a UI improvement - new monsters will now be announced as 'coming into view' properly, etc. -------------------------------------------------------------------------------- 5e087ee2ca | sandertyu | 2023-06-22 11:34:27 -0700 fix tile_shield_offsets option Updates game option for tile_shield_offsets to set tile_shield_offsets_option instead of tile_weapon_offsets_option. I believe this was simply a typo. Resolves #3133 -------------------------------------------------------------------------------- ba352fbbf7 | Nicholas Feinberg | 2023-06-21 22:19:37 -0700 🐸 182 (Monkooky) -------------------------------------------------------------------------------- dd590a99dd | Nicholas Feinberg | 2023-06-21 22:09:25 -0700 Hop some new tiles in (Sastreii) Orcbow, blink frog, Dithmenos's altar, and Shrike simulacrae. -------------------------------------------------------------------------------- 9dded2c639 | Nikolai Lavsky | 2023-06-22 02:32:14 +0300 build: enable `CMD_MAP_EXCLUDE_RADIUS` in `NOWIZARD` builds Since this command has been available outside of the wiz-mode since 2009, let's enable it for `NOWIZARD` builds too. -------------------------------------------------------------------------------- dd1737301c | Nikolai Lavsky | 2023-06-22 02:30:40 +0300 docs: document a secret X-mode command Added in af5862b9e, `CMD_MAP_EXCLUDE_RADIUS` allows placing exclusions with arbitrary sizes on the map. The command was supposed to be available only in the wiz-mode, but due to a missing `you.wizard` check anyone can use it. Since the command might be useful for checking the range of monsters' spells or inner-flame explosions, let's document it in a few relevant places. -------------------------------------------------------------------------------- 4352c244c2 | Nikolai Lavsky | 2023-06-21 23:02:30 +0300 docs: further update the list of available commands This commit brings the list of available commands in line with the default keybindings from cmd-keys.h. -------------------------------------------------------------------------------- c5ef74bbde | Nicholas Feinberg | 2023-06-19 22:36:03 -0700 New Orb of Zot tiles (Sastreii) Spin! Spin! -------------------------------------------------------------------------------- c6c2007e03 | Nicholas Feinberg | 2023-06-19 22:14:48 -0700 Revert "Increase Meteoran zot clock" +25% was too much. Let's keep thinking about this and try another approach later. This reverts commit 2312942fdab03ec46e66242d9c88c51edeca864b. -------------------------------------------------------------------------------- 519b7de00c | Nicholas Feinberg | 2023-06-18 16:58:00 -0700 Fix art-data generation for new enhancers -------------------------------------------------------------------------------- 1846a1fd2d | Nicholas Feinberg | 2023-06-18 16:07:20 -0700 GET EQUIPPED WITH WEAPON TILE (SASTREII) New tiles for short sword/eveningstar randarts and orcbows. -------------------------------------------------------------------------------- 96ec847f19 | Nicholas Feinberg | 2023-06-18 15:54:37 -0700 Describe new enhancer artps Oops! -------------------------------------------------------------------------------- 4aa6249778 | Nicholas Feinberg | 2023-06-17 15:26:20 -0700 Let randart staves enhance other schools Add an enhancer artp for each spell school and let randart staves get artps for other schools. So you can have the staff of the Slime Pits {rF, Fire, Air} and have a staff that enhances both fire and air spells. This doesn't provide innate resists like the base staff type does. Reasoning: seems fun; might encourage switching up spell use based on staves found. Also changes the naming of randart staves - rather than the staff of fire "Fhwghdhs" {rF, Int-3}, we now have the staff "Fhwhgdhds" {rF, Fire, Int-3}. This allows for staff names like "the staff of Bad Decisions" - before, those would be the staff of fire of Bad Decisions, which was too many 'ofs'. It'd be fun to add these props to other randarts. Robes? Orbs? Hats? Gloves? Cloaks and scarves? Staves and lajatangs..? -------------------------------------------------------------------------------- 91f28db67f | gammafunk | 2023-06-17 10:53:23 -0500 feat: Don't let the Damnation unrand harm the shooter As of a99462a43, Damnation requires hitting an actual monster in order to explode. Hence the player has no way to safely use the weapon on an adjacent monster without harming themself. This creates an annoying need to swap to a backup launcher frequently, since even when you have exploding damnation bolts, monsters get adjacent quite often. Hence this commit makes Damnation simply not affect the shooter. It's a buff to Damnation, but the nerf in 404d6944 was strong, and the weapon isn't overpowered these days. I also removed some ammo mulching code that was specific to Damnation but is no longer necessary when launcher ammo always mulches. -------------------------------------------------------------------------------- 9f7f995f2b | Nicholas Feinberg | 2023-06-15 17:24:40 -0700 Fix: don't summon obsidian axe crashes when chopping players C.f. 3f4f80340b6620, true believers! -------------------------------------------------------------------------------- 85c54bcb58 | Neil Moore | 2023-06-14 15:13:40 -0400 Please speak only to my lawyer. Several artefact weapon names. [skip ci] -------------------------------------------------------------------------------- e4b35d15fd | Nicholas Feinberg | 2023-06-14 11:40:07 -0700 Fix: don't turn dust into smoke Since scrolls of fog were first added in 7ef7c926766, they've printed something like this: As you read the scroll SDFKLVHYVN, it crumbles to dust. The scroll dissolves into smoke. It was a scroll of fog. This is quite redudant. We don't need our scrolls to crumble into dust and then into fog! Let's merge the first two. -------------------------------------------------------------------------------- 92a001385b | Nicholas Feinberg | 2023-06-14 10:29:12 -0700 Fix: show current delay for mid-skill heavy weapons (chimerix) Heh heh heh. Pretty good bug. -------------------------------------------------------------------------------- 322a60d74e | Nicholas Feinberg | 2023-06-14 10:20:54 -0700 Simplify: don't mark ?revelation as cancellable This is a minor oversight in 77163bc4736 (late 2022). It has no effect on gameplay. -------------------------------------------------------------------------------- 5282407e52 | Nicholas Feinberg | 2023-06-14 10:04:46 -0700 Fix ego/normal barding tiles (Sastreii) Accidentally swapped these. Whoops! -------------------------------------------------------------------------------- 82b7359922 | Nikolai Lavsky | 2023-06-14 17:18:20 +0300 fix: update default settings for `action_panel_filter` Since the new versions of the potion of flight and scroll of magic mapping have tactical uses, they should be displayed on the action panel. -------------------------------------------------------------------------------- 7cdbcddada | Nikolai Lavsky | 2023-06-14 16:04:27 +0300 refactor: remove old monster glyph and keybind files Added after a significant overhaul of monster glyphs and colours in 0.4 (f2f6755ac), monster_glyphs files allowed to make the glyphs of all affected monsters show up as they did in previous versions. There doesn't seem to be much demand for such files now, so it's time to remove them. Also, this commit removes the file with 0.3.4's key bindings that somehow survived in the codebase for 15 years. -------------------------------------------------------------------------------- 1c394c0614 | Nikolai Lavsky | 2023-06-14 01:28:59 +0300 docs: remove eating and butchering and add equip/unequip commands. -------------------------------------------------------------------------------- 46f44d267d | Nikolai Lavsky | 2023-06-14 00:15:08 +0300 fix: remove obsolete inventory colours These were leftovers from preferred food and mutagenic corpses/chunks. -------------------------------------------------------------------------------- 3f4f80340b | Nikolai Lavsky | 2023-06-13 17:49:26 +0300 fix: don't summon obsidian axe demons when chopping firewood Also, don't create summons when attacking conjured monsters. -------------------------------------------------------------------------------- 2312942fda | Nicholas Feinberg | 2023-06-12 17:53:10 -0700 Increase Meteoran zot clock +25%, from 600 per floor to 750. This should give a bit more flexibility, especially for especially time-tight areas like Lair or Vaults, while still maintaining time pressure overall. -------------------------------------------------------------------------------- b40cd77e26 | Nicholas Feinberg | 2023-06-12 16:41:22 -0700 Revert debug code change Oops! -------------------------------------------------------------------------------- c4c5a43528 | Nicholas Feinberg | 2023-06-12 11:01:39 -0700 Fix: don't start Wn with Slow+Slow (acrobat) -------------------------------------------------------------------------------- b58dd9be76 | Nicholas Feinberg | 2023-06-11 22:37:53 -0700 Feat: magic mapping -> revelation Magic mapping is a cool item, but I often find it sitting in my inventory unused for the great majority of a game. I might use it early on to find a timed portal if I'm having trouble, but after that, it sits around until Zot. That's not exciting! Meanwhile, the removal of Ashenzari's Astral Vision in 1891117ce2a (Sept 2022) left a mechanical gap. We removed the "see through walls" effect for a variety of UI and bug reasons, but it's still neat. If the player only saw through walls for a moment, until the end of their turn, there'd be no problem. So... let's kill two birds with one scroll! Scrolls of revelation still map the level, like magic mapping, but they also reveal everything in LOS radius - monsters, items, unseen horrors, you name it. This should hopefully create more incentive to use magic mapping throughout the game - you might want to see what's inside a scary looking vault or behind a door, for example. It does break the legendary door vault a bit, but truthfully, that thing was meant to be broken. If players want to spend a scarce resource to peek inside, they can do that. :) UI issue - invisible monsters vanish completely once your turn ends, so you might want to note them down. Might poke at this at some point. -------------------------------------------------------------------------------- b69b018a6c | Nicholas Feinberg | 2023-06-11 22:27:12 -0700 WIP -------------------------------------------------------------------------------- adcf659a07 | Nicholas Feinberg | 2023-06-11 22:13:24 -0700 Move some silly tiles out of fe/op enums So that randomly picking player bases won't result in a tile that feels out-of-style, hopefully. -------------------------------------------------------------------------------- bf13549d7c | Nicholas Feinberg | 2023-06-11 22:05:02 -0700 Fix monster specs for simulacrums/spectres Broken by 0e04eb73d5a (2021), when we allowed demonic and holy ghosts. This also fixes the 'monster' bot's output. -------------------------------------------------------------------------------- 0643eb4156 | Nicholas Feinberg | 2023-06-11 15:58:49 -0700 Experimental: randomize player tile on start We have so many player tile variants. Shouldn't players get to see them without having to mess around with the offline doll editor? Some of the older tiles are sort of dubious, so let's call this a test and revert it if there are complaints. -------------------------------------------------------------------------------- 05d2ad474e | Nicholas Feinberg | 2023-06-11 15:03:30 -0700 New barding tiles (Sastreii) Lord, what a mess this code was... still is, really. -------------------------------------------------------------------------------- b63f529262 | Nicholas Feinberg | 2023-06-11 14:18:46 -0700 New spell tile (Sastreii) Blastmotes (icon and clouds), leda's unmaking (icon and shot). -------------------------------------------------------------------------------- 56bf346678 | Nicholas Feinberg | 2023-06-10 22:03:13 -0700 Add some tiles that just don't miss (Sastreii) New Eos and Sniper tiles. -------------------------------------------------------------------------------- e6debcdd2c | Nicholas Feinberg | 2023-06-10 22:00:04 -0700 Update hunter description (CarefulOdds) Per 1e386dd289. -------------------------------------------------------------------------------- 6aa68a64a1 | Nicholas Feinberg | 2023-06-08 10:20:21 -0700 Randomize cloud type per condenser vane cloud Reduce the odds of a complete whiff. -------------------------------------------------------------------------------- e443d1f16c | Nicholas Feinberg | 2023-06-08 07:26:43 -0700 Add missing Reap description (Colgate) -------------------------------------------------------------------------------- 89dc3ad700 | Nicholas Feinberg | 2023-06-07 11:44:34 -0700 Let unrelated mons swap past lower-HD allies (elliptic) To make ratscumming (new term) slightly weaker, allow higher-HD monsters to *occasionally* swap past lower-HD allies. This allows e.g. an orc warrior to eventually swap with a worm while you're busily spearing or Momentum Striking the former. -------------------------------------------------------------------------------- 3fdcc5976a | Nicholas Feinberg | 2023-06-06 22:39:19 -0700 Always allow reaching over spectral weapons (elliptic) Make spectral polearms less fiddly to use. -------------------------------------------------------------------------------- b92c8fe61f | Nicholas Feinberg | 2023-06-06 22:34:30 -0700 Turn off quiver autoswitching (CarefulOdds, advil) Switching to a new quivered item when you ran out of the thing you were shooting made sense back when folks were juggling +2 elvish arrows and +1 arrows of flame. These days, though, it's pretty uncommon that the player wants to keep chucking stuff when their quiver runs empty, and much more likely to be disastrous if e.g. the quiver switches from boomerangs to scrolls of fear. Let's disable this and see if anyone complains. -------------------------------------------------------------------------------- 5898b58c05 | Nicholas Feinberg | 2023-06-06 22:17:53 -0700 Don't assume that runes use SHOW_ITEM_MISCELLANY They haven't for years. Instead, use CMD_DISPLAY_RUNES in the % screen, matching the preceding lines for A and @. This has no effect for anyone except players who've rebound }. -------------------------------------------------------------------------------- f34b8b8c02 | Nicholas Feinberg | 2023-06-06 22:12:20 -0700 Make fear optional (Grit, Tollund) By popular demand, make the new prompt for resting/autoexploring as a Meteoran opt-in. Dial 1-800-FEAR-ZOT now for your free UI. -------------------------------------------------------------------------------- 046c7d2549 | Nicholas Feinberg | 2023-06-03 14:55:37 -0700 Mark distortion as chaotic and evil (kate, gammafunk) Matching the Banishment spell, Lugonu, etc. This was originally the case, but distortion was marked un-evil in 0.6 to make good god followers have a better time wield-IDing things. Wield-ID is gone, so let's normalize things again. Reverts a8723822. -------------------------------------------------------------------------------- 68197d5272 | Nicholas Feinberg | 2023-06-03 14:55:37 -0700 Mark new wands as high-tier (Ge0ff) Discourage low HD monsters from picking em up. -------------------------------------------------------------------------------- 3820da0fcd | CanOfWorms | 2023-06-03 17:30:40 -0400 Update cards.txt Remove the description for Famine and note that one of the demons summoned by the Pentagram can be hostile. -------------------------------------------------------------------------------- 31f6795574 | gammafunk | 2023-06-02 14:04:21 -0500 fix: Correct monster placement in a vault (CanOfWorms) The vault grunt_forest_large_clearings had its monster placement messed up over the years with a combination of fixes for traps and food removal. This could lead it to place quite large numbers of wolves in one of its possible states. Looking back at the design intended for the vault in c5d36bef, I've fixed and simplified the DES. Now its four possible states all place appropriate types and numbers of monsters. -------------------------------------------------------------------------------- d189c61b28 | Nicholas Feinberg | 2023-06-02 11:04:41 -0700 Return Cerebov's Iron Shot (Ge0ff) The Demon Lord of Fire and Steel, master of the Iron Castle, can have a little iron shot as a treat. -------------------------------------------------------------------------------- 021bf36b8e | gammafunk | 2023-06-02 10:34:18 -0500 feat: A CLO for setting the max memory for clua Previously this limit was always 16 megabytes, but there are use cases (e.g. qw) where a local user or server admin wants to allow scripts to go above this. Add `-lua-max-memory` to set the limit in megabytes, with a default of 16MB. -------------------------------------------------------------------------------- a8e5da340c | Nicholas Feinberg | 2023-06-02 07:40:28 -0700 Cleanup some misc item code Don't claim that runes are misc items (rip), try to avoid cleaning any misc items in the unlikely chance that a floor is completely full (matching runes, etc), and don't claim that misc items can be unided (RIP decks). -------------------------------------------------------------------------------- a6d7543ad0 | Nicholas Feinberg | 2023-06-02 07:40:28 -0700 Show sacks of spiders in the \ menu again -------------------------------------------------------------------------------- 6ccac15303 | Nicholas Feinberg | 2023-06-02 07:40:28 -0700 Fix: give spider sacks a colour in TAG_MAJOR_VERSION > 34 -------------------------------------------------------------------------------- f52811907a | Medrano83 | 2023-06-02 16:08:08 +0200 Android: Keep the screen on The screen is off again. I hate that. -------------------------------------------------------------------------------- ffbd37ae57 | Medrano83 | 2023-06-02 16:08:08 +0200 Fix a few typos in java code comments -------------------------------------------------------------------------------- 8713efdfa9 | Kyle Rawlins | 2023-06-02 09:29:27 -0400 build: workaround for an actions/checkout bug a9a6e9e7af1 and ea43df2a32 removed a step that was probably intended to work around https://github.com/actions/checkout/issues/290 and https://github.com/actions/checkout/issues/882, but broke the CI build if anyone used a lightweight tag (because these fetch lines actually shallow the tag depth to 1). This commit attempts to thread the needle by making this workaround conditional only to releases, where (if the person doing the release has followed the steps correctly), there is guaranteed to be an annotated tag at depth 1 in the tag history. (If I'm parsing the checkout bugs correctly, they only trigger on a tag action anyways.) -------------------------------------------------------------------------------- aae73658be | Nicholas Feinberg | 2023-06-01 07:16:21 -0700 Fix: spectral multiplication (acrobat) Make spectral quickblades hit twice, not four times. -------------------------------------------------------------------------------- e789d4113a | Nikolai Lavsky | 2023-06-01 16:35:17 +0300 text: add a description for the Will+ status -------------------------------------------------------------------------------- 2ddbf375f0 | Kyle Rawlins | 2023-06-01 08:44:40 -0400 feat: show scale when zooming in local tiles It's good to show explicit feedback to the user for this (previously only debug builds got this). This might be better to show somewhere else in the UI, but for now it's easiest to just do in MSGCH_PROMPT, and seems harmless. -------------------------------------------------------------------------------- 60543735b6 | Medrano83 | 2023-06-01 08:33:52 -0400 Fix zoom out Prevents the current scale to be much higher than the maximum zoom. Otherwise zoom out stops working until a lower value is reached again. -------------------------------------------------------------------------------- 875ba10a1c | Nikolai Lavsky | 2023-06-01 15:22:08 +0300 fix: mark }sack as useless under no-allies conducts -------------------------------------------------------------------------------- 25add195a6 | Nicholas Feinberg | 2023-05-31 22:23:12 -0700 Simplify Plasma Beam (elliptic, acrobat) To make it easier to use the spell's unique targeting and to avoid power breakpoints, make Plasma Beam always have LOS_RADIUS range, rather than having range which increases with power. As a small compensation, reduce damage by 10%. Max power is now 2x1d120 (was 2d1d31). -------------------------------------------------------------------------------- 9a23063699 | Nicholas Feinberg | 2023-05-31 22:16:35 -0700 Give hand crossbows more brands/plusses (elliptic, acrobat) Since they tend to appear quite late (in Vaults, mostly), after the player is likely to have already found an 'endgame weapon' of some other type, give hand crossbows a few extra plusses and/or a brand to encourage using em. This logic matches demon weapons'. -------------------------------------------------------------------------------- 62937cac54 | Nicholas Feinberg | 2023-05-31 22:05:37 -0700 Increase condenser vane cloud gen at low power Continuing on from ec820db30826e, place clouds in about 40% of cells adjacent to monsters at zero evo skill, up from 20%. -------------------------------------------------------------------------------- 5314a8f5be | Nicholas Feinberg | 2023-05-31 22:05:11 -0700 Refactor condenser vane logic Use a set instead of repeatedly scanning a vector. -------------------------------------------------------------------------------- c79956ad2d | Nicholas Feinberg | 2023-05-31 21:55:43 -0700 Increase formless jellyfish damage It is still my dear hope that there is something fun to be found in the concept of the one-turn paralysis constrict monster. Let's give it one more shot. -------------------------------------------------------------------------------- ca434935e8 | Nicholas Feinberg | 2023-05-31 21:54:55 -0700 Reset demonic crawlers' XP multiplier It was bafflingly low. They gave less XP than steelbarb worms, despite being likely more threatening. -------------------------------------------------------------------------------- 720ed57a1c | Nicholas Feinberg | 2023-05-31 21:48:55 -0700 Bring back Sacks of Spiders As an alternate to boxes of beasts. When these were removed, it was correctly noted that they were a bit too similar to beast boxes and phantom mirrors, and the latter were more interesting due to a lack of spiderous variety. Well, spider reform has addressed the latter, and item sets address the former. So let's do it again! Reverts a6edddd4f1eafeb1ccc421d0d29b50fba57057a8. -------------------------------------------------------------------------------- 1e386dd289 | Nicholas Feinberg | 2023-05-30 21:46:49 -0700 Give hunters ?butts instead of ?immo ?immo is grand, but hard to use in dangerous situations, especially early on. Give hunters a scroll of butterflies so that they can make some space early on, in a way that feels a little different from Hexslingers' Cause Fear. -------------------------------------------------------------------------------- f10b62a2d6 | Nicholas Feinberg | 2023-05-30 17:25:47 -0700 Reduce summon cap on living spells (Ge0ff) Six felt a bit silly. Four should be plenty to cause players trouble. -------------------------------------------------------------------------------- c3bc235b0d | Nicholas Feinberg | 2023-05-30 17:25:47 -0700 Note quick blade multipliers in weapon descs (Ge0ff) -------------------------------------------------------------------------------- 0a804a9fd0 | Nicholas Feinberg | 2023-05-30 17:25:47 -0700 Codify shield penalty descriptions (Lici) -------------------------------------------------------------------------------- 42d8f58691 | Kyle Rawlins | 2023-05-29 11:31:26 -0400 fix: CI header build -------------------------------------------------------------------------------- 48faf8a104 | Kyle Rawlins | 2023-05-29 11:05:38 -0400 feat: separator escaping for certain rc options This implements escaping separators for certain rc options, most importantly force_more_message and message_colour. There is so much demand for this that many standard rc files (including crawl itself, see e.g. 7dd7712201) have assumed this is already implemented, but until 0.30, there were no error messages to indicate when this was going wrong. For many (but not all) list options, this commit will let `,` be escaped via `\,`. This really only matters for options where arbitrary regexes are used. For the two options mentioned above, this commit also implements escaping `:` via `\:`. The behavior for force_more_message where an invalid channel prefix causes a `:` split to be ignored is retained. (These are implemented slightly more generally, via the message_filter and colour_mapping objects, but I don't think the escaping matters for any other cases.) This is a bit of a hodgepodge because of various different implementations of separators, so I have not tried to make the change very general. Because the `runrest...` options are implemented in lua, it is unfortunately not practical to implement escaping even `,` without a major rework. Also, it would be easy to add this for options that use split_parse, but as far as I can tell none really need it. -------------------------------------------------------------------------------- 4708a659fe | Nicholas Feinberg | 2023-05-28 07:32:47 -0700 Fix: don't let dj disable all skills (try 3) (elliptic) This seems much more right. Reverts d968683117aad80e602f599cbc24466dbbb81caf. -------------------------------------------------------------------------------- 2adbd49c56 | Nicholas Feinberg | 2023-05-28 07:17:04 -0700 Fix an ignis wrath / formicid crash (elliptic) Follow the logic of e.g. Dith putting players to sleep, Jiyva trying to transform the player, etc, by letting Ignis trying to shaft even un-shaftable formicids. It's OK for players to feel cool and smug. -------------------------------------------------------------------------------- 7a2ff0754d | Nicholas Feinberg | 2023-05-28 07:12:41 -0700 Revert "Unify wereblood limits with subblood (12642, Yermak)" This breaks too many forms for now. We'll revisit this after oncoming tmut changes, hopefully. This reverts commit f37ddd98f5ceeb110e8458d3e2aabab7e3ef3a31. -------------------------------------------------------------------------------- df0485fa37 | Nicholas Feinberg | 2023-05-27 08:40:07 -0700 Fix: turn mud into gold (acrobat) Un-unmake gozag's gold. -------------------------------------------------------------------------------- 0008aa4bac | Nicholas Feinberg | 2023-05-27 08:17:28 -0700 ayy eyy ohh -------------------------------------------------------------------------------- d968683117 | Nicholas Feinberg | 2023-05-27 08:07:47 -0700 Fix: don't let dj disable all skills (again) (elliptic) I think there's something broken here that I'm overlooking. This fix seems wrong. -------------------------------------------------------------------------------- cf6b8b5405 | Nicholas Feinberg | 2023-05-27 07:48:27 -0700 Fix: give dj a less great experience (elliptic) We could be a little more fine-grained here, but it's not worth it. -------------------------------------------------------------------------------- df935468f2 | Nicholas Feinberg | 2023-05-26 15:54:31 -0700 Remove no monsters from Lair It's a take-a-hack give-a-hack kind of day. (Remove historical compensation for chaff removal from Lair.) -------------------------------------------------------------------------------- ae3621a16d | Nicholas Feinberg | 2023-05-26 15:32:32 -0700 Remove a 'not enough monsters' veto 03497ec52293cca692bb6c116ea5ce6c5bd8c4ef fixed the original inspiration for this. It's still in principle possible to have a lair floor with no monsters, but very unlikely. We'll fix that later. -------------------------------------------------------------------------------- a1596ed5d5 | Nicholas Feinberg | 2023-05-26 15:18:53 -0700 Fix multischool spell success/power (purplemustard) Broken by 39cede6f937497c. -------------------------------------------------------------------------------- c0b45f0da6 | Nicholas Feinberg | 2023-05-26 14:23:30 -0700 Give fo innate shaft resistance (nicolae) Feels thematic and not unfair - fo have fewer ways to deal with a shaft. This should probably be documented somewhere, maybe. -------------------------------------------------------------------------------- 2c42856c84 | Nicholas Feinberg | 2023-05-26 14:23:30 -0700 Make jellyfish less squishy They lust for kills! -------------------------------------------------------------------------------- 918e1df75e | Kyle Rawlins | 2023-05-26 13:53:07 -0400 fix: s/rest/explore in a zot clock message -------------------------------------------------------------------------------- 33a4ccc0cb | Nicholas Feinberg | 2023-05-25 22:37:11 -0700 Tweak pf_eden (elliptic) A dancing greatsword and a cherub is probably too mean for late D. Move the vault to Elf, where dancing weapons fit right in. Replace the potions with a randbook of summon mana viper + Discord, matching the original apple theme. -------------------------------------------------------------------------------- f37ddd98f5 | Nicholas Feinberg | 2023-05-25 21:44:30 -0700 Unify wereblood limits with subblood (12642, Yermak) Blocks gargoyle from casting wereblood, since they have no blood. Matches Sublimation of Blood. Looks like an oversight in 4d17e5cfac9. -------------------------------------------------------------------------------- 5d822261ab | patrick | 2023-05-25 22:39:26 -0400 Add a shop to shops.des No shop with custom inventory this time, just a shop with a unique method of theft deterrence. Downweighted for being somewhat gimmicky. -------------------------------------------------------------------------------- b2cf6a9952 | patrick | 2023-05-25 22:33:55 -0400 Add a small vault to shoals.des for the King fans out there the man in black fled across the desert and the vaultslinger followed In other news, did you know you can just stick doors anywhere? -------------------------------------------------------------------------------- c45a9370a1 | patrick | 2023-05-25 22:26:04 -0400 Add two flavor vaults to mini_features.des. Well, three, if you count the subvault. -------------------------------------------------------------------------------- 28b06b89b3 | patrick | 2023-05-25 22:18:36 -0400 Ensmallen the inventory at the Tiny Tomes shop It was pointed out on Discord that with 20 books, it can take an annoyingly long time to look through all of them to examine their contents. Accordingly, dial it down a bit by making it symmetric with Tremendous Tomes, with each shop having 8 books. (I have other ideas for shops with the maximum number of items, anyway. (watch this space))) -------------------------------------------------------------------------------- 196d5507e3 | Nicholas Feinberg | 2023-05-25 09:50:44 -0700 Fix weapon ego info leak (eb) Oops! -------------------------------------------------------------------------------- 6fa058ef04 | Nicholas Feinberg | 2023-05-24 22:26:24 -0700 Tweak onia_arrival_mini_maze[_b] Don't intentionally hide 'treasure' (stones) behind plants. Not riveting gameplay. -------------------------------------------------------------------------------- 2e3c275290 | sandertyu | 2023-05-24 22:12:24 -0700 add strange machine to default auto exclusions -------------------------------------------------------------------------------- bfe2539a1d | Nicholas Feinberg | 2023-05-24 22:11:20 -0700 Fix meteoran rest/explore warnings (FizzleBang) Don't warn when the zot clock is inactive. -------------------------------------------------------------------------------- 154427ae6a | elliptic | 2023-05-24 22:12:54 -0400 Don't kill players from 300+ health for the crime of opening a door in Geh. Removes nicolae_geh_backdraft - the vault existed only to kill players who didn't realize how much damage they would take in one turn if they opened a door. I think putting the only downstairs on a level inside a runed door vault is probably questionable in general as well, but mainly this just isn't a good way to try to kill players. -------------------------------------------------------------------------------- 164a46f36d | Nicholas Feinberg | 2023-05-24 18:29:02 -0700 Give toadstools a new lease on life Remove some code from back when toadstools automatically sprouted up from corpses over time. The good old days... -------------------------------------------------------------------------------- 0e100b6ebc | Nicholas Feinberg | 2023-05-24 18:16:02 -0700 Re-require LOS for indirect constriction (gammafunk) BVCing or roots-ing a monster and walking out of LOS isn't very engaging. -------------------------------------------------------------------------------- 637a80eef8 | Nicholas Feinberg | 2023-05-24 15:33:17 -0700 Fix: reverse the anti-life equation (steves) Oops! -------------------------------------------------------------------------------- 38777b0aa0 | Nicholas Feinberg | 2023-05-24 14:54:53 -0700 Maybe fix a phial crash -------------------------------------------------------------------------------- ada98394da | Nicholas Feinberg | 2023-05-24 13:52:05 -0700 Reduce BVC base damage Borgnjor's Vile Clutch was recently buffed by 57a6a0d306af, which let it work on unseen and out-of-LOS enemies. It was already considered a strong spell before that change, so focus it more on the distinctive part of the spell (immobilizing enemies and reducing their EV) by reducing the damage component. At 50 power (25% of max), the spell goes from 2d6 damage to 2d4.5; at 150 power, it goes from 2d11 to 2d9.5. -------------------------------------------------------------------------------- 26888eae30 | Nicholas Feinberg | 2023-05-24 13:52:00 -0700 New spell: Leda's Unmaking Earth has three spells that are very similar: Stone Arrow, Iron Shot, and Lehudib's Crystal Spear. They're single-target damage projectiles, with power, range, and accuracy differences making up the only distinctions. (There's Sandblast, too.) This feels a bit repetitive, and Iron Shot + LCS especially have a hard time feeling distinct. As a small differentiator, replace Iron Shot with Leda's Unmaking. The latter is does a little less damage than Iron Shot, but causes slain victims to turn to mud, slowing creatures' movements and impairing their attacks ala Leda's Liquefication. This should hopefully make Unmaking feel a little different from the other two in some situations. Iron Shot remains as a monster spell for a few iron-themed monsters, plus Boris, because he's old-fashioned that way. This also incidentally increases the chance of Glaciate creating a block of ice from 60% to 100%, to reduce complexity. -------------------------------------------------------------------------------- ef9dfdaa1c | Nicholas Feinberg | 2023-05-24 10:08:58 -0700 Revert "Show a marker for departing monsters" Re-using the invisible monster indicator was indeed too confusing. Will take another shot at this later. This reverts commit b28f3135ce239f4b5c1029938f69f1bf63154b65. -------------------------------------------------------------------------------- b28f3135ce | Nicholas Feinberg | 2023-05-23 23:25:01 -0700 Show a marker for departing monsters When a monster bails, show where it used to be so that the player can figure out what's going on. Currently re-using the invisible monster indicator - hopefully this isn't too confusing. -------------------------------------------------------------------------------- bff143cfd1 | Nicholas Feinberg | 2023-05-23 22:39:56 -0700 Fix two more comment typos -------------------------------------------------------------------------------- 6aae568935 | Nicholas Feinberg | 2023-05-23 22:25:05 -0700 Turn lies into allies -------------------------------------------------------------------------------- 39008fba12 | Nicholas Feinberg | 2023-05-23 22:02:00 -0700 Warn before exploring or resting as Meteoran Too easy to accidentally waste a hundred precious turns resting elsewise. (I have done this many times.) We can add some option for this if people really want. -------------------------------------------------------------------------------- 966c9bc6f3 | Nicholas Feinberg | 2023-05-23 17:07:15 -0700 Shift orcbows around To reduce the threat of basic orcs and make getting an orcbow feel a little more 'earned', remove the 1/18 chance of basic orcs getting an orcbow and add a 50/50 chance of centaurs & centaur warriors getting orcbows instead of shortbows. Overall rate of pre-lair orcbow drops is unchanged. -------------------------------------------------------------------------------- 9ec6622867 | Nicholas Feinberg | 2023-05-23 08:05:56 -0700 Keep adjusting ranged weapon frequency Give some arbalests back to orcs (to make arbalests reasonably common in Orc), and trade out tengu warriors' longbows for arbalests. -------------------------------------------------------------------------------- a5ff34e5da | Kate | 2023-05-23 16:02:24 +0100 Fix some missing variables in monster speech Replace various possessive pronouns with the @possessive@ variable. -------------------------------------------------------------------------------- 9569ec16df | Nicholas Feinberg | 2023-05-23 07:51:08 -0700 Downgrade centaur warrior weapons Make longbows a little rarer in D, to make it more likely that players find the lower-tier arbalest first. I've got my eye on you, Nessos. -------------------------------------------------------------------------------- 90744edd48 | Nicholas Feinberg | 2023-05-23 07:26:52 -0700 Fix (maybe): dj with maxed skills (reasonance) Djinn with a maxed spellcasting skill shouldn't keep training it, and they shouldn't be able to leave the skill training screen without selecting a skill if any skill is maxed. -------------------------------------------------------------------------------- 6fe912e8c5 | Nicholas Feinberg | 2023-05-22 22:47:17 -0700 Fix a djinn !xp crash (reasonance) If we didn't have anything set to train, the !xp preview would get trapped in an infinite loop. -------------------------------------------------------------------------------- 1914d2863d | Quinten Konyn | 2023-05-22 17:47:15 -0700 Don't gender satyr spell messages Continuing the work of this commit: https://github.com/crawl/crawl/commit/cbcab8c68d17d1623b564816eca41d8d4ce8847d -------------------------------------------------------------------------------- 838c19eb66 | Nicholas Feinberg | 2023-05-22 13:44:25 -0700 Fix missing newline (Ge0ff) -------------------------------------------------------------------------------- aba2717c7e | Nicholas Feinberg | 2023-05-22 12:38:57 -0700 Add placeholder orcbow tiles ? -------------------------------------------------------------------------------- be637cbdd6 | Nicholas Feinberg | 2023-05-22 11:38:11 -0700 Fix broken artefact book names (#3144) Broken in 5f0c07693536 (#3138). -------------------------------------------------------------------------------- 19ca8be239 | Nicholas Feinberg | 2023-05-22 11:32:55 -0700 Fix alphashops for enlightenment (Goratrix) -------------------------------------------------------------------------------- 44bd3a6a1f | Nicholas Feinberg | 2023-05-22 11:16:14 -0700 Add a potion of enlightenment quote (DracheReborn) -------------------------------------------------------------------------------- 818c9244c5 | Kyle Rawlins | 2023-05-22 12:38:22 -0400 fix: quiet some gcc warnings -------------------------------------------------------------------------------- 6fc9643786 | Kyle Rawlins | 2023-05-22 12:35:42 -0400 fix: `uint` => `unsigned int` -------------------------------------------------------------------------------- e618eeaa78 | Nicholas Feinberg | 2023-05-21 22:44:13 -0700 Add new Dj titles Now that they can train individual magic skills. The Spellcasting one is a little iffy, but I wanted to put wishes somewhere. Credit ragingrage for Marid. That one's a D&Dism, not a 'real myth' one, but it's fine. -------------------------------------------------------------------------------- e8a828585e | Nicholas Feinberg | 2023-05-21 22:44:13 -0700 Fix quick blade time taken (Lightli) Oops! -------------------------------------------------------------------------------- c3f979dc1f | gammafunk | 2023-05-21 20:41:37 -0500 task: Remove the 0.30 trunk tournament reminder This reverts commit d14b0f4ee22f9d1b00a3534f8e9ca280991fdedc. -------------------------------------------------------------------------------- 523567ee2f | Nicholas Feinberg | 2023-05-21 15:33:43 -0700 Increase orcbow base damage (elliptic) Try to further distinguish it from shortbows. We'll see if this feels too similar to arbalests, or whether the armour-piercing quality of the latter's higher base damage has a large impact in practice. -------------------------------------------------------------------------------- 0ea7606829 | Nicholas Feinberg | 2023-05-21 15:02:58 -0700 New weapon: orcbow (elliptic) The gap between starting weapons (slings/shortbows) and the next level up (arbalests) was rather large. Since arbalests were fairly uncommon in the Dungeon, the experience of ranged characters could feel quite 'swingy' - an early arbalest find made you very strong, a late one left you very weak. Some swinginess is fine, but this felt excessive. To address this, add a new 'orcbow' weapon, a bit stronger than a shortbow. (If less accurate). Orcs now carry this weapon instead of arbalests, including basic orcs (which now have a 1/18 chance of spawning with one). On average, there's about three orcbows appearing in D:1-11 (vs about one arbalest before this commit). Arbalests are now less common until later, since orcs lost theirs. (They might be a little *too* uncommon now - I may take a second pass at shifting arbalest and longbow distribution further.) To further differentiate weapons, shortbows drop in damage and delay, longbows increase in damage and delay, and hand crossbows once again go back up one base damage to compete. -------------------------------------------------------------------------------- 4f7fe9c19c | Nicholas Feinberg | 2023-05-21 15:01:12 -0700 Move hexslinger str into dex Make em more clearly focused on slinging (and hexing), rather than hedging with a little str. (This has almost no mechanical impact.) -------------------------------------------------------------------------------- 62046a28e0 | Nicholas Feinberg | 2023-05-21 14:49:05 -0700 Make dreamshard cure poison on shatter (elliptic) Probably feels pretty bad otherwise. This is by far the most common 'ongoing damage' effect - sticky flame, clouds, etc are rarer, and also feel more 'external'. -------------------------------------------------------------------------------- 39cede6f93 | Nicholas Feinberg | 2023-05-21 14:48:56 -0700 Make Djinn use all skills (elliptic) Because Djinn don't choose what spells they get, they need to have unified spell school training. That ensures that, if they choose to train magic, they can use whichever spells they get. I initially implemented this by making Djinn *only* use Spellcasting for magic. This was simple, which is good! But it had several issues: - It prevented use of pain weapons & elemental staff melee, which was a recurring source of confusion for players. - The low apt for Spellcasting felt bad, even though Djinn were still very strong. - It meant that many types of items, like manuals of Fire Magic, were useless. - It made Ashenzari Introspection curses ludicrously dominant. Instead, let's make Djinn able to use all magic skills, as usual. Furthermore, let's give them a ludicrous +11 apt in all spell schools and Spellcasting, enough to let them train every one at once at the same rate the old Spellcasting apt provided. However! The player can only enable *all* magic skills or *none* - magic skills can't be trained separately. In practice, this is mostly equivalent to the old system, with the exception of fixing the problems listed above and a few other caveats. (For example, Ru Arcana sacrifices now work and 'waste' XP, like sacrificing skills on a gnoll.) I'm hopeful it should feel much better. (It's a slight buff to dj spell starts, due to how skills round.) This needs playtesting both for bugs and to make sure the starting skill setup works right. I'm quite scared. Fingers crossed... -------------------------------------------------------------------------------- eec4556ff0 | Nicholas Feinberg | 2023-05-21 14:36:21 -0700 Potion of flight -> enlightenment The potion of flight has long been somewhat bland - it's often worth an inventory slot, but it's never exciting to use. Meanwhile, we've long had requests for a potion which granted Will, like resistance's damage effects. What if we solved both problems at once, and added a new pun at the same time? -------------------------------------------------------------------------------- 3db0c59d1d | Nicholas Feinberg | 2023-05-21 14:31:38 -0700 New monster: formless jellyfish Blink close, constrict, and sting to inflict 1-turn para, ala air elementals. Should be a little funny. Rare high-tier Shoals enemy, occasional Vaults enemy (replacing very ugly things, which get plenty of appearances elsewhere), and Slime enemy (in bands). Probably should be in a few vaults too, eg Slime special rooms. -------------------------------------------------------------------------------- be6b1f9485 | Nicholas Feinberg | 2023-05-21 14:31:31 -0700 Make Lucy's wrath protection trigger on Gozag/Ely Specifically, on Gozag's incite effect and on Ely's enemy lifesaving. Lucy wouldn't trigger at all otherwise, since those gods don't have 'active' wrath. Don't trigger on Gozag potion drinking blocking - feels abusable. -------------------------------------------------------------------------------- 57a6a0d306 | Nicholas Feinberg | 2023-05-21 14:31:23 -0700 Allow BVC/roots to work on unseen foes Simplify. This was not intended for /roots, and it's not needed for BVC. We can nerf BVC again in other ways if need be. -------------------------------------------------------------------------------- 23a37c35b7 | Nicholas Feinberg | 2023-05-21 14:31:15 -0700 Rework the dreamshard necklace Getting an extra life in a roguelike is an insanely, wildly strong effect. This made the dreamshard necklace a ludicrously strong item, but not one that made the game feel more exciting. Instead, one's character felt a bit weaker most of the time. Let's try to fix both sides of this. To make the amulet a bit more fun to wear, give it Acrobat - good for running away :) To make it less preposterously strong (and thus possible that a really good unrand or randart amulet could be preferable), make it only restore the player to 1 HP when it triggers (rather than 50-100% of MHP), but guarantee that they won't die until their next turn. To simplify, make it only trigger when the player's HP drops to 0, rather than sometimes triggering on very big hits, and remove *Drain. Finally, make it stick around as a normal amulet of the acrobat after it triggers, for running away synergy. Let's try this out. -------------------------------------------------------------------------------- 79a9896557 | Nicholas Feinberg | 2023-05-21 14:31:05 -0700 Nerf mummies (revert consumable generation) It seems like the small increase in potions, scrolls, etc added ~1yr ago was neither helpful nor needed, and it did result in folks feeling like they had more stuff than they knew what to do with. Let's go back to the old levels. This reverts commit ecccbbdb8416db653549fe9842ad7793bbed5843. -------------------------------------------------------------------------------- 1c57d4af30 | Nicholas Feinberg | 2023-05-21 14:30:56 -0700 Remove "faith handle warning under Uskayaw There's no real risk to unequipping an amulet of faith under Usk, so no need to prompt on equip/unequip. -------------------------------------------------------------------------------- 15d889b1e4 | Nicholas Feinberg | 2023-05-21 14:30:47 -0700 Don't let frosthearts freeze trees Trees aren't walls. (It felt weird and surprising to players.) -------------------------------------------------------------------------------- b47e89e976 | Nicholas Feinberg | 2023-05-21 14:30:40 -0700 Allow cancelling/dispelling -Blink It's a very magical effect, so it should be cancellable. -------------------------------------------------------------------------------- 5541ac4cad | Nicholas Feinberg | 2023-05-21 14:30:30 -0700 Make summons inherit kmap To make weird causes of death easier to track down with eg ikiller. -------------------------------------------------------------------------------- 2af904968c | Nicholas Feinberg | 2023-05-21 14:30:23 -0700 Note MHP loss on zotting Life is pain ;_; -------------------------------------------------------------------------------- d02987dbc6 | Nicholas Feinberg | 2023-05-21 14:30:07 -0700 Add Lodul to the Vaults ambush entry He seems thematically appropriate and a reasonable difficulty level. (He does not come with his band - the rest of the ambush is his band!) -------------------------------------------------------------------------------- 59b24d9a45 | Nicholas Feinberg | 2023-05-21 14:29:55 -0700 Rework quick blades (acrobat) Quick blades are really cool. They're very fast! However, they feel less fun to use than other weapons, since each button input corresponds to only a small amount of damage. Recent changes to shield delay have also really hurt them, since going from 0.3 to even 0.4 delay is a massive decrease in damage over time. To address both points, increase quick blades to base delay 1.2 / mindelay 0.5, but make them launch two attacks per swing, like Gyre & Gimble. G&G, in turn, goes to four attacks per swing. This works with aux attacks, Manifold Assault, Xom's Cleave status, etc. Nicely, this actually makes G&G much less hacky :) Hopefully! Acrobat thought I should nerf G&G, but I'm holding off. Let's see how this plays. -------------------------------------------------------------------------------- 5f0c076935 | Nicholas Feinberg | 2023-05-20 14:47:03 -0700 Semi-fix a weird Hep crash (#3138, jturbzz) I don't understand what would cause a Hep hexer ancestor to drop its quickblade on the floor and also to somehow turn it into a mangled randart, but that seems to have happened. Ew. As the commit notes, see also https://crawl.develz.org/mantis/view.php?id=11756 . -------------------------------------------------------------------------------- 49d609d0da | Kyle Rawlins | 2023-05-19 12:18:14 -0400 fix: add a missing cast in zoom code Resolves #3130 -------------------------------------------------------------------------------- 46d131a48f | Medrano83 | 2023-05-17 23:37:34 +0200 Fix: Reorder parameters in dungeon_terrain_changed This function is also used to generate some branches. New parameters should be placed at the end to minimize impact. -------------------------------------------------------------------------------- 1c3f6eb1f9 | wheals | 2023-05-17 20:29:24 +0300 fix: info leak in pog targeter (nesea) -------------------------------------------------------------------------------- 18c568b52f | wheals | 2023-05-17 18:01:41 +0300 fix: potential crash in ctrl-x menu -------------------------------------------------------------------------------- 1d5085d191 | Nicholas Feinberg | 2023-05-16 22:26:40 -0700 Tweak 7-league description (SeerSkye) Put the functional info re: waking enemies with rampage(inf) in the ego description, not the flavor zone. -------------------------------------------------------------------------------- 17ee01c9f4 | Nicholas Feinberg | 2023-05-16 14:57:56 -0700 Don't show unid'd charms wands useless for Oka Properly pass item ID status through to cannot_evoke_item_reason(). -------------------------------------------------------------------------------- 1548c4f2a5 | Nicholas Feinberg | 2023-05-15 22:10:23 -0700 Re-fix wizlab wizard names (elliptic) 9651f06ebd3838 caused hellbinders, etc to be incorrectly emitted as uniq milestones. Re-fixes #2738. -------------------------------------------------------------------------------- 98a128e1d9 | Neil Moore | 2023-05-13 22:07:50 -0400 Be often be more grammatical [skip ci] -------------------------------------------------------------------------------- 603a1083af | Nicholas Feinberg | 2023-05-13 12:16:22 -0700 Revert "Fix the description of walls with unseen changes" Tentatively seems to be causing crashes. This reverts commit 571cc3f046e3ab839dc7d58be295795d4996aac6. -------------------------------------------------------------------------------- 571cc3f046 | Medrano83 | 2023-05-13 12:47:29 +0200 Fix the description of walls with unseen changes If a wall is changed but we haven't seen the new state yet, the description shows the tile for the base wall without flavour. -------------------------------------------------------------------------------- 15ee5a5005 | Medrano83 | 2023-05-13 12:47:29 +0200 Save flavour in terrain-change markers Temporary terrain changes that replace walls (summon forest spell) are not being properly reverted on wizlabs and some vaults with custom walls. This change solves the problem by saving the old feature flavour in the terrain-change markers. Closes #2052 -------------------------------------------------------------------------------- 22baebbf0b | Medrano83 | 2023-05-13 12:40:06 +0200 Add CI workflow for source packages It is only triggered on releases. -------------------------------------------------------------------------------- 83e4e5f1f9 | Medrano83 | 2023-05-13 12:40:06 +0200 Debian release rework Instead of creating a new release to include the Debian packages, the files will be packed and added to the standard release as a single file. -------------------------------------------------------------------------------- 9056a99527 | Medrano83 | 2023-05-13 12:40:06 +0200 Allow any version format in debian packages We want to execute the workflow in beta releases. -------------------------------------------------------------------------------- 8d20d54959 | Aliscans | 2023-05-13 12:37:54 +0200 FIX: Put both DescMenu classes in unnamed namespaces. This resolves any confusion between them, and fixes #2824. -------------------------------------------------------------------------------- cc5827d5d3 | Medrano83 | 2023-05-13 12:35:30 +0200 Fix another crash related to console resizing The game may crash if the console window shrinks while a command is being repeated. Also stop the UI from freezing in that situation. -------------------------------------------------------------------------------- 6e9e4f2b4c | Medrano83 | 2023-05-13 12:35:30 +0200 Fix the arena crashing on console resize -------------------------------------------------------------------------------- 18ee0db977 | Medrano83 | 2023-05-13 12:35:30 +0200 Fix wrong background colour on console resize When the console size changes, some parts of the background are filled using the default terminal (not game) colours. An explicit screen clearing solves this problem. -------------------------------------------------------------------------------- 09a698029f | Medrano83 | 2023-05-13 12:35:30 +0200 Fix crashes when the terminal is too small If the game has already started, changes in the terminal size that make it unusable are gracefully handled. This is an attempt to follow the same behaviour in other cases. Closes #2311 -------------------------------------------------------------------------------- 7e2ab59ffe | Medrano83 | 2023-05-13 12:35:30 +0200 Reset the cursor position before clearing the screen after a resize This change stops the game from crashing when resizing the terminal. Closes #1497 Closes #3045 -------------------------------------------------------------------------------- dc203af985 | Medrano83 | 2023-05-13 12:35:30 +0200 Fix the terminal mouse being disabled after a resize -------------------------------------------------------------------------------- cbde74481b | gammafunk | 2023-05-12 23:37:28 -0500 doc: Correct a comment Despite what the current comments claim, clua's monster info :has_ranged_attack() method does in fact check for various kinds of ranged attacks that includes spells and wands. -------------------------------------------------------------------------------- 282de0ab27 | gammafunk | 2023-05-12 23:37:28 -0500 feat: A lua function to test known map boundaries This adds the clua function `view.in_known_map_bounds(x, y)`, which returns true when the given coordinates are in the bounding box of map areas known to the player. This is necessary to call functions like `travel.is_excluded()` without generating an error, since this and similar functions make such a check. Callers of these functions could just use `pcall()` to trap the error, but it's good to have parity between information the UI provides and what clua can determine. This is a minimal feature addition that I've tested and will be pushing to stable. I'm making it now for the purpose of running qw during tournament. It turns the formerly static `_in_map_bounds()` to the global `in_known_map_bounds()`, but the behaviour is identical. I've also documented the relevant crawl-side C++ functions. -------------------------------------------------------------------------------- 5d4078a31e | gammafunk | 2023-05-12 23:37:28 -0500 feat: Better flight reasoning for lua functions For the clua functions travel.feature_traversable() and view.is_safe_square, add an assume_flight boolean argument that has these assume the player has permanent flight. It's important to be able to reason about traversability and safety when considering using temporary flight or swapping to a permanent flight item. It wouldn't be possible to do use these functions to reason about flight without an argument like this, since there are multiple reasons a square can fail to be traversable or safe. These functions could instead return a table indicating all the reasons why a square fails to be safe or traversable, but that would break current scripts, so we'll do this for now. The comments for these functions have been updated to more accurately describe what they test. This is a minimal feature that I've tested and will be pushing to stable. I'm making it now for the purpose of running qw during tournament. It adds a new argument to `feat_is_traversable_now()` on the C++ side, but with a default value that gives identical behaviour to the old function. -------------------------------------------------------------------------------- 13bd767e95 | Nicholas Feinberg | 2023-05-12 14:36:26 -0700 Fix: display 'ready to howl' properly (elliptic) We hid it if the howl key was set to false. It should only be hidden when that key is true. -------------------------------------------------------------------------------- 4c684d5d01 | Nicholas Feinberg | 2023-05-12 14:30:51 -0700 Fix: finish removing the book of Maledictions (Woody) Oversight in be57942821a. -------------------------------------------------------------------------------- ea43df2a32 | advil | 2023-05-08 09:35:17 -0400 fix: Fully remove a broken CI line a9a6e9e7af1e only removed one but this was duplicated many times. -------------------------------------------------------------------------------- a9a6e9e7af | advil | 2023-05-08 09:20:26 -0400 fix: remove a redundant/broken CI step Our current invocation of actions/checkout fetches the entire repository history and the tags, and then this fetch line exists to apparently shorten the history to depth 1. This isn't normally a big deal, but if the most recent tag on a branch is non-annotated, this breaks git describe on that branch. Current trunk is like this because of the debian tag. It's possible there's something I'm still not appreciating about what this stop was intended to accomplish? Both changes to fetch depth were added in a single commit in 449611fb78e74826. -------------------------------------------------------------------------------- 6d2539766c | Nicholas Feinberg | 2023-05-07 15:27:23 -0700 Prevent more duplicate artps Don't allow boots of rampaging of rampaging or scarves of invisiblity of invisibility. -------------------------------------------------------------------------------- 1fe5e1216f | Nicholas Feinberg | 2023-05-07 15:01:11 -0700 Don't count firewood as kills (CarefulOdds) Clutters up logs and messes with the 'pacific' category. We're more of an Atlantic gang here anyway. Implemented in the display side rather than the recording side so that I don't have to bother with save compat. -------------------------------------------------------------------------------- c80a10f4b6 | gammafunk | 2023-05-06 22:22:40 -0500 doc: Add a missing debian changelog entry for 0.29.1, which was added to the 0.29 branch but not to trunk. -------------------------------------------------------------------------------- fcab9622e5 | gammafunk | 2023-05-06 22:22:40 -0500 doc: Update the debian changelog for 0.30 (cherry picked from commit 0735c779e89de14d041d983ef53a20bf03093de3) -------------------------------------------------------------------------------- 5ef74148a8 | advil | 2023-05-06 22:22:40 -0500 docs: various changelog tweaks (cherry picked from commit a01eaba1cd2d81f8018eaf2b920752966742fc37) -------------------------------------------------------------------------------- ce023dd156 | advil | 2023-05-06 22:22:39 -0500 docs: sync changelogs 0.29.1 was missing from the trunk version (cherry picked from commit 561828ffede38fdaa81fd45f5f7cf5613b545356) -------------------------------------------------------------------------------- 7b2ceec048 | Nicholas Feinberg | 2023-05-06 15:52:19 -0700 Tweak Sandblast description (Abyss, elliptic) 'Half again' confused folks; try 'one-and-a-half-times'. -------------------------------------------------------------------------------- 12c4e5fa89 | Nicholas Feinberg | 2023-05-06 15:52:19 -0700 Simplify misc evokers' descriptions Now that they should each be unique, don't refer to 'others of their kind.' (This confused someone who thought it referred to other misc evokers!) Also, don't mention charges for 1-charge items (seems redundant), but do mention it for Xom chesspieces. -------------------------------------------------------------------------------- d14b0f4ee2 | Kyle Rawlins | 2023-05-05 16:06:30 -0400 task: 0.30 trunk tournament reminder -------------------------------------------------------------------------------- 51783674b7 | patrick | 2023-05-04 20:36:23 -0400 Change the changelog -------------------------------------------------------------------------------- 3637d85276 | Nicholas Feinberg | 2023-05-04 16:58:29 -0700 Finalish changelog update for 0.30 -------------------------------------------------------------------------------- 84e6b3452c | Kyle Rawlins | 2023-05-04 11:45:10 -0400 fix: don't disable autoclear for rc errors Previously, an rc with many errors would force you to view each one, because error messages reset autoclear. This behavior is really intended for cases where an error comes in a batch with many other messages, rather than a lot of errors at once; rc parsing generally doesn't emit many messages except errors. So, use a different autoclear behavior for this special case. The implementation is very brute-force with yet another crawl state var, for simplicity near a release. (A better idea might be to enhance the RAII message controls to allow controlling this behavior directly.) This probably wasn't a big deal previously but recent improvements in rc error messages mean that some popular rc files (hda, at least) produce *many* errors if used as-is in 0.30 (the bugs aren't new, but the error messages for them are). -------------------------------------------------------------------------------- efa6de2278 | Nicholas Feinberg | 2023-05-02 21:59:25 -0700 Show 2x for monster plasma beam 2x3d19 or w/e. -------------------------------------------------------------------------------- c49c5fa273 | Nicholas Feinberg | 2023-05-02 21:59:00 -0700 Fix: monster plasma beam damage (dilly) Use the monster zap damage, not the much higher player values. -------------------------------------------------------------------------------- 928a59620c | Nicholas Feinberg | 2023-05-02 21:50:20 -0700 Display plasma beam damage in monster -------------------------------------------------------------------------------- 4198be8af4 | Nicholas Feinberg | 2023-04-29 15:39:06 -0700 Replace Vhi's dust cloud with electricity Now that we have decorative electric clouds, let's use em! -------------------------------------------------------------------------------- 51fda8cc5f | Nicholas Feinberg | 2023-04-29 15:23:08 -0700 Make Stuck block self-shafting (acrobat) For consistency with pre-existing shaft traps, harpoon shot, etc. Resolves #2839. -------------------------------------------------------------------------------- 7dff98ebb8 | Nicholas Feinberg | 2023-04-29 15:11:49 -0700 Correct Disjunction description (Lici) Don't claim it causes contam, since it hasn't since fb90bdcb574a36d (Nov 2021). -------------------------------------------------------------------------------- 2f52df8dfa | Nicholas Feinberg | 2023-04-29 15:05:45 -0700 Turn off the zombie incinerator (acrobat) Recall has been broken for salamander/swimming zombies and lava/deep water since db45db7b37d (April 2023). Ten years was probably long enough to leave that bug around. Resolves #2866. -------------------------------------------------------------------------------- c985221192 | Nicholas Feinberg | 2023-04-29 15:00:05 -0700 Dedent -------------------------------------------------------------------------------- cdfb0321a8 | Nicholas Feinberg | 2023-04-29 14:48:17 -0700 Slightly clarify Vhi's failure messages (Ge0ff) It's very confusing what currently happens if you try to charge at e.g. a thorn hunter behind briars. The issue here is that you *should* be getting the message `The briar patch is immovably fixed there.`, since stationary creatures (like briar patches) can't be teleported or blinked. You *can* get that message if there is a valid charge target *somewhere*, but if there aren't *any* valid charge targets, `electric_charge_possible` returns false and so `spell_uselessness_reason` just returns `you can't see anything to charge at.` This commit plumbs slightly more info through, but it still doesn't solve the original info. Hopefully someone will figure out something better at some point. Closes #3007. -------------------------------------------------------------------------------- 92c415aa16 | Nicholas Feinberg | 2023-04-29 14:23:15 -0700 Let executioners chop heads (bobross420-1) Some lore is simply too important to ignore. This also affects a hypothetical disarmed Ignacio. Resolves #3094. -------------------------------------------------------------------------------- 20724dfda1 | Nicholas Feinberg | 2023-04-29 14:13:24 -0700 Fix abyss_greek_temple issues (damerell) Place Ru, and remove antique logic for disabling Wu in stable. Reverts 2e29d97aba9aef597722005b08d2148bdfdfa7be. Closes #3103 -------------------------------------------------------------------------------- 73dabc6067 | Nicholas Feinberg | 2023-04-29 13:57:31 -0700 Fix trailing comma for UI JSON (tonyspumoni) json_write_comma() is intended to be called immediately *before* writing another object. If there's already a comma or opening brace or similar as the previous character, then json_write_comma is a no-op. This nicely (if somewhat confusingly) solves the issue of writing commas before all but the last element of a list. Closes #3078. -------------------------------------------------------------------------------- 7e8df60e79 | Michael Del Monte | 2023-04-29 13:38:07 -0700 Makes _safe_move_player also clear the command buffer. Without doing this you get silly and possibly dangerous results if the command buffer has commands that will get executed after the safe move fails. Closes #2986. -------------------------------------------------------------------------------- 3d22aafbd0 | Aliscans | 2023-04-29 13:30:38 -0700 Clear the training target before the message, rather than afterwards. This means that a lua hook which catches the message can change the skill target for the relevant skill (imagine a script which sets an Axes target at 3, and sets it to 4 when it reaches 3). Previously, the game set the target to 0 after the message returned, whether or not the skill was still at its target. -------------------------------------------------------------------------------- 618583d7c3 | Zhang Kai | 2023-04-29 13:29:49 -0700 Update ability.txt -------------------------------------------------------------------------------- 18b1e96e0c | Zhang Kai | 2023-04-29 13:29:49 -0700 Update species.txt -------------------------------------------------------------------------------- 87f2efb3ad | Zhang Kai | 2023-04-29 13:29:49 -0700 Create status.txt -------------------------------------------------------------------------------- 8323249d43 | Zhang Kai | 2023-04-29 13:29:49 -0700 Update ZH translation -------------------------------------------------------------------------------- ea4a182ca1 | Zhang Kai | 2023-04-29 13:29:49 -0700 Update ZH translation -------------------------------------------------------------------------------- 1f5b0daca9 | Nicholas Feinberg | 2023-04-29 13:23:38 -0700 Hide spellcasting by default for Trog Considered harmful! -------------------------------------------------------------------------------- e08a67761e | Implojin | 2023-04-28 16:21:22 -0500 fix: Don't let Jiyva eat evokers (dilly) Since 5db6f66fbb, elemental evokers are now unique per-game, so we probably don't want to let Jiyva slimes eat them. Thanks dilly! -------------------------------------------------------------------------------- f69bf04e7a | Nikolai Lavsky | 2023-04-27 16:38:32 +0300 fix: make horn of Geryon's summons default to attacking Currently, summoned hell beasts often just follow the player and ignore nearby enemies until they attack first. This commit makes these summons more aggressive, similar to how mutant beasts behave. -------------------------------------------------------------------------------- 2c2278344c | advil | 2023-04-27 09:31:48 -0400 fix: add a missing nil check to borgnjor's wizlab Resolves #3109 -------------------------------------------------------------------------------- 0704695555 | Nicholas Feinberg | 2023-04-26 16:29:27 -0700 Nerf Call Imp (elliptic) Don't sometimes round up spear enchantment, to discourage CERTAIN PEOPLE from repeatedly re-rolling imps until they get their ideal gacha roll. -------------------------------------------------------------------------------- 6e42c06551 | Kyle Rawlins | 2023-04-24 17:37:56 -0400 fix: improve some options errors Be more explicit about the source of the problem in a few cases, reword. -------------------------------------------------------------------------------- 7bafe92a0b | Kyle Rawlins | 2023-04-24 17:08:31 -0400 fix: add some missing explore_stop aliases We had plural forms for most options except these two, make it consistent. -------------------------------------------------------------------------------- d85ba11b5a | advil | 2023-04-24 07:23:41 -0400 fix: redo disable some errors on dgl builds Restore c8ec674a0ca, with some missing #ifdefs. This reverts commit 2cc9ac7196178b7a7cd06e2ba3a27825e5ef34d3. -------------------------------------------------------------------------------- 2cc9ac7196 | Nicholas Feinberg | 2023-04-23 22:57:48 -0700 Revert "fix: disable some errors on dgl builds" This removed the 'type' option from dgamelaunch builds entirely. Since read_startup_prefs assumes that option exists, the game would crash on startup. Probably. This reverts commit c8ec674a0ca8a934dd279f3553d5b4599694bb78. -------------------------------------------------------------------------------- c8ec674a0c | Kyle Rawlins | 2023-04-23 22:31:28 -0400 fix: disable some errors on dgl builds Recent changes error on these options on builds where they are disabled, but previously, dgl builds wrote these options to the prefs file. So, disable the errors for now until online players have ugpraded. -------------------------------------------------------------------------------- f8af5b4991 | patrick | 2023-04-23 14:37:26 -0400 Merge branch 'master' of github.com:crawl/crawl -------------------------------------------------------------------------------- 7c48da4bfe | patrick | 2023-04-23 14:36:09 -0400 Add a new Qazlal overflow altar vault -------------------------------------------------------------------------------- ec78dead90 | Edgar A. Bering IV | 2023-04-23 11:32:41 -0700 feat: print damage punctuation for arcjolt -------------------------------------------------------------------------------- d4795048de | nicolae-carpathia | 2023-04-23 13:19:29 -0400 Add a diverse assortment of Vaults vaults (#3100) Includes vaults for _empty, _standard, and _hard. I looked over the existing vaults, but Vaults vaults tend to have a simpler variety than other vaults because they tend to use a reduced glyph set. If I've accidentally duplicated some other existing vault, my apologies. Unless I've accidentally duplicated one of my own vaults, in which case I absolve myself completely of all wrongdoing. -------------------------------------------------------------------------------- 36672149da | advil | 2023-04-23 09:07:49 -0400 feat: a `default` directive for rc files This directive restores options to default values, in a way that is robust to various forms of default initialization. It unfortunately just gives an error for custom parsed options at the moment. -------------------------------------------------------------------------------- 8e18f04a39 | advil | 2023-04-23 09:07:49 -0400 docs: comment some newer options code -------------------------------------------------------------------------------- 464472ef9f | advil | 2023-04-23 09:07:49 -0400 fix: move travel_avoid_terrain fully into game_options `on_set` functions that affect state outside of a game_options object have a bad interaction with initialization, so this state would get reset somewhat unpredictably. This commit removes the api for manipulating this option, but it was also completely unused aside from the option. -------------------------------------------------------------------------------- 14641e6071 | advil | 2023-04-23 09:07:49 -0400 fix: restore some test code Accidentally rebased this out -------------------------------------------------------------------------------- a550bc702f | Kyle Rawlins | 2023-04-23 09:07:49 -0400 fix: pull an enum into its own file Apparently through some complex include chain, S_NORMAL conflicts with a win32 define. This is a result of me including mon-util.h, when really I just needed this one enum -- so pull it out into its own header. Also, remove some c++11 warning-triggering constexprs. -------------------------------------------------------------------------------- 6c9d98b8e7 | Kyle Rawlins | 2023-04-23 09:07:49 -0400 fix: tweak some fixed length option details Also, lint -------------------------------------------------------------------------------- ffccbfb39d | Kyle Rawlins | 2023-04-23 09:07:49 -0400 refactor: standardize some complex list options These were easier to do than I might have expected; several had existing classes where writing a parsing constructor was not very hard, making them easily adaptable to ListGameOption. The most involved here was `monster_list_colour`, which I needed to relocate; it has less ad-hoc code but it's still a bit involved. -------------------------------------------------------------------------------- 1af31d3574 | advil | 2023-04-23 09:07:49 -0400 refactor: yet more GameOption conversions Honestly, most of these were too boring for anyone to have done anything fancier with them before now. `game_seed` was already essentially handled like the on_set cases. Along the way, I fixed the kind-of-broken `tile_tag_pref`, adding two new values ("auto", which better handles the old default behavior, and "all", which just shows all tags). -------------------------------------------------------------------------------- 09bdf45078 | advil | 2023-04-23 09:07:49 -0400 refactor: convert rc directory options to GameOptions The conversion was relatively straightforward, though initialization order remains a bit tricky. As part of this I have upped the comments, marked these options as disabled on DGL, and added some debug build diagnostic code to ?v. -------------------------------------------------------------------------------- 864cb40d6f | advil | 2023-04-23 09:07:49 -0400 fix: prevent some dgl build errors Previously, these options would be simply ignored, but now that they are marked as disabled, writing them out to the prefs file leads to errors. So, don't write them. -------------------------------------------------------------------------------- 1273e43332 | advil | 2023-04-23 09:07:49 -0400 refactor: move some custom options to base_game_options The `macros` and `bindkey` syntaxes aren't appropriate for converting to a GameOptions implementation, and in addition, the former already has an in-game editing UI (the latter probably should, but doesn't; if it does, it'll be distinct from a regular options-editing UI). So, move them to the base class list of manually handled meta-options (which is where I'm keeping things that have this property). Includes are handled in the base class. So move `additional_macro_file` to the base class as well. (I don't know if turning this one into a ListGameOption would be viable, but it might be good to generalize the syntax..) Also, fix some reset calls that were in the wrong class. -------------------------------------------------------------------------------- 6ea0fb6c0e | advil | 2023-04-23 09:07:49 -0400 refactor: simplify dump_order implementation This had a non-standard implementation involving both a set and a vector, but only the vector was actually used. Without the set, it's just a bog-standard list option. (If someone wants the set back, it could be reconstructed in an `on_set` trigger.) -------------------------------------------------------------------------------- 224273044b | advil | 2023-04-23 09:07:49 -0400 fix: rewrite the `enemy_hp_colour` option The code that uses this option is hardcoded to assume a particular size vector with each position having a designated value. However, the option implementation treated it as a list, with complete flexibility as to size, allowing prepending, subtraction, etc., and no validation of the vector size. I haven't gotten it to crash but suffice to say the behavior of the consumer code is at best undefined if the option is not set correctly. It looks to me like the list manipulation patch 11 years ago didn't look closely enough at what this option did when implementing prepending etc for this option, though the lack of size validation goes back to the original implementation of this option in ff9fb87a6f8b8d. This commit reimplements the option behavior to always use a fixed size vector. If not enough options are supplied, the unsupplied values remain default, and if too many options are supplied, it produces an error. I've also added the possibility of writing "default" for any of the slots as a convenience. -------------------------------------------------------------------------------- 877bb45555 | advil | 2023-04-23 09:07:49 -0400 refactor: convert language options to GameOption These use the string field + on_set pattern, which was very similar to their previous implementation. -------------------------------------------------------------------------------- 2d27c6a638 | advil | 2023-04-23 09:07:49 -0400 refactor: convert map scale options to FixedpGameOption This standardizes these two options using a new option class that can handle decimal values directly, using `fixedp<>`. ...and, uh, this commit merges fixedp.h. This commit would at very long last, resolve #810. Though, unlike the original idea of that PR, I no longer think there's a need to wholesale convert scaled int code to fixedp in order to merge! It is still a really handy class to have around for a lot of crawlcode, and it's kind of silly that it has sat for so long without seeing any use. (Insider notes: this version of fixedp.h has a few tweaks beyond the 2018 version. Primary ones are: integrating the test code with crawlcode, and implementing numeric_limits min/max. Also added an explicit copy constructor and dealt with various new warnings. We'll see how it does on gcc...) -------------------------------------------------------------------------------- 55b71c9664 | advil | 2023-04-23 09:07:49 -0400 refactor: standardize `travel_avoid_terrain` This option was only semi-implemented in the first place, and the new technique of supplying a lambda to a ListGameOption is a good match for standardizing this option without having to rewrite too much. -------------------------------------------------------------------------------- c85053008e | advil | 2023-04-23 09:07:49 -0400 refactor: generalize some bitfield list options These three options are generalized using a more invasive technique than previous commits, to handle an underlying bitfield type. Instead of trying to convert the list handling directly into a templated ListGameOption or writing a new options class, I have stored the list as a string, and triggered an update function each time the string is changed, which updates the real value by overwriting the bitfield. This has the downside that if the actual option state is changed outside of the option handling code, it does not trigger a change in the list option state; but currently this does not matter. -------------------------------------------------------------------------------- 219cf69338 | advil | 2023-04-23 09:07:49 -0400 docs: update some option entries Misc changes I noticed while reviewing options for refactoring. Mostly just being clearer on the range of possible values for some options. -------------------------------------------------------------------------------- 8116253f26 | advil | 2023-04-23 09:07:49 -0400 refactor: standardize some maybe_bool option handling There are various ways to write an options class for this, but since a bunch of existing cases were already using MultipleChoiceGameOption, I just created a convenience specialization of that class. -------------------------------------------------------------------------------- 16ca85fa0a | advil | 2023-04-23 09:07:49 -0400 fix: deal with some gcc-specific build issues * biggest change: gcc is choking if the function supplied to OptFunctor is not explicitly a pointer or ref. I'm guessing clang is inferring this automatically. The spec does require that functions be a pointer or ref, but I'm unclear as to whether gcc or clang is right in their behavior when it's not explicit. In any case, making it explicit seems to work on both compilers. * gcc doesn't like the `constexpr`s on `opt_parse_state`, not sure why. * some misc warnings -------------------------------------------------------------------------------- 12f39dd2a6 | advil | 2023-04-23 09:07:49 -0400 refactor: convert remaining newgame opts to GameOption This required work. * Add an `on_set` function. This is present for all GameOption objects but I only exposed it in a constructor the class where it is actually used for now. * Do some fairly crazy template stuff so that ListGameOption can (approximately) take a function that does the type conversion in its template arguments, rather than a class name. This finally let me unify and remove one of the many ways that initfile.cc parses += etc. It isn't intended to change the behavior of the relevant options in any significant way, but it could. -------------------------------------------------------------------------------- 2a961404d8 | advil | 2023-04-23 09:07:49 -0400 refactor: convert `type` to a GameOption This one was straightforward to convert; I tweaked its behavior and clarified its documentation in the process. Now, if the main menu is shown, it will set the default game type to use at that menu with an empty name. Previously, it did nothing in this scenario. -------------------------------------------------------------------------------- 2bd05cc0aa | advil | 2023-04-23 09:07:49 -0400 feat: generalized means of disabling an option on a build That is, warning the user that it is disabled. Previously, you could do this with only a multiple choice option. This is intended to be used lightly: users might paste options between builds, and this should be relatively seamless. -------------------------------------------------------------------------------- 0a6e7bf317 | advil | 2023-04-23 09:07:49 -0400 refactor: standardize some newgame options This converts a few newgame options to GameOption implementations. These are, remarkably, the "easy" cases. Actually using GameOption was not such a big deal, but handling the quirky interactions and bug this revealed was. * Fixed a really nasty bug where in game modes selected via ui, the startup pref file for that game mode could be read under some circumstances, but was never written to; when it was read, it overrode the regular prefs file. (According to comments, the intent is that it should be used at all in this scenario.) * The option `fully_random` was used internally, and could be set, but when set as an option in rc, it was only half-implemented: it still allowed char selection, but then showed the reroll prompt. Since this can be set (even more so after turning it into a GameOption), I've it a real implementation for the case where it is set via rc. (It might instead make sense just to not save it at all? But I wasn't quite sure if that would break complicated newgame code.) * Several newgame options weren't documented. For new I've just hand-listed the sprint map options, since these are going to be quite hard for a user to figure out. * Add some bits of game_option API that didn't end up getting used in this commit, but seem nice to have. -------------------------------------------------------------------------------- 79a2db1cd2 | advil | 2023-04-23 09:07:49 -0400 refactor: make `split_parse` a bit more organized This code is still not very general... -------------------------------------------------------------------------------- beecc3cae0 | advil | 2023-04-23 09:07:49 -0400 refactor: generalize option case handling Before this commit, case sensitive GameOption-based options needed custom handling, because a `lowercase` was done on the string used for the constructor. This adds support for case sensitivity to a couple of GameOption subclasses, and uses line parser state in the constructor so that these classes can have access to the case sensitive version. As part of this, I was able to fully remove the hardcoded list of case sensitive options. Sadly, only one custom parsed option was able to be generalized as a result of this. Also, this fixes what seems to be a bug where morgue_dir is not treated as case sensitive. -------------------------------------------------------------------------------- a5d8a0da8e | advil | 2023-04-23 09:07:49 -0400 refactor: better separate option parsing, state, and management Crawl options are extremely involved, with a massive set of options that are set up and parsed in a wide variety of ways, with nearly all the work being centralized in one heavyweight class (`game_options`) that is primarily instantiated as a singleton. As this code has grown it has become increasingly challenging to maintain it, especially when considering significant user-facing improvements to configuration. This commit attempts to impose (what I think is) a better structure on this. I have split `game_options` into a base class `base_game_options`, that is responsible for managing option "meta-state", and where generic option-related code goes; option parsing is now run from this class. The `game_options` class is now responsible for actual options fields, as well as custom parsing. I haven't attempted (yet) to eliminate the giant custom parsing conditional sequence, but it is now partitioned off from the general parsing code. As part of this I have abstracted option parsing state out of the parsing function itself, allowing parsing to be split across multiple functions in a cleaner way. There were probably multiple ways to achieve these refactoring goals, but this one (a) keeps api compatibility for Options for external users, and (b) makes it possible to write a sane copy constructor / assignment operator for the meta-state (especially the vector of `GameOption *`s) while using a defaulted copy constructor for the actual options fields. Previously a defaulted copy constructor existed, but it wasn't safe to use for any purpose except accessing the raw fields, because the metastate wasn't handled correctly. The existing `merge` function couldn't substitute for general purposes because it can only handle GameOption style options. As a refactoring commit, this leaves things in a somewhat intermediate state: I have done what is necessary to get the top-down changes to work, but there's a lot of messy code here still.. -------------------------------------------------------------------------------- 6e8f0f562f | Nicholas Feinberg | 2023-04-22 13:10:56 -0700 Reduce shield penalties with Str instead of size (Lici) To make strength a bit more meaningful for some characters that might not currently care about it and to make tower shields more desirable in the late game, replace the size component for the shield penalty formula (for spell success & attack delay) with a strength component. With this formula, a 15 Str character will have the same penalty as a medium-size character did before. A 21 Str character will have the same penalty as a Formicid, Ogre or Troll did, a 9 Str character will match an old Kobold, and a 3 Str character will match an old Spriggan. This is a very small nerf for D:1 large species fighters and a buff to them thereafter. Mid-sized stabbers, eg vampires, are hurt a bit more; compensation TBD. I vaguely suspect this commit is a bit too generous to shield users and some nerfs are needed in some way, but I'm tossing it up for now to think about it. -------------------------------------------------------------------------------- abc949cf19 | Kate | 2023-04-21 23:11:19 +0100 Fix tag_upgrade compilation Oops. -------------------------------------------------------------------------------- 620db56ad9 | Medrano83 | 2023-04-21 23:47:06 +0200 Fix two links in INSTALL.md Credit to lukem12345. Closes #2108 -------------------------------------------------------------------------------- a3e7370cef | Kate | 2023-04-21 21:52:43 +0100 Add a description lookup for passive effects Using the name listed on the overview screen. Possibly this should use a proper enum list like status_type. -------------------------------------------------------------------------------- 291f4736cf | Kate | 2023-04-21 21:52:43 +0100 Rework the overview screen Remove the second column of "resists" (which mostly displayed passive effects gained from amulets, and a few other assorted effects which only displayed when active such as Archmagi and -Tele). The overview screen now consists of two columns - resists, and equipment (which now have a lot more space for randart inscriptions to be visible). SInv is moved to the first column (by virtue of being an effect provided by a ring that's more likely to be swapped around frequently). Other generic "passive" effects, such as those provided by amulets and artefacts, are shown below in a new list, grouped under "%" for longer-term passive effects, followed by "@" for temporary status effects, and "A" for mutations and innate abilities. This also allows some more detail to be displayed (such as percentage chance of corrosion/slow from *Corrode/*Slow artefacts, and percentage damage bonuses from Harm). RMsl also moves to be displayed in this list rather than as a temporary status light, as it's now provided by equipment, DS mutation or Qazlal passive rather than being a temporary duration. Potentially other, rarer passive effects (such as those from unrands) could also now be listed. -------------------------------------------------------------------------------- e7184f5f97 | Kate | 2023-04-21 21:52:36 +0100 Remove unused ARTP_CAUSE_TELEPORTATION Teleportitis has been mutation-only for some time. -------------------------------------------------------------------------------- 82af5b777a | Kate | 2023-04-21 20:46:33 +0100 Remove an unused parameter from wizardry -------------------------------------------------------------------------------- 8ee25b8dbc | Nicholas Feinberg | 2023-04-21 12:04:16 -0700 Increase lightning rod damage by 50% Juice it up a little to make it a bit more comparable to other elemental evokers, since players tend to be disappointed in it. -------------------------------------------------------------------------------- ebefce21f7 | Kyle Rawlins | 2023-04-20 20:50:57 -0400 Revert travel messaging change and followups This patch was a great idea, and well worth revisiting after the 0.30 release, but unfortunately the autotravel code it was trying to use to accumulate messages is way more complicated than any of us had any idea of. Main problems that arose: * autotravel does exhaustive search (at least for cases where it doesn't find a path). Because of this, messaging would accumulate about all exclusions that could potentially be relevant, not just the ones that actually block travel in a particular way. In cases where the target wasn't reachable at all, a message would appear for every reachable exclusion in the dungeon. I think the autotravel search probably needs to be rewritten to handle some of these cases a bit better, e.g. a dynamic programming approach where a specific path can be checked to find appropriate exclusion messaging. * Some traversal information is only available with an excursion (specific issues with this were in followup bugfixes that tried to address travel to unknown squares) * Some cases of non-exclusion blockers (unexplored stairs) were not messaged correctly It's possible that autotravel search is generally not what it could be... This reverts commit 25895a7845a2bd821876fda33a95df77f9feda4f. This reverts commit 860fb061e71aec5659aa2f719141f7eac004ad19. This reverts commit 710642bebeccf30edc188bff0cbce11d0ecf633b. This reverts commit a3c4068687a7597f2320aab96a41c1ca348dc40e. -------------------------------------------------------------------------------- 77a82715bb | Nicholas Feinberg | 2023-04-20 16:42:02 -0700 Simplify waterlogging Don't reduce effect duration by distance from the target. I'm skeptical that this mattered (how often do you waterlog multiple relevant enemies at once, anyway?) and it could in principle result in negative durations. -------------------------------------------------------------------------------- d936c97349 | patrick | 2023-04-19 21:47:18 -0400 Add a quote for Harold -------------------------------------------------------------------------------- a8025317a9 | Nicholas Feinberg | 2023-04-19 09:59:20 -0700 Fix the sulking sword('s lore) -------------------------------------------------------------------------------- fb780f5df6 | Nicholas Feinberg | 2023-04-18 22:45:21 -0700 Always waterlog monsters hit by phial Even if they're knocked out of the Splash Zone tm. -------------------------------------------------------------------------------- 335c31701a | Nicholas Feinberg | 2023-04-18 22:38:26 -0700 Reduce phial waterlogged duration Previously lasted 7-11 turns at 0 evo. Now lasts 2-3 turns at 0 evo, gaining 0.5 turns of average duration for each level of evo. -------------------------------------------------------------------------------- 272f719a29 | Nicholas Feinberg | 2023-04-18 22:23:17 -0700 Reduce phial of floods' range to 5 (Lici) Avoids issues with knocking enemies out of LOS and brings it closer to parity with ?silence. -------------------------------------------------------------------------------- abe9d7adf6 | Nicholas Feinberg | 2023-04-18 22:18:06 -0700 Simplify evoker recharge curves Previously, evokers recharged according to an extremely complex formula. This simplifies recharging considerably. Both before and after, at XL 14 and 0 Evo, evokers could be used about once per XL. At XL 27 and 13 Evo, they could be used about five times per XL; now they can be used about 1.5 times. This changes makes evokers usable a bit more often before XL 13 and significantly less often at higher levels. This should make using them feel a bit more strategic and meaningful, without making them so precious that you're never able to use them at all. https://docs.google.com/spreadsheets/d/1MKU84xL0E4dU3FkAhMTiZ7-7EiLwQI9TXgdlSoVg he8/edit?usp=sharing has a full breakdown. -------------------------------------------------------------------------------- 48e7df34de | Nicholas Feinberg | 2023-04-18 21:26:18 -0700 Fix: don't corrode player on excursions (Sergey) The player shouldn't be displayed as corroded when they look at other floors of Slime. They *should* be shown as corroded if they're currently adjacent to a slime wall but just looking at another floor, but that would require a larger rework to fix. -------------------------------------------------------------------------------- aaebb76ac8 | Nicholas Feinberg | 2023-04-18 21:23:02 -0700 Fix: plasma conj'd warnings (Snackwell, CarefulOdds) Don't warn when shooting plasma beams through IOODs, battlespheres, etc. -------------------------------------------------------------------------------- 218f5a9f79 | Nicholas Feinberg | 2023-04-18 21:19:01 -0700 Add a you.species() clua alias For consistency with the internal C++ naming. Might shift some references over later. -------------------------------------------------------------------------------- ec820db308 | Kate | 2023-04-18 23:17:00 +0100 Scale condenser vane cloud numbers with power To make it less able to fill entire screens with clouds even at minimal power, add some noticeable power scaling to the chance to place a cloud on each valid target square. -------------------------------------------------------------------------------- 706747fef1 | advil | 2023-04-18 08:40:43 -0400 docs: update webtiles changelog -------------------------------------------------------------------------------- 25895a7845 | Nicholas Feinberg | 2023-04-17 17:50:06 -0700 Fix: set travelers up for success (pdpol) Neither an exclusion on Vaults:4, an exclusion on Vaults:4, an exclusion on Vaults:4, an exclusion on Vaults:4, an exclusion on Vaults:4, an exclusion on Vaults:4, an exclusion on Vaults:4, an exclusion on Vaults:4, an exclusion on Vaults:4, an exclusion on Vaults:4, an exclusion on Vaults:4, an exclusion on Vaults:4, an exclusion on Vaults:4, an exclusion on Vaults:4, an exclusion on Vaults:4, nor an exclusion on Zot:1 will stop them! -------------------------------------------------------------------------------- 2dbb833546 | Kate | 2023-04-17 17:05:39 +0100 Fix spectral weapons not being treated as summoned Fixes them dropping items on death since 3f05228d. -------------------------------------------------------------------------------- 6f1fe797d6 | Kate | 2023-04-17 16:47:48 +0100 Add orb of Battle/Wucad Mu tiles (Sastreii) -------------------------------------------------------------------------------- e1321aca23 | Kate | 2023-04-17 15:26:02 +0100 Adjust Dispater's resists Give them immunity to acid (to prevent them being corrodable by their own orb), and reduce their fire resistance from 3 to 1. -------------------------------------------------------------------------------- 92fcfee559 | Kate | 2023-04-17 15:26:02 +0100 Let monsters be affected by *Corrode and *Slow -------------------------------------------------------------------------------- 27621e4024 | Kate | 2023-04-17 15:26:02 +0100 Tweak *Corrode and *Slow artefacts Instead of each source of *Corrode giving an independent 3% chance to apply a level of corrosion on taking damage, make sources additive (so the very unlikely case of stacking lots of sources of *Corrode can no longer apply multiple levels of corrosion). Do the same for *Slow (which has a 1% chance per source). -------------------------------------------------------------------------------- a414cb0b83 | Kate | 2023-04-17 15:26:02 +0100 Deduplicate some Harm code -------------------------------------------------------------------------------- 1367321604 | Kate | 2023-04-17 15:26:02 +0100 Allow artefact bardings to get SInv and Rampage With them being worn by both Nagas and Armataurs, don't block properties that are potentially useful to one of the two species (and rPois was already allowed). -------------------------------------------------------------------------------- fe652c801a | Implojin | 2023-04-17 07:14:01 -0500 fix: webtiles rampage indicator -------------------------------------------------------------------------------- 860fb061e7 | Edgar A. Bering IV | 2023-04-16 15:46:06 -0700 fix: a range check in travel failure messaging -------------------------------------------------------------------------------- cfb1e0cf12 | Medrano83 | 2023-04-16 23:46:17 +0200 Add version information for Clang Closes #2408 -------------------------------------------------------------------------------- 2c689178d5 | Kate | 2023-04-16 21:21:59 +0100 Adjust the sphere of Battle Let it enhance all destructive spells instead of only conjurations, but make it act as a negative enhancer for non-destructive spells (giving it more of an orb-like downside). The description implied that the summoned battlesphere's power was based purely off Conjurations skill, but instead its power was calculated exactly as if casting the spell (factoring in intelligence and other enhancers). Change it to only look at Conjurations skill (resulting in it being easier to reach higher power since no stepdown is applied). -------------------------------------------------------------------------------- 710642bebe | Edgar A. Bering IV | 2023-04-16 12:10:22 -0700 fix: be correct when failing to traverse the unknown -------------------------------------------------------------------------------- 0f0e7abb2d | Zhang Kai | 2023-04-16 10:15:37 -0700 text: update zh translations In: unrand.txt monsters.txt spells.txt items.txt species.txt ability.txt branches.txt cards.txt tutorial.txt status.txt help.txt FAQ.txt clouds.txt items.txt help.txt backgrounds.txt [ Closes #3069 ] -------------------------------------------------------------------------------- 8da0834b8c | Skrybe | 2023-04-16 00:29:24 -0700 feat: edit layout_misc_corridors in Lair (#2898) Make layout_misc_corridors sometimes use boxy=false when in Lair. This provides a more "natural" look than the square rooms it generates otherwise, and works well with Lair ruination. As a bonus, it also creates more crevices for the player to hide in. -------------------------------------------------------------------------------- 3629b4d965 | Perry Fraser | 2023-04-16 00:09:02 -0700 feat: show attack strength punctuation for instakills (#2793) Seeing lots of !!!!!s is fun. Let's make Grand Finale's and MCC's messages print some out for however much HP the monster you killed had. -------------------------------------------------------------------------------- f40d3337c5 | Monkooky | 2023-04-16 00:07:40 -0700 fix: Rift reach assumptions in some edge cases Rift breaks the assumption that the only number besides two is one. This fixes that. However, it still makes the assumption that the only REACH enums are just an int with a fancy title. This will break spectacularly if a weapon is ever given a reach that isn't just a number. Closes #2683 -------------------------------------------------------------------------------- a3c4068687 | pdpol | 2023-04-15 23:30:27 -0700 feat: better explain some travel failures and stops [ Committer's note: revised to also handle terrain; switched to a vector passed by reference instead of a map passed as a pointer. Closes #2627 ] -------------------------------------------------------------------------------- 990a428a5c | Edgar A. Bering IV | 2023-04-15 13:05:23 -0700 feat: give a few more monsters spectral weapons Adding it to the Klown brand list (ha!) and Spriggan Druids (wood spirits of their quarterstaves!). -------------------------------------------------------------------------------- ae7cc47792 | Edgar A. Bering IV | 2023-04-15 13:05:23 -0700 feat: give Asterion back his spectral weapon You dropped this, king. -------------------------------------------------------------------------------- 3f05228d59 | Edgar A. Bering IV | 2023-04-15 13:05:23 -0700 feat: implement monster spectral weapons The spectral brand's implementation, at this point, is easy to give back to monsters, and in its latest iteration should be an impactful brand for monsters to have, adding positional effects to certain foes. Lightli pointed out the edge case of a dual wielding monster with two spectral weapons. Currently only one spectral weapon remains visible at the end of the round, but both attack correctly. Supporting some monsters having two spectral weapons is a significant code cost for such a small edge case. -------------------------------------------------------------------------------- 70414cbcbb | Kate | 2023-04-14 21:01:16 +0100 Tweak Makhleb destruction zap handling Use dummy spells for the beams when using Makhleb's destruction abilities. This fixes them triggering Majin-Bo vampirisism if a player-castable spell is rolled. It also gives them a fixed noise level (3 for Minor Destruction, and 7 for Major Destruction) instead of noise depending on the zap, which is probably fine. -------------------------------------------------------------------------------- 9528432f70 | Kate | 2023-04-14 21:01:16 +0100 Clear beam noise after firing a tracer Fixes Makhleb's destruction abilities having their loudness calculated as if the player were firing the level 7 spell Debugging Ray. -------------------------------------------------------------------------------- 2aef359875 | Kate | 2023-04-14 21:01:16 +0100 Fix some damage spells not working with Majin-Bo (#3083) Fixes Arcjolt, LRD explosions, Ignite Poison, and the direct damage portion of OTR not being able to trigger Majin-Bo vampirism. Closes #3083. -------------------------------------------------------------------------------- 8898057555 | Nicholas Feinberg | 2023-04-14 11:52:29 -0700 Special-case Armataur skill titles (Ge0ff) Trivia: this affects only two titles at present, both quite rare. But some things are important (????) -------------------------------------------------------------------------------- 395767de6d | Nicholas Feinberg | 2023-04-14 11:52:29 -0700 Cut monks' starting stealth (Ge0ff) Since they start with an orb of light now, so the stealth doesn't do much. This could be thought of as belated comp for the orb of light buff. -------------------------------------------------------------------------------- 6b489f61ca | Nicholas Feinberg | 2023-04-14 11:52:29 -0700 Let Xom feed the player !attract (Lici) That's a 'good' potion effect, right? -------------------------------------------------------------------------------- afbe198592 | nicolae-carpathia | 2023-04-14 14:43:09 -0400 Add some new shops to shops.des (#3080) * Add some new shops to shops.des nicolae, making shop vaults? How surprising! Most of these are simple generic shop vaults, intended to help increase the amount of simple, non-gimmicky shops to increase variety a little. Also increase the weight on the very basic "shop" vault, so that simple one-tile shops get a little more representation. There are also a couple of multi-shop vaults. I told myself I was just going to stick to simple, non-themed vaults, with no specially-defined inventories, but during a discussion where memes of antiquity came up, I was inspired. (And then after I broke the "only simple vaults" rule, I was inspired again, this time by one of my other shops.) -------------------------------------------------------------------------------- cd70e7a56d | Nicholas Feinberg | 2023-04-13 17:40:30 -0700 Fix: allow generating multiple zigfigs Also quad damage, etc. Oops! -------------------------------------------------------------------------------- 5db6f66fbb | Nicholas Feinberg | 2023-04-12 22:12:14 -0700 Make elemental evokers unique Only generate at most one of any given evoker type in any game, since duplicates are useless and feel bad. (They're replaced with random wands.) This probably breaks some themed vaults a bit. Sorry. This code is a little scary and I hope it works. -------------------------------------------------------------------------------- 1ebda0b27c | Nicholas Feinberg | 2023-04-12 21:48:41 -0700 Fix the build? -------------------------------------------------------------------------------- 3b6d188ad2 | Nicholas Feinberg | 2023-04-12 21:23:06 -0700 Fix misc item sets (acrobat) This wasn't actually implemented in 884ff3d523091af0892. -------------------------------------------------------------------------------- 26e8ee2fb7 | Nicholas Feinberg | 2023-04-12 19:47:28 -0700 New loading screen (benadryl) -------------------------------------------------------------------------------- d49b78fada | Kate | 2023-04-12 22:53:53 +0100 Fix a pain bond + constriction crash If a summoned monster was pain bonded to its summoner and caused the summoner to die by taking constriction damage, it would cause a crash. -------------------------------------------------------------------------------- 6f554f940f | Nicholas Feinberg | 2023-04-12 14:41:37 -0700 Fix: bring rampage out of the dark (nlavsky) -------------------------------------------------------------------------------- 85a4f8702b | Nicholas Feinberg | 2023-04-12 14:19:57 -0700 Fix: make northwest tentacles stop rampaging (nlavsky) Re-used enum, oops. -------------------------------------------------------------------------------- 1dbc053f64 | Nikolai Lavsky | 2023-04-12 14:57:59 +0300 fix: clean up obsolete force_mores and message colouring Several default force_mores and colouring rules can be removed: * throwing weapons no longer fail to return (ba011c803) * armour and shields don't have to-hit penalties (4f6bc678f) * nimble evasion is gone (b865740ec) * three Nemelex-related messages have ceased to be as well (7ca12cd97) * storm clouds generate less message spam now (daa8bd6ff) -------------------------------------------------------------------------------- 63dfefce0d | Nicholas Feinberg | 2023-04-11 22:21:04 -0700 Fix: make confusing touch work with launchers (sfogarty) Don't autoshoot if confusing touch is on. This is silly! -------------------------------------------------------------------------------- f68c81a09d | Implojin | 2023-04-12 00:08:43 -0500 Merge pull request #3044 from Implojin/victory-meld fix: a few victory bugs -------------------------------------------------------------------------------- 39c850d269 | Implojin | 2023-04-11 23:33:07 -0500 fix: unrand Victory stat reset bugs This commit fixes several cases where Victory was improperly resetting its stats. Sometimes they were being reset incorrectly (e.g. if the player was involuntarily hit with /polymorph, or cancelled a scroll read at a prompt), sometimes they were failing to reset (e.g. if the player drank a potion while in treeform or spiderform). Most of these bugs were related to improper meld handling; this commit has fixed all such cases that I'm aware of. Any conduct-violating use of potions or scrolls while melded should now cause Victory to reset its stats as soon as your body armour is no longer melded. (RIP Victory meld techs, we hardly knew ye.) -------------------------------------------------------------------------------- 27bf465a7b | Nicholas Feinberg | 2023-04-11 20:22:50 -0700 Ban demon weapons of holy wrath (#2913, acrobat) This reverts commit 0ee6a06047e57c82ddb8123da0993e77481f9919. Resolves #2913. -------------------------------------------------------------------------------- 0e3bda2066 | Nicholas Feinberg | 2023-04-11 18:36:58 -0700 Experimental: give monks an orb of light There are two thoughts behind this change: 1. A background that starts with an orb of light might feel feel interestingly different, insofar as high-EV and invisible enemies become substantially less threatening with light held. 2. Monks are a bit weak (as backgrounds go), and light feels sufficiently 'divine' to fit with their theme. I'm a bit worried that light has too much staying power for a starting item - starting items should generally be replaced or obsolete at some point, but I can easily see some characters keeping an orb of light all game. That reduces variety when playing these backgrounds. But this is cheap and easy to revert, so let's try it! -------------------------------------------------------------------------------- 7dd7712201 | Nikolai Lavsky | 2023-04-12 03:39:23 +0300 fix: a default force_more, again (advil) Properly escape a comma in a force_more message. Also, fix highlighting for a Formicid-specific warning. -------------------------------------------------------------------------------- f4b2b2f793 | Nicholas Feinberg | 2023-04-11 15:15:15 -0700 Fix: mark a method static (Aliscans) -------------------------------------------------------------------------------- 7dea3e163d | Nikolai Lavsky | 2023-04-11 23:48:54 +0300 fix: don't stop for every "deal" As a side effect of dd4664df, each message containing a "deal" triggers a force more. This includes a couple of Donald lines and Finesse's activation message. -------------------------------------------------------------------------------- 0ee6a06047 | Nicholas Feinberg | 2023-04-11 13:44:15 -0700 Fix: no demon whip angels (#2913, acrobat) 'any weapon ego:holy_wrath' is a bit too spicy. -------------------------------------------------------------------------------- 17dd5e2ed6 | Nicholas Feinberg | 2023-04-11 13:39:46 -0700 Fix: randart holy weapon brands (#2913, acrobat) No more heavy eudemon blades! -------------------------------------------------------------------------------- e24dbf0a4b | Nicholas Feinberg | 2023-04-11 13:27:27 -0700 Disable wretched torpor (Sergey) Feels rude for Kiku's Unearth Wretches to slow you by bringing out a torpor snail. Turn off their slow aura while they die. -------------------------------------------------------------------------------- aad5e1864e | Nicholas Feinberg | 2023-04-11 13:22:54 -0700 Tweak reflection wording Try to make it clearer that reflection happens after a block - that is, that reflection doesn't give an extra chance to block. -------------------------------------------------------------------------------- 221ef3b968 | Nicholas Feinberg | 2023-04-11 10:06:51 -0700 Revert "Revert "Add indicator for rampage"" Bring back rampage, but this time cache it at the start of the player's turn. This reverts commit 42e074c17a0a78aebd7c1a0ff5bb393d75035f2b. -------------------------------------------------------------------------------- bd8d5ba0ad | Nicholas Feinberg | 2023-04-10 22:09:36 -0700 Fix: no out-of-range ripostes on block (#3066) Don't riposte when blocking an attack from an enemy who is out of reach of your weapon. Closes #3066. -------------------------------------------------------------------------------- c344ba3439 | Nicholas Feinberg | 2023-04-10 21:32:34 -0700 Fix: make stasis block Vhi's I'm sorry, FoWr ;_; Breaks my heart to do this, but the logic is inescapable. -------------------------------------------------------------------------------- dd4664df13 | Nicholas Feinberg | 2023-04-10 16:10:18 -0700 Clarify Nemelex too many cards messages This confused people. -------------------------------------------------------------------------------- 2766ea1e55 | Kate | 2023-04-09 21:46:30 +0100 Fix new unrand names in vaults -------------------------------------------------------------------------------- 6a089771f7 | Kate | 2023-04-09 19:28:18 +0100 Shorten a welcome message The max length for welcome messages is 79 characters rather than 80, since the message area has a leading space. -------------------------------------------------------------------------------- 46ad940590 | Kate | 2023-04-09 19:28:18 +0100 Adjust spacing for unrand DBRAND/DESCRIP entries Fix many unrand descriptions to have consistent spacing in their descriptions (adjusting wording in a few cases). A small number of unrands still have long inscription entries that result in inconsistent spacing in their descriptions (Throatcutter, Frostbite, skin of Zhor, robe of Vines, Kryia's mail coat, Lochaber axe). Not the end of the world, but it would be nice to be consistent here and shorten their inscriptions. The Singing Sword, autumn katana, dragonskin cloak and sceptre of Asmodeus also have too-long inscription entries but since they only have one line it doesn't end up being noticeable. -------------------------------------------------------------------------------- 6cb29be199 | Kate | 2023-04-09 19:28:18 +0100 Rework the sceptre of Asmodeus As with the sceptre of Torment, make its base weapon type an eveningstar so that it's a bit more usable as a melee weapon. Instead of a brand, give it an extra-high enchantment, and reduce Asmodeus's base damage to compensate for the better weapon. In addition, turn its activated ability into a passive one of summoning fiery demons on hit. It would be nice to come up with a more substantial rework as it probably still remains the least exciting of the Hell/Pan lord unrands, but making it usable in melee is hopefully a start! -------------------------------------------------------------------------------- 8a7cdbe7ec | Kate | 2023-04-09 19:28:18 +0100 Give the Majin-Bo a custom base type As with the other staff unrands, adjust it to be more appropriate for its slot, making it more useful as a melee weapon by giving it a custom base type. It keeps its one-handedness and ends up with 11 base damage, +1 base accuracy, and 1.2 base delay (the same damage as a demon whip but with 0.1 higher base and min delay). -------------------------------------------------------------------------------- 46c7c7d458 | Kate | 2023-04-09 19:28:18 +0100 Reduce the Elemental Staff's resistances Reduce the excessive amount of resistances and AC it provides to push the emphasis slightly more towards it being a melee weapon for hitting things with. -------------------------------------------------------------------------------- def3eea6ad | Kate | 2023-04-09 19:28:18 +0100 Convert the staves of Wucad Mu and Battle to orbs They existed as unrand staves with powerful passive effects but no meaningful use as actual melee weapons (the staff of Battle triggering battlesphere shots on hit doesn't really help enough to qualify it). As with the staff of Dispater, turn them into orbs instead where they are no longer freely swappable but can have a strong passive effect in exchange for giving up the shield slot. -------------------------------------------------------------------------------- 60ff8d5f49 | Nicholas Feinberg | 2023-04-08 21:25:57 -0700 De-brand cerulean imp spears (Ge0ff) Don't encourage scumming for the legendary 'distortion imp'... -------------------------------------------------------------------------------- acf32f4bd3 | advil | 2023-04-08 10:51:59 -0400 fix: add a slow IO check Also, this includes some commented debug code -- the reason for this is that I am trying to avoid (yet) having async syntax in any code until I am sure of all webtiles server versions; so these comments are a placeholder until these calls can be added. -------------------------------------------------------------------------------- 5ad7410663 | advil | 2023-04-08 10:42:21 -0400 fix: remove some broken metaprogramming code This was a nice idea, but it turns out this just sets the qualname of the superclass `_execute` function 6 times. -------------------------------------------------------------------------------- df59a09ada | advil | 2023-04-08 10:27:17 -0400 fix: throttle some webtiles error spam When the server gets into a bad state and the socket buffers start to get filled up, on recovery it often emits a very large number of logged warnings in `on_message` (usually just many "Socket buffer full" messages). This itself can be pretty IO intensive. This commit suppresses all but the first one in a sequence of errors. Also, hide a common harmless warning that can happen on a disconnect. -------------------------------------------------------------------------------- 28734493ed | advil | 2023-04-08 09:59:13 -0400 docs: clarify `reduce_animations` docs -------------------------------------------------------------------------------- 4880f5d053 | advil | 2023-04-08 09:45:11 -0400 fix: add some explicit tornado.gen imports These aren't needed locally on current tornado, but maybe they'll fix CI errors... -------------------------------------------------------------------------------- de56bdc4b3 | advil | 2023-04-08 09:43:11 -0400 fix: missing yield -------------------------------------------------------------------------------- 90bcbe0892 | advil | 2023-04-08 09:09:38 -0400 feat: use aiofiles for webtile status file writing if available This is somewhat experimental. Basically this package does threaded file IO so as not to block the event loop, which is our current biggest source of blocking on (non-CAO) servers; currently used only for one specific case (status file writing). If this works ok I would probably expand it to be used for ttyrec writing (more technically involved than this) and milestone tailing. -------------------------------------------------------------------------------- 38d5fb2972 | advil | 2023-04-07 10:27:02 -0400 feat: add a restful endpoint for server version I think this should be fine to expose publicly (it was previously visible in the admin panel). This information is tremendously useful to the subset of the dev team that deals with server issues, but previously it's been hard to get. Note that the crawl version string printed here is *not* a game version per se: it's the version string for what the webtiles server is running. It would probably be nice to eventually provide a similar endpoint to get available game versions (which should be doable via the load_games data) but that's not what this does. -------------------------------------------------------------------------------- d2d399bf01 | robertxgray | 2023-04-07 09:52:30 +0200 Android: Fix crash logs when the activity is paused The game is saved whenever the Android activity is paused to avoid loss of progress. However, it is not safe to use the save function without a current game. We are also returning to the launcher on exit because it feels more natural on this platform. -------------------------------------------------------------------------------- b3d0e9abb2 | robertxgray | 2023-04-07 09:52:30 +0200 Android transparent keyboard: reduce contrast The transparent keyboard looks less intrusive with gray borders. -------------------------------------------------------------------------------- 6a87d810ed | robertxgray | 2023-04-07 09:52:30 +0200 Configurable Android version code ANDROID build variable is no longer a simple boolean, now it can be used to set the Android version code in the Gradle scripts. -------------------------------------------------------------------------------- c47655710c | robertxgray | 2023-04-07 09:52:30 +0200 Configure Android port to target SDK level 33 This is required by Google Play starting in August 2023. https://developer.android.com/google/play/requirements/target-sdk -------------------------------------------------------------------------------- 911dee593f | robertxgray | 2023-04-07 09:52:30 +0200 Review the font sizes for Android Text size is probably the biggest issue in the Android port. I made test again and sadly the crt font cannot be increased without breaking the menus. However, there's a tiny room for improvements: - Increase the font size in the message area. - Remove the custom settings for 960px screens, use 480x2 instead. - Minor adjustements in the launcher. -------------------------------------------------------------------------------- b985b96186 | robertxgray | 2023-04-07 09:52:30 +0200 Configurable keyboard size for Android Adds a keyboard size option to the launcher with the value translated to dp. It only affects the height because we are already using all the width available. -------------------------------------------------------------------------------- e65b671529 | robertxgray | 2023-04-07 09:52:30 +0200 Extra keyboard for Android There's a new option to enable a small, transparent keyboard that can be placed on any corner. It includes only directional keys but more can be added in the future by popular demand. -------------------------------------------------------------------------------- 3d8fdb39a3 | robertxgray | 2023-04-07 09:52:30 +0200 Minor Android fixes - Fix crash when the morgue is empty. - Incluide a missing drawable in the repository. -------------------------------------------------------------------------------- ebc706044b | robertxgray | 2023-04-07 09:52:30 +0200 Multiple keyboard options for Android We can use the launcher to chose among 4 different keyboard options. - Classic keyboard. Same as before. - Transparent keyboard. Classic keyboard with transparent background covering the game screen. - Android keyboard. Whatever keyboard the user has configured on the device by default. - No keyboard. You can disable the virtual keyboard if a hardware keyboard is available. -------------------------------------------------------------------------------- 7cd38bc08a | robertxgray | 2023-04-07 09:52:30 +0200 Use slide animations for Android activity transitions -------------------------------------------------------------------------------- 3a57277134 | robertxgray | 2023-04-07 09:52:30 +0200 The morgue viewer for Android can download files Files are copied to a destination chosen by the user using the Storage Access Framework. Because the user is involved in selecting the files, this mechanism doesn't require any system permissions. This feature is not compatible and therefore disabled on devices older than Android 4.4. -------------------------------------------------------------------------------- 7472ba6d35 | robertxgray | 2023-04-07 09:52:30 +0200 Morgue viewer for Android The morgue viewer shows the list of files in the morgue directory. The files can be sorted by name or date. Clicking on a file opens the file viewer. -------------------------------------------------------------------------------- 7fbccd47fd | robertxgray | 2023-04-07 09:52:30 +0200 Init file editor for Android It features a simple text editor and a viewer that can load both files and assets. The viewer is used to display the Options Guide. -------------------------------------------------------------------------------- 71c1ce726e | robertxgray | 2023-04-07 09:52:30 +0200 Better support for Android API<21 - Load the native libraries in reverse dependency order. - Use the AppCompat library to fix the button colours. - Replace the symbol for the backspace key. -------------------------------------------------------------------------------- 50b06d295b | robertxgray | 2023-04-07 09:52:30 +0200 Create a launcher activity for Android Base launcher that only starts the game. More features will be added in the future. -------------------------------------------------------------------------------- f9f9d0231b | robertxgray | 2023-04-07 09:52:30 +0200 Use common image resources in the Android project The Makefile copies the needed resources to: - android-project/app/src/main/res/drawable -------------------------------------------------------------------------------- 25214051b3 | Nicholas Feinberg | 2023-04-06 21:58:03 -0700 Rework Call Imp Call Imp is one of the least popular starting spells in Crawl (a position for which there is some stiff competition!). There are two major reasons for this: 1. The variance in quality between different imps encourage repeatedly re-casting the spell before fights to get the 'best' imp. This is not a lot of fun. 2. Crimson imps are very frustrating to work with. Their tendency to blink around, while delightfully impish, means that they waste a ton of time. This is not the most enjoyable balance mechanism. Also, it doesn't meaningfully scale with spellpower. Players don't care that much about this, but it's not great. So let's try mixing things up. Call Imp now always summons one type of imp, the brand-new, shiny Cerulean Imp. Cerulean imps come with a little spear, perfect for hanging out behind you or your buds and stabbing gnolls with. The spear starts at -4, and scales up to +1 at max power. Also, max power is now 50 (was 100), matching other L2s. This might be wildly overpowered! Let's see how it goes. -------------------------------------------------------------------------------- e495a94dc4 | Nicholas Feinberg | 2023-04-06 21:57:43 -0700 New monster: cerulean imp As crimson imps are to fire, white imps are to ice, and iron imps are to earth, so are cerulean imps to the air. They move fast, carry spears, and are not currently used anywhere. More to come. -------------------------------------------------------------------------------- fb0d676c02 | Nicholas Feinberg | 2023-04-05 21:55:11 -0700 Fix friendly fire Broken in abb061897f7b570d6fe8f0abf22fc0f8a34d7bbc. -------------------------------------------------------------------------------- ecba963dcd | Nicholas Feinberg | 2023-04-05 15:31:55 -0700 Randart dragon scale tiles (Sastreii) -------------------------------------------------------------------------------- 3371b13838 | Nicholas Feinberg | 2023-04-05 13:38:58 -0700 Show AFF_YES for plasma beams with certain targets -------------------------------------------------------------------------------- de262b677f | Nicholas Feinberg | 2023-04-05 13:38:58 -0700 Fix plasma beam targeter display Should show the full line that beams can travel to hit targets. -------------------------------------------------------------------------------- 6f0cfe7724 | Medrano83 | 2023-04-05 16:51:25 +0200 Merge pull request #3067 from robertxgray/hotfix/debian_fonts Three fixes for release CI workflows -------------------------------------------------------------------------------- 30c9307041 | Nicholas Feinberg | 2023-04-04 23:02:22 -0700 Fix corruption FX Broken by 9fa57824fd46 (2012!), which caused terrain retiling to be wiped out on load. Now that nice corruption should stick around even after you come back to the game :) -------------------------------------------------------------------------------- e7fda06224 | Nicholas Feinberg | 2023-04-04 22:37:58 -0700 Add a little corruption around banished creatures Recolor walls & floors. Seems cool! -------------------------------------------------------------------------------- 5d778dfbfc | Nicholas Feinberg | 2023-04-04 22:18:05 -0700 Slightly buff chain mail Encourage use of it a little more. Move EVP to 14 (from 15) and give it a chance at ponderousness. Goal is to encourage early-mid use of chain a little more. -------------------------------------------------------------------------------- 29429fb7b5 | Nicholas Feinberg | 2023-04-04 22:06:38 -0700 Slightly reduce Scorch's power scaling It's juust a trifle strong. Take it from max power 2d10 to 2d9. (0-power scorch is still 2d5.) -------------------------------------------------------------------------------- be57942821 | Nicholas Feinberg | 2023-04-04 22:04:30 -0700 Kindle Blastsparks -> Volatile Blastmotes A few changes: - Move it from Fire/Air/Tloc to Fire/Tloc. Three schools was a tough sell for what the spell offered, it's a bit tricky to make more powerful (since increasing damage sometimes makes it worse), FE already has enough schools to train, and Plasma Beam now covers the Fire/Air 'niche'. - Rename it to Volatile Blastmotes. People dislike kindling. I don't know why. Sparks aren't as relevant now that it's not an Air spell. (Tile colors are a little unfortunate but oh well.) - Shufflle around some books. Remove the book of Maledictions. -------------------------------------------------------------------------------- e6d4a54d57 | Nicholas Feinberg | 2023-04-04 16:48:41 -0700 Remove Summon Demon and Summon Elemental (Ge0ff) From the manual. Cont'd from eb620a33452e (2020) and f6694988d3990 (2014). -------------------------------------------------------------------------------- a41ad49a19 | Nicholas Feinberg | 2023-04-04 12:57:04 -0700 Add orb randart tiles (Sastreii) -------------------------------------------------------------------------------- eadee89a7f | Nicholas Feinberg | 2023-04-04 12:57:04 -0700 Make swamp and fire dragons more distinct (Sastreii) Partially for colorblind friendliness. -------------------------------------------------------------------------------- a5943265da | advil | 2023-04-04 09:48:35 -0400 feat: add a timeout to tileschat /kick This makes this feature a bit more useful. The timeout is not saved across sessions so this is more of a quick solution to some chat issue than anything. -------------------------------------------------------------------------------- bbea71524b | advil | 2023-04-04 09:48:35 -0400 fix: don't log blocklist restores This is sort of useful for seeing who is blocked, but it also fills the logs with annoying usernames, so remove it. Admins can get this info by looking at the db, and blocks themselves are still logged. -------------------------------------------------------------------------------- 46802780a4 | advil | 2023-04-04 09:48:35 -0400 fix: explicitly handle a socket closed case The `write_message` call that this is wrapping is not actually guaranteed to be async, so we need to duplicate the exception handling code for the case where a socket is closed during a write. -------------------------------------------------------------------------------- a14d1daa06 | advil | 2023-04-04 09:48:35 -0400 fix: prevent a (harmless?) exception in webtiles Recent changes make it more typical to send the lobby in an async fashion, but that means (I think) that the `send_lobby_html` can occasionally get sequenced after a close call, if a connection opens and closes immediately for example. This is resulting in a Tornado exception that is not very informative on the `render_string` call. This changes adds an early return for the call that would crash. -------------------------------------------------------------------------------- a6910c8ee8 | Nicholas Feinberg | 2023-04-03 22:34:35 -0700 Make Plasma Beam work with spellforged servitor Seems extremely cool :) This code scares me but I think it works? -------------------------------------------------------------------------------- abb061897f | Nicholas Feinberg | 2023-04-03 22:34:31 -0700 Extract beam::good_to_fire() It's a surprise tool that will help us later. -------------------------------------------------------------------------------- 6562478734 | Nicholas Feinberg | 2023-04-03 22:07:25 -0700 Re-buff Plasma Beam to level 6 (acrobat) Revert the damage nerf to Plasma Beam and move it up to spell level 6. This should hopefully make it long-term useful for more characters and encourage more interesting skilling choices by more strongly encouraging investing in both air and fire to get it castable. This reverts commit 5f1da4a474525568f6a61c8a6c006e096d86d7e4. -------------------------------------------------------------------------------- 7debd8f65e | Nicholas Feinberg | 2023-04-03 22:02:04 -0700 Shuffle Plasma Beam's books around It should really be in both a fire book and an air book, not just two air books. -------------------------------------------------------------------------------- 5d9b765f9c | Nicholas Feinberg | 2023-04-03 21:59:12 -0700 Don't make plasma beam leak invisible mons (acrobat) -------------------------------------------------------------------------------- f34089d22e | Nicholas Feinberg | 2023-04-03 21:54:05 -0700 Reduce ranged weapon noise From 7 to 5. This should make them a bit less noisome early game. -------------------------------------------------------------------------------- 99b7bfc59d | Nicholas Feinberg | 2023-04-03 21:52:31 -0700 Rework out-of-LOS ranged weapon noises Be explicit about which weapon makes which noise, more or less. Don't make people memorize that a whirr is a sling or whatever. Be very silly about triple crossbows. They're a silly weapon. -------------------------------------------------------------------------------- 0d87f670db | Nicholas Feinberg | 2023-04-01 21:30:39 -0700 Buff orbs of energy & Wucad Mu further After discussion and consideration, move the refund chance for orbs of energy from 1/6 to 1/5. (Wucad Mu's chance is double orbs'.) The old numbers were a little too conservative; these numbers might be conservative too, but I'm worried about pushing Wucad Mu too far. -------------------------------------------------------------------------------- 44278198b4 | patrick | 2023-04-01 21:09:27 -0400 Update an artefact shop for the new reality Add magical staves to the Antique Artefacts shop, because they can be artefacts now. -------------------------------------------------------------------------------- 8e3194618a | Implojin | 2023-04-01 19:17:43 -0500 docs: update crawl-dev log urls -------------------------------------------------------------------------------- 7f2e898f52 | Nicholas Feinberg | 2023-03-31 21:51:58 -0700 Update the changelog -------------------------------------------------------------------------------- 0638232e92 | Nicholas Feinberg | 2023-03-31 16:17:51 -0700 Fix: minor issue with ogre tile colors (Sastreii) -------------------------------------------------------------------------------- 4aa63f3706 | patrick | 2023-03-31 19:04:16 -0400 Fix compressed_dpeg_circular_temple again (Sentei) -------------------------------------------------------------------------------- f56873caf1 | Medrano83 | 2023-04-01 00:58:26 +0200 Fix GitHub Actions output parameters An error was introduced when migrating from the obsolete set-output commands in 94e0f26. -------------------------------------------------------------------------------- 28e3bdbff4 | Medrano83 | 2023-04-01 00:13:43 +0200 Fix AppImage builds The GitHub Actions Runner no longer provides FUSE 2 by default. Ref: https://github.com/AppImage/AppImageKit/wiki/FUSE -------------------------------------------------------------------------------- 8c6280c012 | Medrano83 | 2023-04-01 00:13:43 +0200 Fix hardcoded font paths in Debian packages Use fontconfig to find the DejaVuSans ttf resources. This is the same solution used in the Fedora packages. Closes #1344 -------------------------------------------------------------------------------- 7e3032bf44 | Nicholas Feinberg | 2023-03-31 13:14:16 -0700 Log errors with buggy UIs To make debugging easier. -------------------------------------------------------------------------------- 745981c80b | Nicholas Feinberg | 2023-03-31 13:12:34 -0700 Fix Dith webtiles UI You can transform into a swirling mass of shadows.(9 HP, Piety---, Max HP drain) The above description was too long after "Piety" turned into "Piety---", meaning that our regexp for god powers broke, meaning that we got a 'buggy UI of type describe-god' error. 'Fix' this by shortening the way we describe HP drain in ability costs, matching how we refer to Drain elsewhere. This is a bit fragile :) -------------------------------------------------------------------------------- a366339e96 | Nicholas Feinberg | 2023-03-31 12:58:15 -0700 Remove gauntlet shapeshifters (CarefulOdds) Without any sort of time pressure or ability for shapeshifters to come after you, it's too easy to just wait until they change into an easy form before entering their arena. -------------------------------------------------------------------------------- 89a915e538 | Nicholas Feinberg | 2023-03-31 12:29:12 -0700 Welcome Implojin to the devteam! 🎊 -------------------------------------------------------------------------------- adcbbbcd72 | Nicholas Feinberg | 2023-03-31 12:23:58 -0700 Initialize explore mode in webtiles -------------------------------------------------------------------------------- a022fb42d2 | Kate | 2023-03-31 18:49:19 +0100 Fix a targeting check for Plasma Beam (#3057) Let fire-immune monsters be considered valid targets, as long as they're not also electricity-immune. Closes #3057. -------------------------------------------------------------------------------- c60b083988 | Kate | 2023-03-31 18:49:19 +0100 Fix a killer klown message (#3060) Closes #3060. -------------------------------------------------------------------------------- 8c80f4669f | Nicholas Feinberg | 2023-03-31 10:15:45 -0700 Underscore a fix (nicolae) Sigh. -------------------------------------------------------------------------------- 2ae22b6899 | advil | 2023-03-31 09:06:29 -0400 fix: a variable capture bug in block/kick Lambdas only do lexical capture by default, resulting in a hilarious set of bugs in this code that I didn't initially catch. Use default values for these lambdas to capture by value, per: https://docs.python.org/3/faq/programming.html#why-do-lambdas-defined-in-a-loop- with-different-values-all-return-the-same-result -------------------------------------------------------------------------------- 2ab08093c7 | advil | 2023-03-31 08:18:13 -0400 feat: convert webtiles muting to blocking This commit converts the existing mute feature into much more absolute control over webtiles chat for players. A player can now block specific spectators from their games, block anon spectators (`/block [anon]`), and disable spectating altogether (`/block [all]`). It didn't seem necessary to have both features, so I've just reused existing code and db tables and changed the chat commands + behavior. Existing mutelists are converted to blocklists. * chat commands aren't renamed, and so the old ones don't work * the underlying db table isn't renamed, it's a pain to do * admin users can't be blocked * I added a /kick command that doesn't block -------------------------------------------------------------------------------- 497892bb89 | advil | 2023-03-31 08:18:13 -0400 fix: tweak some default status file behavior Possibly this shouldn't write on start/stop at all, but if it's going to, make the call async. Also tweak the default value for how often this is to write (5s is excessive I think). -------------------------------------------------------------------------------- f3ab3527aa | Nicholas Feinberg | 2023-03-30 21:19:11 -0700 Hopefully fix a book name, again Added in 93115170b90, half-fixed in 36a728ae673. -------------------------------------------------------------------------------- faedca33fd | Nicholas Feinberg | 2023-03-30 21:17:20 -0700 Maybe fix a cloud crash And rearrange a var to be initialized closer to where it's used. -------------------------------------------------------------------------------- b7c98f8d04 | Nicholas Feinberg | 2023-03-30 21:08:47 -0700 Show explore mode in the webtiles HUD Matching local tiles & wizmode. -------------------------------------------------------------------------------- b3db690511 | Nicholas Feinberg | 2023-03-30 20:15:34 -0700 Fix Wucad Mu's description The DESCRIP was out of sync with the item description. -------------------------------------------------------------------------------- 45e4c8609a | Nicholas Feinberg | 2023-03-30 20:12:30 -0700 Add a few hoppy new tiles (Sastreii) Prince Ribbit, cane toad and blink frog. -------------------------------------------------------------------------------- 9b59a09336 | Nicholas Feinberg | 2023-03-30 10:17:43 -0700 Fix the mailmap Oops! -------------------------------------------------------------------------------- 38647d8619 | Nicholas Feinberg | 2023-03-30 10:15:56 -0700 Welcome Félix Medrano to the devteam! -------------------------------------------------------------------------------- 42e074c17a | Kyle Rawlins | 2023-03-30 10:56:35 -0400 Revert "Add indicator for rampage" This is apparently crashing This reverts commit f9081046c1c5e1a7278961f3c865d7dbffa71ba7. -------------------------------------------------------------------------------- d452b5e7fa | Zhang Kai | 2023-03-29 22:52:39 -0700 Update ZH translation Resolves #3062. -------------------------------------------------------------------------------- 08c09530be | Nicholas Feinberg | 2023-03-29 22:48:57 -0700 Remove lava orcs (visually) Cut some code that's been obsolete since f1e20021f53d (2017). -------------------------------------------------------------------------------- f9081046c1 | Monkooky | 2023-03-29 22:43:53 -0700 Add indicator for rampage Adds an icon indicating which directions will trigger a rampage. Closes #2911. [Committer's note: some reformatting, fixed bugs, replaced icon, added webtiles support, removed option pending complaints.] -------------------------------------------------------------------------------- b9aa53057d | Nicholas Feinberg | 2023-03-29 16:03:26 -0700 Remove choko piety (CarefulOdds) Show piety cost pips for applicable abilities to despoiler em a bit and make it easier to tell how much stuff really costs. (On average.) -------------------------------------------------------------------------------- 2b4189239c | Nicholas Feinberg | 2023-03-29 16:03:26 -0700 Remove abilflag::piety Unused since the removal of Injury Mirror (b4513a33dfc25, 2021). -------------------------------------------------------------------------------- 3818848631 | Kate | 2023-03-29 22:06:26 +0100 Update new dev checklist -------------------------------------------------------------------------------- 327ade24ea | Nicholas Feinberg | 2023-03-29 13:40:04 -0700 Fix a visual bug with Ignis abandon (Undo) Redraw your AC after you lose Fiery Armour. -------------------------------------------------------------------------------- e39c426379 | Nicholas Feinberg | 2023-03-29 10:01:46 -0700 Channeling tweaks and fixes (acrobat, kate) Make Wucad Mu's -Wiz penalty match orb of energy's (rather than being double it), and fix all miscasts getting refunded regardless of whether channeling is held. -------------------------------------------------------------------------------- cec3b41aec | Nicholas Feinberg | 2023-03-28 22:28:20 -0700 Re-re-rework channeling Continuing from 08fbeb92c1a1, b207118a1a4a, and 17eb6287541f, this once again revamps orbs of energy and the staff of Wucad Mu. They're much simpler now. Both give a chance of refunding spells - 1/6 for orbs of energy, 1/3 for Wucad Mu, 100% for miscasts regardless. However, they apply a -Wiz penalty - orbs of energy give the equivalent penalty to 2.5 levels of wild magic, and Wucad Mu again gives twice that. For simplicity, the interaction with Evocations has been removed. (It's nice for Evocations to be mainly useful for active effects, anyway.) In the case of orbs of energy, this is intended to be a tradeoff vs shields, since both apply a success penalty to your spells. Orbs of energy give more killpower, but of course no defenses. With Wucad Mu, you trade a spell enhancer and spell success for quite a lot of MP. Let's try this out. -------------------------------------------------------------------------------- 03d3dc51d9 | Nicholas Feinberg | 2023-03-28 20:29:39 -0700 Differentiate crossbows and longbows (acrobat, sentei) Continuing from 9b1cab27183d4e, continuing from 2f8d10eca674, decrease arbalest base damage by 1. This makes arbalests (slightly) better* than longbows until Ranged Weapons 6, after which longbows pull away and eventually do ~16% more damage per aut. This should hopefully make longbows feel a bit more exciting and differentiate them more from arbalests. Decrease hand crossbow base damage by 1 to keep it lower than arbalests'. Arbalests still do 25-40% more damage than shortbows (depending on sklevel). *With 0 enchantment, no brand, zero slaying, and against a 0 AC enemy. -------------------------------------------------------------------------------- cf5f444c16 | Nicholas Feinberg | 2023-03-28 13:54:52 -0700 Slick slippers: don't trample off stairs mid-climb Surprised players (ie counterintuitive) and a bit too hard to balance. Should be plenty of exciting downside without that specific interaction. Also reduce EV to +4 (from +5), as a tiny counterbalance. -------------------------------------------------------------------------------- 5f1da4a474 | Nicholas Feinberg | 2023-03-27 22:49:50 -0700 Make Plasma Beam less extreme Reduce damage to 25 (from 20) and reduce damage to 2/3rds of its previous value. It was doing >50% more damage than starburst or iron shot on a double hit, and those are higher level spells - more than double fireball's damage. It's louder and less accurate than those spells, and has worse targeting, but there's a limit to how much that buys you. Let's smooth out the lows and the highs of the spell a bit. -------------------------------------------------------------------------------- 57031e3d82 | Nicholas Feinberg | 2023-03-27 22:18:32 -0700 Show plasma beam's to-hit (acrobat) -------------------------------------------------------------------------------- 1dd620b518 | Nicholas Feinberg | 2023-03-27 22:09:17 -0700 Fix: make fiery plasma unblockable (acrobat) beem.is_beam = true -------------------------------------------------------------------------------- bf40cfac39 | Nicholas Feinberg | 2023-03-27 07:44:02 -0700 Refactor inaccuracy (Monkooky) Closes #2959. -------------------------------------------------------------------------------- 53dc5368d7 | Monkooky | 2023-03-26 19:36:08 +0000 Fix cloud side effects Fixes #3058 -------------------------------------------------------------------------------- 4fa250aae5 | Monkooky | 2023-03-25 22:56:19 -0700 Fix fear. Monsters would previously snap out of fear even when hit, so long as they were below half health and were not cornered. This fixes that. If there are still any monsters that are supposed to retreat until above half health, this breaks them. -------------------------------------------------------------------------------- 076f283afc | Monkooky | 2023-03-25 22:55:06 -0700 Make condenser vane good god approved Good gods currently get upset only when condenser vane rolls Negative Energy clouds. The chance of rolling Negative Energy clouds is somewhere in the vicinity of 1/1000 at 0 evocations, rising dramatically as evo skill increases. This creates an odd incentive to not skill evocations. Squashing negative energy clouds (as opposed to rerolling) was chosen to be the minimum change that resolved the problem. -------------------------------------------------------------------------------- ec5dcfc036 | Nicholas Feinberg | 2023-03-25 22:52:18 -0700 Increase thunderstorm damage When they were first added in 75deb85f6e81443, thunderstorms were intended to be a 'high-tier' cloud type. They currently dodge resists that fire/cold clodus don't and do spiky damage, but that's not enough to make them super exciting. Let's increase their damage from an average of 13.5/dAut to 18.25, a ~33% increase. (Fire/cold clouds do 14 damage/dAut vs monsters.) New max damage per strike for a 1 dAut turn is 50. (Was 37 before this commit and, uh, a slightly mysterious amount before the preceding commit.) -------------------------------------------------------------------------------- 298cdec9ad | Monkooky | 2023-03-25 22:35:22 -0700 Fix and refactor thunderclouds Fixes #3050. Closes #3053. Refactors thunderclouds to minimize their special casing. Adjusts thundercloud damage to on average equal normal cloud damage, but a bit burstier. [Committer's note: tweaked implementation to avoid copies.] -------------------------------------------------------------------------------- af2f02e8c5 | Nicholas Feinberg | 2023-03-25 22:21:31 -0700 Do a proper rim job on randart staff shadows (Sastreii) Fix goofy looking outlines around randart staves' shadows. -------------------------------------------------------------------------------- bd1e3d8e73 | Nicholas Feinberg | 2023-03-25 22:17:17 -0700 Stop branding corpses Obsolete since a69f94b37aa3bb0651baba4ae4920ba3ca99b7cd (2020). -------------------------------------------------------------------------------- 3bd36bede5 | Nicholas Feinberg | 2023-03-25 22:13:39 -0700 Show randart staff brands (Sastreii) Also do some refactoring. -------------------------------------------------------------------------------- fc935e4819 | Nicholas Feinberg | 2023-03-25 22:02:42 -0700 New tiles (Sastreii) Slug zombie (eww!), monstrous menagerie, elemental & olgreb staffs. -------------------------------------------------------------------------------- e5077277c9 | Kyle Rawlins | 2023-03-25 11:14:40 -0400 fix: prevent a race condition in game startup If a signal is received before the execvpe call in a child process while running crawl, the server's finally block could get called, deleting the pidfile. This fix should head that off, though it's not a general fix for races here (so I've also added a bunch of comments). -------------------------------------------------------------------------------- c8157cb160 | Kyle Rawlins | 2023-03-24 17:45:20 -0400 fix: color equipped items in use item menus This was working as intended, in that the default rule explicitly had an inventory tag (so I guess there was a bug before), and therefore shouldn't have had a highlight in use item menus. I don't see any reason to restrict this to just inventory. Also, document the tag for these menus, and tweak a few more things in the menu_colour docs. -------------------------------------------------------------------------------- 10c84c77b0 | Kyle Rawlins | 2023-03-24 17:06:03 -0400 fix: shop colors -------------------------------------------------------------------------------- a0a21ad780 | Kyle Rawlins | 2023-03-23 19:39:52 -0400 fix: an unhandled no-ttyrec case -------------------------------------------------------------------------------- e0d47acfc0 | Kyle Rawlins | 2023-03-23 16:23:15 -0400 fix: a sync issue in webtiles shutdowns I *think* this might be why webtiles isn't reliable shutting down; when a lot of sockets are disconnected around the same time, some time the watcher can (somehow) get removed from the player's _receivers list before this gets called. -------------------------------------------------------------------------------- 4a46532650 | Kyle Rawlins | 2023-03-23 15:50:25 -0400 fix: don't disable ttyrecs in the default config -------------------------------------------------------------------------------- bbd5a6ad7e | Kyle Rawlins | 2023-03-23 15:43:33 -0400 feat: option to disable ttyrecs at the server level Previously you had to do this per-game, and it was a pain. -------------------------------------------------------------------------------- 5e84b56f07 | Nicholas Feinberg | 2023-03-23 12:33:25 -0700 Make Majin-Bo vampirism trigger on Polar Vortex (Monkooky) -------------------------------------------------------------------------------- 2eac9ac288 | Aliscans | 2023-03-23 10:48:49 -0400 FIX: Make the "browse character notes" screen obey menu_colour. The ability to highlight notes in different colours in the "browse character notes" display (constrolled with the menu_colour option) was lost with a02aae867c. This returns it, but with one small change. If a note is too long to display on a single line of the display, the colour is chosen based on the whole note, instead of assessing each line of output separately. -------------------------------------------------------------------------------- d60598b1e9 | Kyle Rawlins | 2023-03-23 10:47:17 -0400 fix: further repair work on `menu_colour` This has always been a weird option, because it is mostly about items, but has also (at some points) worked for things that aren't items, and really share no resemblance to items. This is pretty bug-prone (e.g. see 8abc85282e38), and has also just led to some of these options silently failing over time as people failed to maintain them (see #3056). This commit refactors the option so that the "any" or no-tag rules do not apply to any many, but rather any item menu. "any" is correspondingly renamed to "item" in the docs (though "any" is still usable for back compatibility). I've also fixed pickup and "resists" behavior, improved the documentation, and removed a few of these tags. In particular, spell/ability are broken, have been for a very long time (from just reading the code, I doubt they worked so long ago as 0.3, though I didn't actually test), so I've just removed them from the docs. I'm not opposed to them returning but in modern crawl it'd be a bit tricky, since they would need to not override the hard-coded rules for these menus. "notes" also doesn't work but #3056 will fix that (though to be honest, if this PR didn't exist I'd also just remove that tag). The help menu stuff probably semi-works (I didn't test carefully), though I'm really unsure of the value. I don't know if it would be crazy to make this option item-only, move the `note` one to a different option, and remove `help`. -------------------------------------------------------------------------------- b9d0489357 | Nicholas Feinberg | 2023-03-22 16:29:08 -0700 Make held ego demon weapons purple again Since purple is closer to red (the item tile) than green. -------------------------------------------------------------------------------- 4458efe7bc | Nicholas Feinberg | 2023-03-22 16:21:45 -0700 New plasma, weapon tiles (Sastreii) Plasma Beam and player doll demon ego/randart tiles. -------------------------------------------------------------------------------- 7f6bbad527 | Neil Moore | 2023-03-22 16:26:07 -0400 Remove an obsolete reference to EE stones [skip ci] -------------------------------------------------------------------------------- 01031c21c8 | Kyle Rawlins | 2023-03-22 13:31:01 -0400 fix: remove 2 altars from size 14 compressed_dpeg_circular_temple Not sure if this is the intended 14 altar plan, but it comes from taking the double listing of `C` as a cue, and seems to work. -------------------------------------------------------------------------------- 92c0bcffe8 | Nikolai Lavsky | 2023-03-22 20:18:47 +0300 docs: update `menu_colour` documentation a bit more `(` and `)` were the keys for displaying wielded and secondary weapons back in 0.4. This behaviour was moved to `}` in 0.5 (42d8d07399), then it was assigned to `Ctrl-v` in 0.10 (875129a2f9), and finally it was removed in 0.11 (ff9fb87a6f). The corresponding part in the options guide hasn't been updated since 2009. Also, rip rods. -------------------------------------------------------------------------------- 960216f51a | Kyle Rawlins | 2023-03-22 09:40:28 -0400 docs: update `menu_colour` documentation This was out of date in many ways, referring to various removed items, food, etc., and missing some tags that are actually useful. I've also tried to clarify the scope of this option as per discussion in #2873. (As a side note, it's non-ideal that notes are colored with this option, that should probably get broken out. It also seems like `any` prefixes shouldn't apply across menu types, or alternatively there should be a better prefix for indicating "items only".) I did remove a bunch of the examples from the docs, because they were outdated and somewhat confusingly redundant. It might be good to have more examples in here, but they'd need to be a bit more current and less redundant with the defaults. Maybe someone can pull a few from a community rc? Also fixed a few things in the actual defaults: * runes were missing a color because they are no longer misc items * removed old annotations related to food, this may cause some back-compat errors but that's probably ok at this point. -------------------------------------------------------------------------------- 0ad0bf95bc | Nicholas Feinberg | 2023-03-21 16:57:17 -0700 Add new randart staff tiles (Sastreii) Oooh! -------------------------------------------------------------------------------- 828ccac5a3 | Nicholas Feinberg | 2023-03-21 14:04:43 -0700 Remove an unused return type (Monkooky) -------------------------------------------------------------------------------- b1aff02ba6 | Nicholas Feinberg | 2023-03-21 11:25:36 -0700 Allow randartifying staves (dwetuski) -------------------------------------------------------------------------------- b09b86bb1d | Kate | 2023-03-21 15:13:52 +0000 Fix a test failure (advil) As per the comment, it would be nice if we could automatically check for spells with no monster implementation, since adding new spells to this list is very easily missed! -------------------------------------------------------------------------------- 7493c07aab | Nicholas Feinberg | 2023-03-20 17:49:16 -0700 Describe randart staff properties (master_daffy) -------------------------------------------------------------------------------- 9323dee000 | Nicholas Feinberg | 2023-03-20 11:56:43 -0700 Add some fun orbs to zigsprint Seems like a funny gimmick to go into a zig with an orb of guile or of mayhem. Doubt it's better than just grabbing Gong, but it's nice to give options :) -------------------------------------------------------------------------------- 0ff054e9dc | Kate | 2023-03-19 23:13:21 +0000 Let Battlesphere fire on any destructive spell Including non-conjurations, using the same spell list that Vehumet supports. Refactor to use a spflag for those spells, and list any known spells that would activate the Battlesphere in the spell description. -------------------------------------------------------------------------------- 27667f90d9 | Kate | 2023-03-19 19:55:18 +0000 Display Plasma Beam's targeter by default (acrobat) -------------------------------------------------------------------------------- 98134172ad | Nicholas Feinberg | 2023-03-19 12:38:08 -0700 Fix: Veh should support Plasma Beam -------------------------------------------------------------------------------- 1509c8bc92 | Kate | 2023-03-19 17:41:11 +0000 Adjust Xom mutation handling Remove mutflag::xom, which marked a subset of bad mutations that Xom was particularly likely to apply. Instead of using a special-cased way of choosing mutations for Xom's bad mutation action, just use the standard random mutation codepath but with a slightly higher chance of picking a bad mutation (a 50/50 split of good/bad, instead of 60/40 for normal random mutations). This should work out as giving a similar ratio of mutations but without the special-cased handling of some mutations being extra common. Closes #2614. -------------------------------------------------------------------------------- 79ad299dcf | Kate | 2023-03-19 17:41:11 +0000 Slightly reword Jiyva description (Implojin) Use alternate wording to indicate that anything marked as a "fellow slime" can eat items, not just jellies specifically. Closes #2960. -------------------------------------------------------------------------------- 9934a0ce24 | Nicholas Feinberg | 2023-03-18 18:26:45 -0700 Allow randart staves The itemization game for 'casters' has always been a bit less exciting than for more melee-focused characters. Melee characters have a wide variety of weapons to play with, and can try to enchant up their weapons, rebrand them, or maybe even luck into an exciting artefact. 'Casters' mostly look for an appropriate staff or two, or maybe some 'stat sticks' - but there isn't much upgrade potential. Once you have your staff, you're set. Tweak this a bit by allowing randart staves to generate. This should hopefully be exciting for players (wow, check out this super shiny item!) and might also lead to interesting strategic decisions - is this staff good enough to push more more toward a particular spell school, or casting in general? -------------------------------------------------------------------------------- e10d75a369 | Nicholas Feinberg | 2023-03-18 14:07:13 -0700 Remove _randart_is_conflicting Wildly redundant with _populate_jewel_intrinsic_artps(). -------------------------------------------------------------------------------- 314a488677 | Kate | 2023-03-18 19:24:52 +0000 Don't let Plasma Beam target allies or conjured monsters -------------------------------------------------------------------------------- 9550c5b0f0 | Kate | 2023-03-18 19:13:22 +0000 Show full beam paths in Plasma Beam's targeter Rather than just individual targets, so that it's a little clearer how it aims. -------------------------------------------------------------------------------- 950d97f59e | Kate | 2023-03-18 18:59:27 +0000 Don't let Plasma Beam target enemies through fog (gammafunk) -------------------------------------------------------------------------------- 5a111fc481 | hellmonk | 2023-03-18 11:39:51 -0700 feat: new spell, Plasma Beam Proposed lightning bolt replacement. It fires two beams at the most distant enemy within range, one elec and one fire. Properties are otherwise similar to lightning bolt. Goal is to trade the boltbounce minigame for a different kind of positional targeting. This needs some kind of handling for invis enemies but I can't decide how to do it. Closes #2902. -------------------------------------------------------------------------------- c239213254 | Kate | 2023-03-18 18:34:06 +0000 Reduce Ashenzari skill boost (again (again)) After multiple previous reductions it's still extremely strong. Continue gradually bumping it down to be a bit more reasonable. -------------------------------------------------------------------------------- b1c6e1a8ff | Kate | 2023-03-18 18:34:06 +0000 Move Ashenzari's trap detection to 4* Instead of frontloading so many useful passives, move one of the more desirable ones later. -------------------------------------------------------------------------------- 38b0942921 | Kate | 2023-03-18 18:34:06 +0000 Adjust messaging for Transference drain (CarefulOdds) To reflect it being a passive change to the ability. -------------------------------------------------------------------------------- 82bc4aa17e | hellmonk | 2023-03-18 11:26:27 -0700 feat: Sleepcap vault -------------------------------------------------------------------------------- 860c267598 | Nicholas Feinberg | 2023-03-18 11:22:20 -0700 Don't let spectral weapons attack themselves (ragingrage) One of the least impactful commits in Crawl's history. -------------------------------------------------------------------------------- 4ae07df7fc | Nicholas Feinberg | 2023-03-18 11:18:38 -0700 New weaponless Nessos & Sigmund variants (Sastreii) Technically Sigmund should really show an alt weapon in his left hand, but it'd take work, and it's kind of hard to get him to use a different weapon. -------------------------------------------------------------------------------- 7006a028af | Kate | 2023-03-18 15:20:32 +0000 Move an Armataur quaffing message Don't say that you slurp down a potion unless you've definitely actually done so - previously it would be possible for this message to display when cancelling a quaff. -------------------------------------------------------------------------------- 23479c02f2 | Nicholas Feinberg | 2023-03-17 22:09:55 -0700 Don't generate ego troll armour Oops! -------------------------------------------------------------------------------- be4bc1ceb8 | Nicholas Feinberg | 2023-03-17 15:48:18 -0700 Allow entering explore mode in dgamelaunch Don't see any good reason to prevent this. This has been configured since c088e799be5 (2014), when explore mode was first added. -------------------------------------------------------------------------------- 0bd9f85ce6 | Nicholas Feinberg | 2023-03-17 15:46:57 -0700 Add KILLED_BY_EXPLORING Tragically common, really. -------------------------------------------------------------------------------- a2f19c967e | Nicholas Feinberg | 2023-03-17 15:24:11 -0700 Properly ban contradictory scarf/orb randarts (acrobat) No orbs of light with +Inv, orbs of energy with -Cast, etc. Also allow more scarfs with harm, following the same logic as non-rF rings getting to have rF. -------------------------------------------------------------------------------- 585d364ce2 | Nicholas Feinberg | 2023-03-17 15:24:11 -0700 Dataify armour egos And deduplicate scarf/orb gen logic. -------------------------------------------------------------------------------- 417346db89 | Nicholas Feinberg | 2023-03-17 15:24:11 -0700 Force scarves and orbs to generate with egos Even as randarts. -------------------------------------------------------------------------------- d47c823769 | Nicholas Feinberg | 2023-03-17 15:24:11 -0700 Minor armour gen refactoring Flatten logic and tinker slightly. -------------------------------------------------------------------------------- 20749f2c85 | advil | 2023-03-17 17:01:48 -0400 feat: let lua scripts detect hup/ctrl-c This provides a dlua wrapper to crawl_state.seen_hups (which for scripts now reports both SIGHUP and SIGINT) and uses it in the seed explorer to react appropriately. Possibly it would be fine to expose this in clua? More generally, it would be nice if there were a more automated way to interrupt lua scripts on a signal, but I'm not sure what that is in the crawl setup, at least to do in a safe/clean way. Right now a stuck rc script will eventually trigger a SIGABRT in online circumstances if a regular kill fails, which does interrupt (and not particularly cleanly). Locally a stuck script usually requires a manual kill. -------------------------------------------------------------------------------- 08fc0cc78a | advil | 2023-03-17 17:01:48 -0400 fix: more tiles headless adjustments Handle a bunch more ways in which code should only conditionally depend on sdl-related state in headless mode. This is not nearly enough to get the full game running, and I'm not sure that'll be practical, but arena runs, as do some rc tests. (RC test mode is still disabled in this commit though, because it mostly crashes.) * Default -test mode to headless for local tiles also * Get ctrl-c working at the command line -------------------------------------------------------------------------------- b44def57f8 | advil | 2023-03-17 17:01:48 -0400 feat: allow running scripts in all builds The script/test code is pretty entangled, so this change entails linking some (more) debug code. But, I don't think that should be a big deal. I can't guarantee that all scripts work (and maybe some will need to explicitly check for the right build), but this does allow the seed explorer to work for straightforward cases outside of debug builds. -------------------------------------------------------------------------------- 981f4ca651 | advil | 2023-03-17 17:01:48 -0400 feat: don't use fake_pty for -test tests These generally don't need or want ncurses, and are currently running in headless mode anyways, so don't use fake_pty. In contrast, I've decided that the stress tests are better by default *not* run in headless mode, so that they exercise the full ncurses code path (though they now do work in headless mode). -------------------------------------------------------------------------------- 64c6ef89db | advil | 2023-03-17 17:01:48 -0400 feat: let arena and rc scripts run in headless mode The main effect of this is to lead stress tests work in headless mode. This does absolutely no verification of whether rc files are appropriate to run in headless mode, so a script (or just a normal rc file) that is interactive will hang. But, an explicit rc argument most be given, so it's on the user to verify. Arena should be fine, it's never interactive. -------------------------------------------------------------------------------- c9e3db4d4a | advil | 2023-03-17 17:01:48 -0400 Headless UI mode Headless mode is a CLI-triggered mode where crawl suppresses UI elements, either ncurses or sdl. For ncurses, all display operations are essentially replaced with noops (except that cursor position is simulated), and for sdl, an existing proto-implementation of the idea in the form of `crawl_state.tiles_disabled` is expanded and made more robust. (This was originally aimed at mapstat and objstat.) The only build where `-headless` is unavailable in is windows console (though windows tiles is not tested). One part of the point of this change is to do away with the need for fake_pty for things like running scripts from the command line; though to be clear, running certain tests in a way that exercises UI code is still valuable and won't change. * Currently, running rc scripts in headless mode isn't possible. This will be doable for console, but the current sdl headless code isn't robust enough to handle them. * This commit also forces headless mode for -script and -test for builds that can do that. * This lets ctrl-c send a HUP, and will interrupt tests. Still needs more adjustments as HUP has no impact while a long-running lua test or script is going. * This all works on webtiles builds, but webtiles server can't handle headless crawl processes (this may be possible to get working). -------------------------------------------------------------------------------- 5d03d06573 | Aliscans | 2023-03-17 17:27:22 +0000 Have Wall Jump's targeter only highlight monsters it could affect. As things stood, the targeter included every monster next to the landing location, revealing invisible monsters and obscuring the scope of the ability. It now only highlights monsters the action would try to attack. Closes #3008. Closes #3011. -------------------------------------------------------------------------------- 8574249b47 | Kate | 2023-03-17 17:27:22 +0000 Mark soul-bound monsters as immune to Simulacrum (#3038) Monster simulacrum takes priority over the player's, so make that clearer in the interface and don't let the player waste turns trying to target monsters that have already been soul-bound. Closes #3038. -------------------------------------------------------------------------------- c518acad8c | Kate | 2023-03-17 17:27:22 +0000 Remove unused code (Monkooky) -------------------------------------------------------------------------------- 333cc4477c | advil | 2023-03-17 10:56:59 -0400 fix: maybe make some menu code more robust This code can apparently crash, which isn't surprising given how insane the type handling is. However, I can't immediately see what is crashing. Probably this could use a bigger rewrite, but this commit tries to amp up the explicit type checking a bit so that if it crashes, it'll at least be more apparent why. -------------------------------------------------------------------------------- 5ad918d77d | Nicholas Feinberg | 2023-03-14 15:35:20 -0700 Don't allow double Harm/Resistance (lici) Oversight with scarf randarts, and a pre-existing issue with shield randarts. (You could get a weird shield with "rF+ rC+, rF+".) Would be nice to allow both of these stacking. Maybe sometime when someone wants to put in the work. -------------------------------------------------------------------------------- f0aa4a8bf9 | Nicholas Feinberg | 2023-03-14 13:33:54 -0700 Allow orb and scarf randarts It's cool and exciting to get randarts, and also provides extra incentives for players to use orb/scarf egos that they might normally not bother with. These will be quite rare indeed, which makes them all the more exciting! Reverts 614d7e5ffcadf8711dbdcfdefc0ba100785c5137 and implements the functionality it describes of 'guaranteeing a scarf ego'. -------------------------------------------------------------------------------- 1ff12e1e11 | advil | 2023-03-13 21:41:49 -0400 fix: show email in password reset CLI (gammafunk) Broken in dc488dc59d06da635 -------------------------------------------------------------------------------- c85679547a | Nicholas Feinberg | 2023-03-13 17:31:58 -0700 Give the Thermic Engine a dbrand (ragingrage) Tag the +ench on hit effect as Rev. -------------------------------------------------------------------------------- a8ba668304 | Nicholas Feinberg | 2023-03-11 16:38:42 -0800 Maybe fix heavy weapon delay? (acrobat) I need to take another look at this later. -------------------------------------------------------------------------------- c727b3d3d6 | Nicholas Feinberg | 2023-03-11 13:47:39 -0800 New Hood of the Assassin tiles (Sastreii) See also 358383bc755250ed4b6016580a4e583e6013edf8 and a7e42e2d2c60e0160f4cd9fd1aec4b594fd5dc50. -------------------------------------------------------------------------------- ab80c607aa | Nicholas Feinberg | 2023-03-11 13:47:39 -0800 Join the club (Sastreii) New skullcrusher tiles. -------------------------------------------------------------------------------- 0295b78d7d | advil | 2023-03-11 16:21:57 -0500 fix: prompt menu webtiles formatting (dilly) Unfortunately there seems to be a mismatch in how webtiles is handling multiline messages, where it should insert a space before every line that doesn't have a prefix, but isn't. Looking at the webtiles code this seems quite hard to fix, so I've retreated to individually printing the prompt menu lines. (This is how the old `G` menu did this, which is why it didn't have this bug before.) -------------------------------------------------------------------------------- 110b599a53 | Nikolai Lavsky | 2023-03-11 23:34:35 +0300 text: mention rFlCloud in Ignite Blood's description -------------------------------------------------------------------------------- 5f9855fb91 | robertxgray | 2023-03-11 14:41:02 -0500 Fix ccache caching The new ccache action adds a prefix and a timestamp suffix to the cache key by default. We are also adding another prefix and suffix in the workflow configuration. This doesn't work as expected in most cases so this commit removes the extra pre/suffixes from the configuration. -------------------------------------------------------------------------------- ff62baca66 | Nicholas Feinberg | 2023-03-11 07:46:25 -0800 Tweak AF_SLEEP messaging Don't spam about sleep spores unless the victim is actually put to sleep, or at least an attempt is made. -------------------------------------------------------------------------------- ba1e808681 | Nicholas Feinberg | 2023-03-11 07:46:25 -0800 Ease skyshark numbers down a bit Finding a middle ground between 0b89b74ca80c5 and 6ffb7e90e5a. turning a big dial taht says "skysharks" on it and constantly looking back at the audience for approval like a contestant on the price is right -------------------------------------------------------------------------------- 7c8b1a6b49 | Kate | 2023-03-11 15:26:06 +0000 Teach art-data.pl about orbs Should fix errors with the orb of Dispater's doll tile not being found. -------------------------------------------------------------------------------- c5d4c5acee | Kate | 2023-03-10 21:19:32 +0000 Update Meteoran vision range on getting the orb (#3041) Closes #3041. -------------------------------------------------------------------------------- 94e0f26ad8 | robertxgray | 2023-03-10 15:49:54 -0500 Fix Github Actions deprecation warnings * The current ccache action cannot be updated, it has been replaced with the most starred one. This obsoletes the cache action and the manual ccache stats management. * Update the checkout action to v3. * Update the setup-python action to v4. * Update the codecov action to v3. * Replace the obsolete set-outputs commands with the new GITHUB_OUTPUT environment file. -------------------------------------------------------------------------------- 2ed206a1a6 | robertxgray | 2023-03-10 15:49:54 -0500 Fix CI builds for Android and more * Update the Android Gradle plugin and use a compatible Gradle version. This improves the build times and fixes the SDK XML related warnings. * Ccache doesn't get hits on Android because the compiler's mtime is different in every build. Change the compiler check strategy to content. * The ccache configuration file created by the setup Github Action is ignored by current versions. This affects every build. New steps have been added to move the configuration files. * Proper fix for 093205a. I'm very sorry for that. * Fix a typo in the cache config for the AppImage builds. * Use the Maven Central repository instead of the deprecated JCenter. -------------------------------------------------------------------------------- 305f33218d | advil | 2023-03-09 10:23:06 -0500 test: maybe_bool test cases -------------------------------------------------------------------------------- 0c4e4566d2 | advil | 2023-03-09 10:23:06 -0500 build: maybe fix android build -------------------------------------------------------------------------------- 45891bb24c | advil | 2023-03-09 10:23:06 -0500 refactor: convert old maybe_bools to new maybe_bools This removes the old maybe_bool syntax entirely, and updates all uses of it in the codebase. (There are a lot of c-style casts that in principle should be static_casts here.) -------------------------------------------------------------------------------- 8838f259ad | advil | 2023-03-09 10:23:06 -0500 refactor: rewrite maybe_bool This commit rewrites maybe_bool to be, argubly, better. See below for motivation, but here are the practical notes up front: * `maybe_bool` becomes a class rather than an enum. * After this commit, nearly anywhere you would write MB_FALSE or MB_TRUE you would simply write `false` or `true`. * Where you would write MB_MAYBE you now should write `maybe_bool::maybe`. * Comparison to `true` or `false` is safe and will do exact comparison. (The latter may appear surprising, but it is because comparison will cause a bool to be cast to maybe_bool, rather than a maybe_bool to be cast down to bool.) * Semantics change: `maybe_bool::maybe` does not convert to true by default under any circumstance. * In cases where you would have previously written `mb == MB_TRUE` you can just rely on a bool cast (`maybe` does not convert to `true`). In cases where you would write `mb == MB_FALSE` you can write `!mb`. * frombool and tobool are replaced respectively by constructors and the class method maybe_bool::to_bool (as well as an explicit bool cast). * While bool explicit operators have weird rules and can be used implicitly in some cases, there are still times when you'll need to do the cast. In particular, if a function returns a bool, to return a maybe_bool you'll need to explicitly cast. * Mixing bools and maybe_bools in logical expressions generally requires an explicit cast. (If you write a condition that just uses !, that doesn't need one.) Old `maybe_bool` had the advantage of simplicity: it was just an enum and as long as these enum values are used consistently, it is pretty simple to use and as efficient as any integer-based type, with effectively no implementation code. However, there are a few complaints about it. First, the naming scheme was quite ad hoc across the enum values and various functions that used them. Second, and more importantly in my mind, the enum-based implementation led in a very non-clean way to implicit int and bool casts, and a very ad hoc semantics for this type, especially in its interaction with boolean expressions. Taken as a three-valued logic, it is very weird. The law of the excluded middle *is* valid (in the sense that `p || !p` is always true), but double negation elimination is *not* valid (i.e. `!!p != p`); the weaker double negation inference `!!!p == !p` does hold conceivably classing it with some paraconsistent logics, though I haven't found an exact analogue (see [1], though this logic doesn't much resemble L8 there, which has the same double negation pattern). At a practical level this ad hoc nature made mixing with bools in both directions weird and somewhat error prone; aside from the above concerns (which essentially result from MB_MAYBE implicitly casting to `true`), `true` would cast to the enum value MB_MAYBE, leading to clunky conversion code in a lot of places, needing to always use MB constants, and error-prone comparison with regular bools. This commit tries to systematize things more cleanly, albeit with a much more complicated implementation. The underlying data type does still amount to a fancy enum (now an enum class), but it's wrapped with a more clearly defined class, largely inspired by boost's logic::tribool. (I considered whether importing one of the various "`optional` but for c++11" packages out there might be a solution, but ultimately rejected this, because these classes tend to have an even weirder, for a bool-based type, set of implicit conversions to bool). A `bool` constructor is provided making it generally safe to use `true` and `false` as e.g. return values, and an explicit cast to bool is provided that has a better default than MB_MAYBE->true. (In some cases, this may be the desired semantics, of course, but this is still doable via `to_bool` or direct checks against false.) The operator semantics is based on the standard "Strong Kleene" three-valued logic operators, which provide a (imo) very sensible set of defaults for a three-valued logic. Note that because of the existence of the bool operator, this won't let you mix `maybe_bool`s in logical expressions together with bools without some explicit casting one way or the other. The implementation is nearly (but not quite) purely header-based. As part of this commit, I have implemented everything as a back-compatibility layer and purely just tried to clarify the semantics of various instances of maybe_bool in cases where it did get an implicit conversion. The bulk of this is around `can_wear_item` which does tend to treat its maybe return as truth-y. A future commit will convert MB_TRUE etc into their `maybe_bool::t` etc equivalents. [1] Kamide 2013, A Hierarchy of Weak Double Negations, Studia Logica 101.6 fix -------------------------------------------------------------------------------- f5068b961c | Nikolai Lavsky | 2023-03-09 15:09:12 +0300 fix: show rDrown and rBlind in the monster lookup (?/m) Previously, these resistances were displayed only when inspecting a monster via `xv`. But, for example, `?/mjelly` didn't mention rBlind and rDrown at all. In-game monster descriptions are constructed using a `monster *`. On the other hand, monster lookup produces descriptions using just the type and base type of a monster. The latter constructor initialized the basic resists, but it didn't check for rBlind nor rDrown. There was no way to check drowning resistance using only the type of a monster, so this commit adds a new utility function for that. -------------------------------------------------------------------------------- 1aabd4f9c5 | Nicholas Feinberg | 2023-03-07 18:25:41 -0800 Hide spectral weapon attack descriptions (acrobat) They're misleading now that spectral weapons use the player's stats for attacks, not the monster's. -------------------------------------------------------------------------------- 928e84d663 | Nicholas Feinberg | 2023-03-07 18:20:03 -0800 Fix knockback beams (acrobat) Restore the logic from before b7c8574cbb4cc21e112d13fa3a554c3b815787d8. -------------------------------------------------------------------------------- 512cf1e979 | Nicholas Feinberg | 2023-03-06 14:52:41 -0800 GET MAD! (Sastreii) New tile for the Wrath of Trog. Not the god wrath, the weapon. You know what I mean. -------------------------------------------------------------------------------- f88a04b62d | advil | 2023-03-05 16:27:48 -0500 fix: restore non-debug `show_more` This was apparently broken when I merged the android patch but no one noticed? (Removed in f8cea274af24, I think it was just mistaken for TOUCH_UI-specific code.) -------------------------------------------------------------------------------- 707647da51 | Kate | 2023-03-05 20:05:44 +0000 Improve handling of summoning prompts during AoE spells Spells that summon only flying monsters should now correctly not prompt with Eringya's Noxious Bog active. -------------------------------------------------------------------------------- caf70739d4 | Kate | 2023-03-04 21:51:40 +0000 Add new orb of Dispater tiles (Sastreii) For Dispater themself, as well as item and player doll tiles. Also update the description to match! -------------------------------------------------------------------------------- c246efe4b1 | Kate | 2023-03-04 18:17:49 +0000 Don't let Ru try to redirect butterfly attacks (#2988) Closes #2988. -------------------------------------------------------------------------------- 066f1b0f1d | Kate | 2023-03-04 17:53:19 +0000 Tweak holy_pan to remove teleport closets (#2979) Historically, Pan vaults got away with having teleport closets under the assumption that anyone going there would have plenty of means of flight, digging and/or teleportation, but it's also pretty simple to avoid in this case. Move one of the of the exits to the opposite side of the river, tweak some terrain to open up a pathway along one side of the river, and make a couple of spots (Elyilon's altar island and the pearl dragon cave) no_tele_into. Closes #2979. -------------------------------------------------------------------------------- e1c980b087 | Kate | 2023-03-04 17:07:21 +0000 Remove some iron grates from evilmike_geh (#2980) They seem to exist to allow players to dig out and fly across some areas of the lava, but could result in permaflying players getting trapped by teleporting into the lava area without a way to get through grates. The areas with grates also place stokers, which are theoretically able to summon through the grates but in practice were unlikely to do so successfully - removing the grates and opening up those areas allows the outer lava monsters a way in. Closes #2980. -------------------------------------------------------------------------------- 561648f94d | Kate | 2023-03-04 11:36:19 +0000 Fix gods protecting allies from hostile Irradiate (#3033) Closes #3033. -------------------------------------------------------------------------------- 08b95dd62f | Nicholas Feinberg | 2023-03-03 16:25:16 -0800 Remove ABIL_MAX_EVOKE This was only used in one place, where it wildly overestimated the number of evocable abilities the player might have. Replace it with a hardcoded cludge for now. -------------------------------------------------------------------------------- bd0d260d8e | Nicholas Feinberg | 2023-03-03 11:13:12 -0800 Add a crawling zombie skyshark tile (Sastreii) Only for player usage. -------------------------------------------------------------------------------- 320358a0d7 | Nicholas Feinberg | 2023-03-03 11:13:11 -0800 Allow cleaving insane monsters Match the behavior for trying to swap with neutrals in movement.cc. -------------------------------------------------------------------------------- 744a1ced0f | Nicholas Feinberg | 2023-03-03 10:00:19 -0800 Remove giant fish zombies (Sastreii) New tiles for skyshark and dream sheep zombies. Twisted... -------------------------------------------------------------------------------- 34551f5589 | Nicholas Feinberg | 2023-03-03 07:15:24 -0800 Break AF_BLODOZERK (Beargit) No more sleepy sharks! -------------------------------------------------------------------------------- 17996783a1 | Nicholas Feinberg | 2023-03-02 20:43:16 -0800 Simplify the spectral brand To make it easier to understand how the spectral brand works, rather than using the stats of a strange 'spectral weapon' monster to determine accuracy and damage, use the player's stats instead. (Then reduce pre-AC damage to 70%, matching cleaving.) This should make the brand scale more reasonably over the course of the game (especially in the early game), and make it easier to make future balance adjustments as needed. -------------------------------------------------------------------------------- 5a5fe0d677 | Nicholas Feinberg | 2023-03-02 16:35:48 -0800 New Sleepcap tile (Sastreii) 🍄💤 -------------------------------------------------------------------------------- 7c6808c8ce | Nicholas Feinberg | 2023-03-01 16:29:47 -0800 Fix a copy-paste error (nlavsky) -------------------------------------------------------------------------------- 7470db7bff | Nicholas Feinberg | 2023-03-01 16:15:47 -0800 New monster: sleepcap Playing with sleep mechanics a little more, sleepcaps are an early-D monster (native to D:4-8) with a sleepy twist. If they deal damage, they have a 50% chance to KO folks they hit. This is bad if there are more enemies around (since it lets them approach while you sleep), and also lets the sleepcap get in a second hit at you with the 2.5x sleepstab bonus. (Or another monster with much higher damage might get that hit...!) These replace the rather boring necrophages as normal D spawns, since those are basically more boring wights. Main design goal here is variety. Hopefully players like them! :) -------------------------------------------------------------------------------- 1c18f60749 | Kate | 2023-03-01 21:36:22 +0000 Don't crash when banished by a HD 96 monster It could happen to any of us, at any time... -------------------------------------------------------------------------------- 9d452a9ddb | Kate | 2023-03-01 21:36:22 +0000 Display melded items on the % overview There was already handling for this, but it was skipped and just displayed melded slots as temporarily unavailable (hiding the item). -------------------------------------------------------------------------------- d090ac843f | Kate | 2023-03-01 21:36:22 +0000 Adjust Harm display on the % overview screen As with other properties that are rarer/artefact-only, display Harm only if the player has any levels of it. Display it with two pips so that the fact that Harm has exactly two levels is visible to the player, move it and *Rage to the bottom (as the two properties in the second column that aren't just binary), and shift the equipment column over by a character to make a little more room. There are some ideas for a larger rework of the % screen, but in the meantime this should hopefully be an improvement. -------------------------------------------------------------------------------- a523dec638 | Zhang Kai | 2023-02-28 20:27:25 -0800 Update ability.txt Update this file and make some of the sentences smoother. -------------------------------------------------------------------------------- 38cc7db976 | Zhang Kai | 2023-02-28 20:27:12 -0800 Update monsters.txt Update this file and make some of the sentences smoother by the way. -------------------------------------------------------------------------------- 6f4d8801b8 | Zhang Kai | 2023-02-28 20:27:06 -0800 Update mutations.txt Update this file and make some of the sentences smoother by the way. -------------------------------------------------------------------------------- 6e8ec0b4a4 | Zhang Kai | 2023-02-28 20:27:01 -0800 Update spells.txt Update this file and make some of the sentences smoother by the way. -------------------------------------------------------------------------------- dd12edfdc1 | Zhang Kai | 2023-02-28 20:26:53 -0800 Update unrand.txt Update this file and make some of the sentences smoother by the way. -------------------------------------------------------------------------------- aef21d7d98 | Zhang Kai | 2023-02-28 20:26:40 -0800 Update help.txt Update this file and correct some pronouns by the way. -------------------------------------------------------------------------------- 1789cb11db | Rytis Petronis | 2023-02-28 10:22:10 -0800 Allow harm to stack Harm is a pretty silly and niche effect. Currently, multiple sources of Harm don't stack. It's rare that you'll have multiple usable sources of Harm, but on the occasion that you do, it seems like it'd be fun and distinctive to allow the effect to intensify somewhat. The formula used is as follows: - Damage dealt: 130% at one level of Harm, 145% at two levels. - Damage taken: 120% at one level of Harm, 130% at two levels. This is somewhat conservative. One level of Harm already pushes the game a bit toward 'rocket tag', in which one side or another of a fight dies instantly, and we don't want the effect to totally turn the game into a mess. But it's a straightforward formula, and should still be a noticable effect. For UI reasons, this is displayed as a single pip that goes from '.' to '+' to '!' as you accumulate Harm. The impact of this on the game should be incredibly minor compared to the reams of pixels that have been spilled on the subject, but I hope it brings joy to those it does touch. Closes #2646. -------------------------------------------------------------------------------- 841903a796 | advil | 2023-02-28 09:54:20 -0500 fix: don't let line_down move past the end of a menu I think there's some more general issue with how scrolling to the end is handled here, but this fix will do for now. -------------------------------------------------------------------------------- 80adb622cd | advil | 2023-02-28 09:46:15 -0500 fix: set a hover after pgdn with no hover If no hover was set but arrow selection is enabled (the main case for this is simply the i menu), the previous behavior for a while, which was unintended, was that pgdn worked but without setting a hover. This is not necessarily crazy behavior, but if you used an arrow key after this it moved the hover to 0 and scrolled, which is weird. This commit restores the intended behavior; this bug was just an off by one error where get_first_visible skipped the first subhead. -------------------------------------------------------------------------------- f32006e439 | advil | 2023-02-28 09:02:38 -0500 fix: tweak multicolumn scroll behavior If the hover is in a position where the menu can scroll, but the hover itself can't scroll (typically, it's in the right-hand column with a one-item section directly below as the last section), a down/up arrow would not do anything. This leads to the menu feeling kind of stuck -- it makes intuitive sense that the hover doesn't move, but the menu has further items that just don't get revealed. This commit adds a scrolling behavior for this case even with the hover not moving. In my testing it feels fairly natural, much better than the old behavior, but it's a bit ad hoc, so we'll see. -------------------------------------------------------------------------------- fe289a77b0 | advil | 2023-02-27 21:48:46 -0500 fix: show correct scroll % in multicolumn console menus I still only sort of understand this code, so I couldn't say why we manually track m_height distinct from m_region or why m_region is wrong on console (it seems ok on tiles), but this code needs to use the layout-calculated height to get the correct percentage. -------------------------------------------------------------------------------- b9f269a0db | advil | 2023-02-27 21:48:46 -0500 fix: maybe fix an off by one error This mismatched the tiles code it is based on, and though I can't replicate it, does seem like it might produce a crash. Changing it doesn't seem to break anything. -------------------------------------------------------------------------------- b249c134ee | Nicholas Feinberg | 2023-02-27 15:52:22 -0800 Clarify electricity AC piercing effect Rather than saying it 'partially' bypasses AC, be more explicit and say it ignores half AC. -------------------------------------------------------------------------------- f2dbd7b3e3 | Nicholas Feinberg | 2023-02-27 15:05:13 -0800 Make Hepliaklqana knights ogreishly strong Players have noted for years that knights are noticeably more useful than the other two ancestor types. To encourage more variety in ancestor choice, make knights attack at 150% delay, like ogres. This should preserve their core strength (being really tough!) without also making them as powerful offensively, carving out more of a niche for battlemages and hexers. -------------------------------------------------------------------------------- 76fbd3846b | Nicholas Feinberg | 2023-02-27 14:57:57 -0800 Make mulch excitingly damaging (ebonnov) It feels bad when your boomerangs and javelins and such break. However, we do want to have limited ammo for throwing weapons, to make them a limited consumable. We've talked about making them always 'mulch' (break) when thrown and multiplying out the quantities you're given, but this removes any existing tactical limits on held ammo and also has its own feel-bads. Let's try something different. Whenever a player's boomerang, javelin or large rock breaks, it deals extra damage (+33%). This mechanic is inspired by Breath of the Wild, and might make it feel a bit more exciting and fun when your item breaks, rather than just sad. This is a small buff to throwing overall, and a small nerf to javelins, which can no longer hit multiple creatures if they mulch (for messaging reasons). If folks like this, some things we could do further along these lines: - Add bonus effects to darts when they mulch. - Make players' throwing items only mulch on hit (not on miss), and increase mulch rates accordingly. -------------------------------------------------------------------------------- b1fd0ec52f | Nicholas Feinberg | 2023-02-27 09:46:58 -0800 Fix entire the typo (FizzleBang) Unbelievably, this has been around since kill counts were first added in dcf7801daff (2007). -------------------------------------------------------------------------------- 6c64550be9 | advil | 2023-02-27 07:36:42 -0500 fix: don't crash on cycle_hover under some circumstances This sometimes does or doesn't trigger, and it's a bit hard to figure out why, but it seems to be cycle_hover before there's a layout. -------------------------------------------------------------------------------- eb93a13fce | advil | 2023-02-26 23:54:52 -0500 fix: improve some type assumptions `std::min` needs to be able to deduce the same type for its arguments, and this was failing for this line on platforms where size_t is not an unsigned long (aka windows). Instead, cast the size_t down to int and just use ints. -------------------------------------------------------------------------------- 112adfe841 | advil | 2023-02-26 23:33:34 -0500 fix: unbreak plain console builds -------------------------------------------------------------------------------- 01416c3e00 | advil | 2023-02-26 23:25:20 -0500 fix: prevent a display bug in multicolumn multiline tiles menus The `do_layout` call for UIMenu is very side-effect-y. It's also used in the _get_preferred_size calculation for this class. But (for reasons that I don't fully grasp) the ui code will call _get_preferred_size at all sorts of strange times with quite speculative values. This may itself be some sort of bug, I'm not really sure; but the side effects were leading to rendering bugs. In particular, sometimes _get_preferred_size would be called with the max window width, which leads to rendering inventory items on a single line in a dense multi-column layout, and the line positions for this rendering choice would be cached. If `pack_buffers` gets called before a fresh do_layout call with the correct width happens, the menu spacing changes because of the cached values. For unclear reasons, this often happens on a pagedown, and also in various scrolling circumstances. This commit simply attempts to limit the side effects that matter during _get_preferred_size calls, rather than looking too deeply into the `ui` whys. -------------------------------------------------------------------------------- f0e381c690 | advil | 2023-02-26 23:25:20 -0500 feat: a grid layout mode for menus The two-column mode is really designed as a fallback, prioritizing top-bottom layout with one column unless there's overflow. This commit adds a different multi-column layout that fills left-right as much as possible (up to some limits), which turned out to be very easy to do once two-column mode was generalized. This mode is aimed at PromptMenu, specifically the travel prompt, though it might eventually have more uses. -------------------------------------------------------------------------------- 11f347f362 | advil | 2023-02-26 23:25:20 -0500 feat: a console multicolumn menu implementation This commit generalizes the implementation of MF_USE_TWO_COLUMNS for menus beyond just local tiles; two-column menus on console now work as well. This is kind of a basic implementation in some ways, and e.g. it will still use multiple columns if item names exceed the column width (for local tiles, it will actually wrap such item names). But, it works fairly well, and this is mainly an issue for artefacts whose name can be viewed by looking at the item. Subsidiary changes / notes: * the relevant option is given a more general name (with the old one as an alias) * the relevant option is explicitly applied only to item menus. The main case this affects is large search results in the help lookup menu, which in my testing looked pretty good as multi-column results. * no effect on webtiles -------------------------------------------------------------------------------- ab95473dd1 | advil | 2023-02-26 23:25:20 -0500 fix: improve hover behavior for local tiles multicolumn This was a bit of a mess, I think essentially because I never dealt with this when doing the initial hover implementation. Before this commit, the up/down keys cycled hover (in L-R and the top-bottom order), and the left/right keys did nothing (or changed mode if that was available). This commit implements sensible grid-based behavior for all four directions, with left/right still cycling modes for single-column menus only. (All of these menus have other keys for mode cycling.) -------------------------------------------------------------------------------- 1094a8e747 | advil | 2023-02-26 23:25:20 -0500 refactor: convert the travel prompt to a menu This is a somewhat involved refactor that should mostly have no impact on the use of this menu in regular play. Previously, the travel prompt simply printed a bunch of stuff in the message pane and prompted. In most normal cases this is fine, but it was not robust to overflowing the message pane, resulting in either a more, or lines that were simply not invisible. (The case that reliably hits this is wizmode &~, which is super annoying unless you have the branch hotkeys memorized, which I really, realy don't.) This commit implements a new Menu subclass that can format its menu entries to be shown in a message pane prompt, and run a regular input loop in the message pane. If the menu fits, it does this, otherwise, it uses a menu popup. The travel prompt now uses this feature, which also nicely separates formatting from menu logic. It's quite a bit more code, though. There's only one intended behavior change to this menu, which is to support tab as a "last destination" hotkey -- enter won't work when this menu is a popup. Otherwise, everything should behave pretty much the same as before when this menu is in prompt mode. The wizmode command is still a bit annoying because it doesn't fit every branch on one screen still in 80x24 console, but I have a planned future commit to address this. (In the longer run, a planned use case for this sort of approach is to add options to make some message pane input more mouse/touchpad friendly.) -------------------------------------------------------------------------------- c65c45c1d4 | Nicholas Feinberg | 2023-02-26 16:14:42 -0800 Move the Vaults rune lock inside (hellmonk) Long ago, Vaults got a 'rune lock' - the requirement that players find at least one of the fabled Runes of Zot before entering. This was added so that players would be encouraged to fight at least one of the final challenges of the Lair branches (Snake, Spider etc) at a time when they were still challenging. Before this lock was added, wise players fought those challenges much later, after getting so much XP and loot from Vaults etc that they were trivial. This was a big improvement! But there was one downside - lunatic players who wanted to get the silver or, god forbid, golden rune before getting any other runes (or even entering the Lair, perhaps!) were blocked from achieving their dreams. Tragic! So, this commit lets them do that. You no longer need a rune to enter the Vaults, but you do need a rune to leave. Wise play probably remains unchanged, There is a fairly strongly worded warning for players trying to enter the Vaults without a rune, with a requirement to type 'yes' to enter (ala stepping on a Zot trap, entering wizmode, etc). So I'm hoping this doesn't affect the experience for newer players. If it does, I'll rethink this! -------------------------------------------------------------------------------- b642276a43 | Nicholas Feinberg | 2023-02-26 15:34:32 -0800 Remove logic for the Ziggurat rune lock Obsolete since 99093fa9e1422ab71f3389fe3be6d9d46b52971a (2021). -------------------------------------------------------------------------------- d57b28dfd0 | Nicholas Feinberg | 2023-02-26 13:28:55 -0800 Fix? a "faith bug? (elliptic, acrobat) The game didn't prompt when you switched from an amulet directly to another amulet, because faith prompts only triggered on OPER_REMOVE/OPER_PUTON and we were checking OPER_TAKEOFF, a totally different thing. I don't understand how this code ever worked, but it seems to work now, in this case. Hopefully this doesn't break something else. -------------------------------------------------------------------------------- f0a3970a7c | Nicholas Feinberg | 2023-02-26 13:28:55 -0800 Tweak Labrys scaling (elliptic) To make it more impactful in normal conditions, change it from giving +1 enchant per visible TOUGH enemy and +3 per NASTY enemy to instead giving 3 times that amount, capping at a more reasonable +16 (matching the obsidian axe) rather than +27. Lower the base enchant by 1 so that everything lines up nicely. -------------------------------------------------------------------------------- 95585c18e7 | Kate | 2023-02-26 19:53:25 +0000 Fix a crash when entering some troves as a Felid Instead of trying to acquire weapons in some cases (and crashing), fall back to creating a random item if nothing useful can be found. -------------------------------------------------------------------------------- a136d5a445 | Kate | 2023-02-26 19:50:30 +0000 Convert the staff of Dispater into an orb Of the Hell/Pan lord unrands, the staff of Dispater is one where there's at least a small chance that a character strong enough to acquire it might still be able to make use of it, with evokable damnation being fairly powerful. However, using it means swapping weapons repeatedly to activate the ability. Convert it to an orb instead, and give it *Corrode and some bonus AC for some minor added flavour (such that the AC compensates for when corrosion kicks in, but with some hellish flavour and a downside along the lines of regular orbs). No tile yet! -------------------------------------------------------------------------------- aadfcccb73 | Kate | 2023-02-26 19:39:48 +0000 Let monsters get bonus AC/EV from artefacts Specifically from the AC/EV ARTPs (as opposed to from enchantment), which were previously ignored. They deserve to get to enjoy fun randarts too. -------------------------------------------------------------------------------- 093205a2af | advil | 2023-02-26 11:54:34 -0500 fix: (quick fix) disable a bad android build line This no doubt breaks the android build to remove, but it *really really really* should not be attempting to rm -f -r this directory! (which in a server build context, might be /var/lib/dgamelaunch or something -- luckily CDO has permissions set so this didn't work, hopefully true of any other servers configured like this). I'm not sure what the best fix for someone who is actually working on the android build process might be. -------------------------------------------------------------------------------- 6e0788376e | Kate | 2023-02-24 23:27:54 +0000 Don't let Wanderers start with excluded misc items No condenser vanes and tremorstones in the same game for lucky wanderers. -------------------------------------------------------------------------------- d7a24ef9e4 | Kate | 2023-02-24 22:48:13 +0000 Update Brain Feed description (CarefulOdds) -------------------------------------------------------------------------------- 038c08e353 | Kate | 2023-02-24 22:42:04 +0000 Don't increase charges of tremorstones/condenser vanes XP evokers remain very strong items for every character, and it's not necessary to compensate for losing access to one type. -------------------------------------------------------------------------------- 884ff3d523 | sdynet | 2023-02-24 22:42:04 +0000 Connect item sets: {vane and {Tremorstones Compared to other categories, Misc has many items with similar roles. Therefore, I think it is a suitable target to apply item sets. However, since this is taking one tactical means away from the player, I'm going to increase the number of charge by one(vane) and two(tremor). [Committer's note: adjusted vaults to still place thematically appropriate loot. Closes #2961. -kate] -------------------------------------------------------------------------------- 7bc24448d7 | Kate | 2023-02-24 22:41:59 +0000 Remove an obsolete walljump check (nlavsky) -------------------------------------------------------------------------------- 13d48797d6 | robertxgray | 2023-02-24 08:36:25 -0500 Fix doc files wider than 80 characters This may seem like a non-issue nowadays, but it is if you are playing on a smartphone. -------------------------------------------------------------------------------- b92711bcdf | Nicholas Feinberg | 2023-02-22 12:39:00 -0800 Apply acidic bite's acid damage pre-AC Matching its behavior before 7a729d47d399. It did almost nothing after that commit, since it had to deal post-AC damage to trigger the acid, but only did 1d1 acid base. Possible that this effect shouldn't require dealing post-AC damage at all, but that'd be inconsistent with other auxes. -------------------------------------------------------------------------------- d05cb21e94 | Nicholas Feinberg | 2023-02-22 12:22:30 -0800 Remove unused acid_strength param from splash_with_acid RIP death by slime walls ;_; -------------------------------------------------------------------------------- 7c544603b3 | Nikolai Lavsky | 2023-02-20 16:49:24 +0300 fix: don't allow cursing/uncursing wrong items Although `prompt_invent_item()` supports filtering items, it doesn't check if the selected item is appropriate. Curse Item and Shatter the Chains abilities don't have such checks either, so it was possible to use them on wrong items. The player could apply curses to non-equipped inventory items using Curse Item. Similarly, it was possible to press `*` and select a totally inappropriate item, e.g. a potion, when destroying a curse, which crashed the game. This commit fixes these bugs by ensuring that the item returned by `prompt_invent_item()` is indeed cursable and equipped when using Curse Item, or that it's a worn cursed item when using Shatter the Chains. Note that unlike `item_is_cursable(item)`, `item_is_selected(item, OSEL_CURSABLE)` also checks that the item is equipped. -------------------------------------------------------------------------------- 109b55a442 | gammafunk | 2023-02-19 22:02:39 -0600 feat: Some adjustments to sharkified vaults For beargit_carnivore_pack, use KMONS, so we can specify alternative for uniques that fail to place. Since komodos and skysharks don't have bands, use multiple glyphs to allow placing multiple of these. Place any choice from (on-average) two komodos, 1.5 skysharks, Grum, or Snorg. Also clean up syntax. Add skysharks to minmay_lair_end_frog_pond such that 1 of the on-average 3 tyrant leeches that place on that map will be a skyshark instead. Remove the patrolling tag that was previously placed just on tyrant leeches. The map is pretty big and dense with monsters, so having just having about two monsters stay close to the center won't do much. Closes #2996. -------------------------------------------------------------------------------- e9441fdd6e | kippig | 2023-02-19 22:02:29 -0600 Add some skysharks to Lair vaults Committer's Note: From PR #2996. This commit adds beargit_carnivore_pack, a carnivore-themed vault that places skysharks and other thematic monsters and uniques. I've cleaned up parts of a failed rebase, removing merge lines and fixing some syntax problems. I've withheld the change to minmay_lair_end_frog_pond, since for balance reasons we'll want to mix skysharks into that vault a bit more conservatively. I've kept the author's addition of skysharks to gammafunk_lair_ancient_temple as-is, which is done in the logical way. A subsequent commit will fix up aspects of beargit_carnivore_pack and add skysharks to minmay_lair_end_frog_pond. -------------------------------------------------------------------------------- 632d372b77 | Nikolai Lavsky | 2023-02-20 00:22:38 +0300 fix: allow resting near slime walls Since slime walls no longer damage the player, there's no reason to prevent resting near them. After this change, autotravel and Shift-movement still try to avoid slime walls, though. -------------------------------------------------------------------------------- 6ec518bcff | Nicholas Feinberg | 2023-02-19 11:49:37 -0800 Fix slime wall messaging (Undo) Don't message when you step near a wall if you're immune to slime walls (probably because you worship Jiyva). Also, redraw your AC and weapon when you worship or abandon J, just in case you were next to a wall. -------------------------------------------------------------------------------- 282d41900d | Nicholas Feinberg | 2023-02-19 11:25:21 -0800 Allow reviving felids & shafting players near slime walls No longer instantly lethal. -------------------------------------------------------------------------------- 9b1cab2718 | Nicholas Feinberg | 2023-02-19 11:21:09 -0800 Virtually buff longbows (acrobat) Continuing from 2f8d10eca674, increase longbow base damage by 1 and decrease base delay by 1. This makes a +0 longbow better than a +0 arbalest against a 0 AC enemy from sklvl 14 onward, and better than a 3xbow between sklvls 16-20. That is what we would call a 'niche'. -------------------------------------------------------------------------------- 160f7cfddd | Aliscans | 2023-02-18 23:01:40 -0800 Warn before launching inappropriate martial attacks Previously, the game asked for confirmation before attacking with (e.g.) a weapon inscribed with !a. It also did this before rampaging into a monster, but not for Wu Jian's "martial attacks". It now carries out the same checks before Wu Jian's lunge and whirlwind attacks, and does it before a wall jump if this attacks a monster. Closes #2962. -------------------------------------------------------------------------------- 2f8d10eca6 | Nicholas Feinberg | 2023-02-18 22:51:09 -0800 Remove the special case for longbow mindelay As noted in #2981, it's not very impactful. Let's avoid adding special cases for the sake of special cases. -------------------------------------------------------------------------------- 3287d911ca | Nicholas Feinberg | 2023-02-18 22:43:47 -0800 Fix an unintended SDL2 change -------------------------------------------------------------------------------- 694778e409 | Sergio Thompson | 2023-02-18 22:43:04 -0800 Add a new welcome message [Committer's note: cut three out of four suggested messages and rewrote the last.] Closes #2997. -------------------------------------------------------------------------------- 2b115b064e | Brian Power | 2023-02-18 22:21:01 -0800 Make yellow draconian look distinct from green draconian for people who are red-green colour-blind -------------------------------------------------------------------------------- 5ead6e5f92 | Antal Spector-Zabusky | 2023-02-18 22:20:20 -0800 Remove the "You had/have # spell level(s) left" line from Dj morgues Similarly, the "You couldn't/cannot memorise any spells" line. Dj don't keep track of spell levels or memorise spells. -------------------------------------------------------------------------------- ab5ac29ea4 | advil | 2023-02-18 14:46:18 -0500 build: pin a gradle version Method from official docs: https://docs.gradle.org/current/userguide/github-actions.html (Though, we aren't using gradlew..) -------------------------------------------------------------------------------- bee577a6c3 | Nicholas Feinberg | 2023-02-18 11:31:42 -0800 Fix At message for potion stacks (starpolemic) Don't claim that you drink all 10 potions of heal wounds, etc. -------------------------------------------------------------------------------- 6ffb7e90e5 | Nicholas Feinberg | 2023-02-18 11:31:42 -0800 Tweak sksysharks Decrease action speed from 15 to 10, so they can't become mighted and then berserk in one turn. Decrease move delay to 60% (from 100%) and add another tail slap to compensate. Increase attack damage by 20% and increase HP by 60% to make them more threatening. Shift defenses away from EV and toward AC. -------------------------------------------------------------------------------- 07707717f1 | Kate | 2023-02-18 19:03:07 +0000 Fix syntax for a trove veto -------------------------------------------------------------------------------- a761b1b143 | Kyle Rawlins | 2023-02-18 08:01:38 -0500 fix: update contribs for mac tiles capslock handling This is aimed to prevent MacOS builds (post catalina) from asking for input monitoring permission; it's unnecessarily alarming and isn't needed. Plus, as far as I can tell the permissions request resulted from a misimplementation in SDL2 of capslock handling in the first place. -------------------------------------------------------------------------------- e64f9170bb | Kyle Rawlins | 2023-02-17 10:01:33 -0500 fix: resolve a couple more warnings The outer-menu.cc is reported in #2891; I don't see it locally but it seems good to make this code a bit safer. The semicolon is just a pedantic warning. -------------------------------------------------------------------------------- eb7024b798 | Kyle Rawlins | 2023-02-17 09:30:59 -0500 fix: prevent some `random_var` warnings ...on current MacOS at least. As far as I can tell it should be fine to have all of these defaulted. -------------------------------------------------------------------------------- 1c7e38fe9f | Kyle Rawlins | 2023-02-17 09:25:53 -0500 fix: remove sprintf `sprintf` is marked as deprecated and generates many warnings on current MacOS builds. And indeed it does seem better to use at least snprintf in most cases. (At various points I instead used make_stringf for more idiomatic crawlcode, though.) -------------------------------------------------------------------------------- 7971cf19c3 | Nikolai Lavsky | 2023-02-17 01:16:44 +0300 fix: disallow unequipping cursed weapons It was possible to unequip and destroy a cursed weapon by simply switching to unarmed via `e-`. Similarly, this could be done in the unified unequip menu by pressing `c` and the weapon's letter. Compared to Shatter the Chains, shattering an item by unequipping it took 3 auts instead of 10, and it could be done even under silence. Also, the player could unequip the obsidian axe while mesmerized by an enemy. -------------------------------------------------------------------------------- 2ef04afb54 | Kate | 2023-02-14 15:50:30 +0000 Don't let the Storm card try to push dead monsters Fixes a crash when a collision kills something and then the card effect continues to try and push that thing. -------------------------------------------------------------------------------- a9a30cbeda | Kate | 2023-02-12 23:13:12 +0000 Remove an unused constant (PleasingFungus) -------------------------------------------------------------------------------- 08fbeb92c1 | Kate | 2023-02-12 22:57:29 +0000 Adjust channeling backfire effects To hopefully make orbs of energy a little more usable at lower skill levels, give a small flat bonus to resisting backfire effects, and don't backfire when casting a spell that's too high level to ever successfully channel (just bail out early instead). Additionally, change the actual effect of backfiring to always apply -Cast for a few turns, with a chance of also applying 1-5 Int drain (instead of a coinflip between confusion and Int drain). -------------------------------------------------------------------------------- ec953de308 | Kate | 2023-02-12 22:57:29 +0000 Give Arcjolt full LOS range Instead of letting it chain to anything within range 5, allow it to keep chaining to anything in LOS. Primarily changed just to simplify the spell, since having a full chain of monsters all the way to the edge of LOS is fairly rare. -------------------------------------------------------------------------------- 4aa5aa1482 | advil | 2023-02-12 15:44:27 -0500 fix: stop describing things as manuals of fighting (nlavsky) Also, try to clarify this (somewhat odd) code a bit more. -------------------------------------------------------------------------------- bab4234b37 | Nikolai Lavsky | 2023-02-12 22:16:32 +0300 fix: display the malmutated status icon in webtiles This got missed in b84343df53. -------------------------------------------------------------------------------- 5528072125 | Nicholas Feinberg | 2023-02-11 16:56:49 -0800 Remove support for removed scrolls Don't see any need to keep around special handling for ?recharge and the various ?curse scrolls. -------------------------------------------------------------------------------- 536dbf11e5 | Nicholas Feinberg | 2023-02-11 16:50:29 -0800 Fix: properly handle unid'd useless scrolls If the 'ident' param is passed, these should be considered useless. I don't think this ever matters at present. -------------------------------------------------------------------------------- b1c4c7f3ac | Nicholas Feinberg | 2023-02-11 16:44:44 -0800 Fix: don't give !magic to Djinni (BlurryCent) There's probably more bugs lurking along these lines. -------------------------------------------------------------------------------- bc771150d3 | Nicholas Feinberg | 2023-02-11 16:31:23 -0800 Tweak bloodzerk desc (dilly) Phrase it as 'if blood is drawn', not just 'if damage is dealt'. -------------------------------------------------------------------------------- 2cf8fcd27f | Nicholas Feinberg | 2023-02-11 16:27:55 -0800 Make Chain Lightning ignore demonic guardians (Zil) Oversight - I think I'd initially believed that god_protects() covered that case. Probably the set of things that god_protects() covers and should be the same as the set that demonic guardians are immune to. -------------------------------------------------------------------------------- afbfe9f00c | Nicholas Feinberg | 2023-02-11 16:24:46 -0800 Tweak frenzy/berserk behavior Remove some unintended overlap between checks. Let monsters with no attacks become frenzied (it's still great to neutralize em!), and let special allies (i.e. demonic guardians) go berserk. -------------------------------------------------------------------------------- b84343df53 | Nicholas Feinberg | 2023-02-11 16:15:54 -0800 New tiles (Sastreii) Skyshark, Storm Queen's Shield, and malmutated. -------------------------------------------------------------------------------- 3161bf10a1 | advil | 2023-02-11 13:30:58 -0500 fix: exclude removed items from the glyph to name cache This prevents e.g. a manual of slings from showing up under glyph lookup (and I assume many other items). Annoyingly, manual removedness status needs to check `plus`, so the usual removed item code won't work for it. -------------------------------------------------------------------------------- 9a087e29e1 | advil | 2023-02-11 13:18:33 -0500 fix: support BOOK_MANUAL lookup by exact name This fixes only a tiny fraction of weirdness related to manuals in the item help lookup menu, but it prevents the actual error popups. Remaining weird things (that I know about): * "Manual" shows up in the glyph menu, with a manual of fighting description. * All manuals show up in the glyph menu even though they have nearly identical descriptions. (Possibly only one should show up, with a generic description?) * When searching for "manual" normally, only the "Manual" shows up, and it has the manual of fighting description. * Removed manuals show up in the glyph menu (this one I know how to fix, so a following commit will take care of it) -------------------------------------------------------------------------------- 1a60562a26 | advil | 2023-02-11 12:24:18 -0500 fix: disable : and # in the help menu pre-game The previous behavior was that these would just exit out of the help menu. Now they are explicitly marked as disabled, and do nothing, if there is no game going. -------------------------------------------------------------------------------- c4145cabe6 | advil | 2023-02-11 11:57:03 -0500 refactor: convert various errors to ui::error For `die` calls: arguably, `die` should only be used for invalid game state where continuing isn't safe, or for detecting programming error (cases that should be found during debug). I've converted a few (not very many) `die` calls to simply do an error popup. There are still a few more ui cases that are arguable. I did a pass through all `die` calls but it may not have been exhaustive. For MSGCH_ERROR logging: this new ui::error call should be used in any case where the error might happen during a popup. I did a pass and found a bunch of these, but I still may have missed some. There also might be a bunch of cases where popups or menus use a different means to indicate an error state, that could be converted to this call. -------------------------------------------------------------------------------- 8e7229f42b | advil | 2023-02-11 11:57:03 -0500 refactor: generalize some popup code Previously there was (at least as far as I know) not really any single standard way to throw up a popup with a short (or long) message in it, leading to a bunch of ad hoc `ui::Popup` + `ui::Text` + CRT mode rendering calls that were all similar, but not quite identical, and also not very general. This replaces these with a single code path: * Use the formatted_scroller class so that we automatically get a bunch of features that just plain `ui::Text` doesn't have. Also, if someone wants a quick way to show longer text, this easily provides that. (There's some code that could be refactored to use this capability, but I haven't done that. * Wrap class instantiation in some convenience calls in the ui namespace. * Standardize various aspects of this across calls As part of this I fixed a bunch of formatted_scroller bugs: * webtiles spacing fixes * implement title in webtiles (this was just missing) * if easy_exit is set, allow clicking out of scroller popups * refactor so that a scroller can correctly handle subclassing key overrides, regular scroller key handling, and easy exit all at the same time. (Slightly complicates the api from the standard process_key). -------------------------------------------------------------------------------- 5a9884bb7c | Nicholas Feinberg | 2023-02-09 19:24:35 -0800 Refactor maybe_bloodify_square -------------------------------------------------------------------------------- 0b89b74ca8 | Nicholas Feinberg | 2023-02-09 19:24:33 -0800 New monster: skyshark Slicing through the Dungeon's air - oh, what graceful beasts! What a terrifying sight...! Skysharks are a speed-15 flying monster that becomes more dangerous once it tastes blood, first getting Might (+50% damage) and then going Berserk. Perhaps wise to kill them before that happens? They're currently intended as a high-end threat for Lair and a low-end Shoals monster, but they might migrate to the Desert once that lands. So to speak. Canonically, this species is related to, but distinct from, the skysharks that the Slick Slippers are made from. -------------------------------------------------------------------------------- c2c871d025 | Nicholas Feinberg | 2023-02-09 14:12:06 -0800 Remove unused arcjolt power -------------------------------------------------------------------------------- a6a79fd877 | Nicholas Feinberg | 2023-02-08 22:52:22 -0800 Fix: cap doom howl power (acrobat) Oops! -------------------------------------------------------------------------------- c2185399d4 | Kate | 2023-02-09 00:22:35 +0000 Fix Arcjolt range handling (#2875) Don't consider Arcjolt to have range 5 - like Static Discharge, it has range 1, requiring a target to be adjacent (but then can continue onward and hit further targets). The limit on how far it can travel is still shown clearly in the targeter. Fixes Spellforged Servitors with Arcjolt wasting turns doing nothing (thinking they're in range to cast it but then being unable to). Closes #2875. -------------------------------------------------------------------------------- 0b50240ab4 | Neil Moore | 2023-02-08 17:25:16 -0500 Add a sphinx quote. Somehow we have neglected to add any Yeats quotes in all these years, only one secondhand reference. This major omission is now now corrected. [skip ci] -------------------------------------------------------------------------------- f493690b3a | Nicholas Feinberg | 2023-02-08 12:45:13 -0800 Fix apportation + mimics (dilly, acrobat) Broken in 86a8295270962016579da244f3382e678c83a075. -------------------------------------------------------------------------------- bd6742b3f2 | Nicholas Feinberg | 2023-02-08 08:38:39 -0800 Add a message when stepping near slime walls (dilly) Beware the corrosion cost! -------------------------------------------------------------------------------- ab721bf1f9 | Nicholas Feinberg | 2023-02-08 08:32:21 -0800 Ban usk piety for nameless horrors (dilly) Don't encourage ridiculous miscast tech. -------------------------------------------------------------------------------- b7baff67ae | Nicholas Feinberg | 2023-02-08 08:21:43 -0800 Add a runrest stop for out-of-LOS shots (dilly) When something's shooting at your pal from outside your LOS, stop resting. -------------------------------------------------------------------------------- 8343f060c3 | Nicholas Feinberg | 2023-02-08 08:12:43 -0800 Add a message for monsters recalled away When a monster is recalled to a location outside your sight (by a convoker's Word of Recall spell), print a message so that they don't just vanish without explanation. -------------------------------------------------------------------------------- 7f663e2a95 | Nicholas Feinberg | 2023-02-08 08:05:25 -0800 Halve the chance of Irradiate malmutation To focus a bit more on the exciting parts of the spell (damaging enemies & contaminating the player), malmutate victims only on a coinflip chance. We could play with these numbers further as appropriate - for example, by making the chance depend on power and/or victim HD, or just by adjusting the flat rate. -------------------------------------------------------------------------------- e6a52f7cba | Nicholas Feinberg | 2023-02-07 17:46:49 -0800 Remove endotherms (꧁🌺𝓱𝓮𝓪𝓭𝓱𝓸𝓷𝓬𝓱𝓴𝓻𝓸𝔀🌺꧂) The text was both superfluous and incorrect. -------------------------------------------------------------------------------- 69c6e2d096 | Nicholas Feinberg | 2023-02-07 16:39:06 -0800 Fix a Storm Queen comment (acrobat) -------------------------------------------------------------------------------- 639cfe8b63 | Nicholas Feinberg | 2023-02-07 15:56:30 -0800 New unrand: Storm Queen's Shield The Disc of Storms is back, in completely unrelated form! Alternatively: did you ever want to be a shock serpent? The Storm Queen's Shield is a +5 kite shield of flight and rElec that has a chance to retaliate on block, lashing out with 3d7 of half-AC-checking electric damage. This effect triggers even up to range 3 (as with shock serpents). It's a bit like reflection, but it works on melee blocks (unlike reflection). Not sure this ended up being extremely exciting, but I did implement it, so let's see! -------------------------------------------------------------------------------- 0bc11aca90 | Nicholas Feinberg | 2023-02-07 15:56:30 -0800 Pass the attacker to shield_block_succeeded For the Storm Queen's Shield. -------------------------------------------------------------------------------- 9c67137058 | Nicholas Feinberg | 2023-02-07 15:56:23 -0800 Refactor shock serpent discharge To support other discharge fineffs. -------------------------------------------------------------------------------- bfdf073431 | advil | 2023-02-04 16:13:19 -0500 feat: try `w` for map mode add waypoint This key is currently unbound, and ctrl-w is blocked by browsers. So let's try just using the simplest possible binding for this. It may be prone to confusion with miskeys, in which case it might make sense to swap `w` and `W`? Resolves #2984 -------------------------------------------------------------------------------- 74f6264c45 | advil | 2023-02-04 14:46:10 -0500 fix: better handle a webtiles chroot error case A common webserver setup issue (on a new setup, or an upgrade from an old version of tornado) is that modern webtiles under a chroot requires a copy of the python library in the chroot. This is because any `import` after the chroot call is still looking for the python library at the same path as before, but paths have changed; older tornado (and a lot of older python code in general) simply didn't use locally scoped import. However, it is good python practice in a lot of cases, and are now used both in modern tornado and various parts of the webtiles server. This usually seems to fail first in tornado code (though I think that's not the only possibility) -- so this commit adds an explicit check for this and attempts to provide a more informative error message along with the exception. By its nature this is a bit hard to directly test locally... -------------------------------------------------------------------------------- 59b9271927 | advil | 2023-02-04 11:09:54 -0500 docs: update webtiles changelog This should include everything done so far in 0.30; there was a fair amount missing, so the commit accordingly does a bunch of reorganization to existing 0.30 notes. -------------------------------------------------------------------------------- 6493da8e45 | advil | 2023-02-04 09:58:06 -0500 fix: fully disallow python 2, tweak deprecation handling Python 2.7 was deprecated with the 0.29.0 release in Aug, and now crashes on start because of the use of a py33 module (py33 was released in 2012). It would probably be possible, in principle, to get py27 working again, but nearly all servers have updated, and I'm pretty tired of extreme backcompat hacks. This commit prevents the server from starting either with an old version of python, or with an old version of Tornado. In the future some backcompat commit can probably also be cleaned up, since I'm not sure this affects more than ~1 server. -------------------------------------------------------------------------------- ea05faddec | Nicholas Feinberg | 2023-02-03 13:59:18 -0800 Mention CBL checking half AC (acrobat) -------------------------------------------------------------------------------- 116ff8c4af | Nikolai Lavsky | 2023-02-02 18:47:39 +0300 fix: expire fire vulnerability when returning to a level It was possible to burn away monster's fire resistance using Scorch, leave the monster on another floor, return more than a hundred turns later, and the monster would still be vulnerable to fire. -------------------------------------------------------------------------------- f23d94013f | spiros | 2023-01-31 11:51:41 -0800 added leading space to text message on uselessness -------------------------------------------------------------------------------- 880c04f40e | Zhang Kai | 2023-01-31 11:51:16 -0800 Update tutorial.txt -------------------------------------------------------------------------------- b847cfa5cd | Zhang Kai | 2023-01-31 11:51:10 -0800 Update unrand.txt -------------------------------------------------------------------------------- dfc2f88e47 | Zhang Kai | 2023-01-31 11:51:03 -0800 Update spells.txt -------------------------------------------------------------------------------- 40cfa726b3 | Zhang Kai | 2023-01-31 11:50:57 -0800 Update monsters.txt -------------------------------------------------------------------------------- c44e5b395e | Zhang Kai | 2023-01-31 11:50:49 -0800 Update items.txt -------------------------------------------------------------------------------- c37f88b80d | Zhang Kai | 2023-01-31 11:50:43 -0800 Update features.txt -------------------------------------------------------------------------------- 43c3b1f7ca | Zhang Kai | 2023-01-31 11:50:34 -0800 Update clouds.txt -------------------------------------------------------------------------------- a00cedfdfe | Zhang Kai | 2023-01-31 11:50:22 -0800 Update ability.txt -------------------------------------------------------------------------------- c68057be0a | advil | 2023-01-29 10:17:08 -0500 test: add an arena test The arena call from #2955 is fairly useful because it exercises items in the arena (which none of the other tests do), and it's very quick to run. This commit adds it as a new stress test. -------------------------------------------------------------------------------- b6d103fe33 | advil | 2023-01-29 10:02:55 -0500 fix: add some arena item checks These functions all assume a reasonable value for `you`, which can't be assumed in the arena. These three checks have some overlap for the reported crash, but it seems good to cover a bunch of bases here since I think multiple code paths code apply, and some of the checks in this code that don't crash may still have undefined behavior. Resolves #2955 -------------------------------------------------------------------------------- d89dcf765f | Nicholas Feinberg | 2023-01-28 13:07:43 -0800 Fix the build -------------------------------------------------------------------------------- 9870b12c7c | Nicholas Feinberg | 2023-01-28 12:53:52 -0800 Wake monsters when they're smitten (Ge0ff) By Smiting, airstrike, waterstrike, resonance strike, throw ally, freeze... -------------------------------------------------------------------------------- 1587923927 | gammafunk | 2023-01-27 23:16:37 -0600 feat: Support up to 100 waypoints For establishing a user coordinate system on levels on the clua side, we need to be able to create at least one waypoint per permanent level. Crawl has almost 90 such levels, so 100 waypoints will cover these plus the extra waypoint needed for temporary levels such as portals, Pan, and the Abyss. This does add 90 waypoint slots to the save file and to travel memory, but at a cost of 9 bytes per waypoint (one short for a level ID and two ints for a coordinate), this doesn't matter. This commit just extends the allowed number of waypoints without allowing the in-game UI to add waypoints past the 10th. The additional waypoints can be created via clua's `travel.set_waypoint()` function and additionally deleted in the UI along with all other waypoints by using the "*" option. -------------------------------------------------------------------------------- c1506a1cf0 | gammafunk | 2023-01-27 18:49:19 -0600 feat: Remove an autoexplore trap (Lici, ebonnov) This vault places two `8`s and two `9`s, and it does so in a way that's likely to lead to autoexploring somewhat close to these monsters, due to the corner at the entrance. Add a couple glass tiles to reveal the innermost monsters (and loot) further before said corners are taken. I considered other adjustments, but went with ebonnov's suggestion, since it's as minimal as we're likely to get, and it's good to be very minimal when adjusting for this sort of thing. -------------------------------------------------------------------------------- 3e6e8c874d | Nicholas Feinberg | 2023-01-26 22:39:30 -0800 Make slippers suppress net warnings (ragingrage) Since you're immune to em. Also do some refactoring. -------------------------------------------------------------------------------- a6a225cb13 | Kate | 2023-01-26 17:03:08 +0000 Redraw evasion when flying over water as Merfolk (#2878) Closes #2878. -------------------------------------------------------------------------------- 9761204cdd | Kate | 2023-01-26 15:50:04 +0000 Update invisibility status description (#2957) Invisibility no longer causes contamination over time (just some initial contamination when activating it via evoking). Closes #2957. -------------------------------------------------------------------------------- cc4359ea44 | Nicholas Feinberg | 2023-01-25 13:01:40 -0800 Fix Hailstorm animation speed (various) Don't redraw for every single cell of the explosion. -------------------------------------------------------------------------------- eaa24f58ff | Kate | 2023-01-24 20:51:53 +0000 Fix Green Draconian breath not piercing enemies (#2832) Broken by the zap noise changes in d80880ac - using Mephitic Cloud as its origin spell caused it to be treated like a cloud spell that would always stop on hitting a target. Closes #2832. -------------------------------------------------------------------------------- 8ad61386b6 | Kate | 2023-01-24 20:06:34 +0000 Refactor messaging on escaping engulf (#2859) Don't print a message about slipping free from engulf if still adjacent to the monster engulfing you. Closes #2859. -------------------------------------------------------------------------------- 8ab98d0bbf | Kate | 2023-01-24 17:22:10 +0000 Allow equipping finger amulet rings in batform (#2835) Closes #2835. -------------------------------------------------------------------------------- db4ae3ece1 | Kate | 2023-01-22 22:14:19 +0000 Prompt when consumables would reset Victory bonus -------------------------------------------------------------------------------- 8d745af8aa | Kate | 2023-01-22 21:36:45 +0000 Handle wizmode stat changes correctly Properly checks for stat 0 when changing stats in wizmode. -------------------------------------------------------------------------------- 87fffd12f7 | Kate | 2023-01-22 21:36:45 +0000 Generalise unrand death effects Let monster death effects work on unrands than just the toga (although the toga is the only unrand with a death effect, since melee weapons can use melee_effects). -------------------------------------------------------------------------------- dc2f814f26 | Implojin | 2023-01-22 21:36:45 +0000 New unrand: toga "Victory" This is an early unrand with a variable bonus based on kills: As the player kills threatening monsters, this robe gradually gains AC, Int and Slay, capping out at +7 each. Beware -- Quaffing potions or reading scrolls in combat (with monsters visible) resets these bonuses to zero! [Committer's note: squashed commits and updated commit message. Fixes some logic for when to apply the bonuses, and adjusts messages/description. Closes #2920. -kate] -------------------------------------------------------------------------------- f4ac18a38d | Neil Moore | 2023-01-21 19:02:53 -0500 And yet another quote. Fine, I like prog, okay? Hope you're happy. [skip ci] -------------------------------------------------------------------------------- a8c43d9988 | Neil Moore | 2023-01-21 18:49:12 -0500 Add another pop music quote. I'm incorrigible, so please don't incorrige me. [skip ci] -------------------------------------------------------------------------------- cdc1b43e22 | Kate | 2023-01-21 21:59:13 +0000 Give Dispater an extra adjective To match the similarly-styled descriptions of Asmodeus and Ereshkigal. -------------------------------------------------------------------------------- bb11188b7b | Kate | 2023-01-21 21:59:13 +0000 Fix a typo in coding_conventions -------------------------------------------------------------------------------- 5c07829312 | Kate | 2023-01-21 21:59:13 +0000 Finish removing Flame Tongue It was used for Vehumet wrath and nothing else. -------------------------------------------------------------------------------- e3182b2870 | hellmonk | 2023-01-21 21:59:13 +0000 feat: Rework slime walls Reworks slime walls to apply 1 level of corrosion each to the player for as long as they remain adjacent instead of doing damage; they do nothing to monsters unless oozemancy is active, in which case they deal damage as before. [Committer's note: squashed commits and added handling to redraw stats. Some further Slime changes to go alongside this would also be good - in particular, more variation in layouts and monster pools, and possibly adding in some more uniques. Closes #2791. -kate] -------------------------------------------------------------------------------- 34404dee4a | Aliscans | 2023-01-21 21:59:13 +0000 Change the spelling of some words to Australian English. Change how some words are spelt to reflect the standard spelling on www.macquariedictionary.com.au. 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 any of the contrib stuff. These include: armor => armour defense => defence offense => offence I haven't changed the Longfellow quote, as it appears to use the poet's original words. Replace "alternate" with "alternative", as the dictionary describes the "one possibility out of two" sense in which "alternate" is used as "a disputed usage". [Committer's note: squashed commits. Closes #2880. -kate] -------------------------------------------------------------------------------- 595c1f4b75 | Aliscans | 2023-01-21 21:59:13 +0000 Extend the first column of the dump action count to 7 characters long. Going from 5 to 7 characters means that 'Armour', 'Invoke', 'Ability' and 'Riposte' are printed in full. It increases the maximum row length from 106 to 108 characters, but does not affect the point at which 80 characters stops being wide enough. Move the "pad strings" code from _describe_action() to _sdump_action_counts(). -------------------------------------------------------------------------------- a1440bf155 | Aliscans | 2023-01-21 21:59:13 +0000 Record Wu Jian's Lunge and Whirlwind as CACT_ABIL, not CACT_INVOKE. Previously, Lunge, Whirlwind, Serpents Lash and Heavenly Storm were recorded with CACT_INVOKE, and Wall Jump with CACT_ABIL. This change means that Wu Jian's powers are now split into martial attacks (abilities which do not consume piety or fail if you are silenced) and other powers (invocations which do both). [Committer's note - fixed save compatability handling. Closes #2944. -kate] -------------------------------------------------------------------------------- df48620a09 | Nicholas Feinberg | 2023-01-20 13:44:46 -0800 Tweak hell unrand descriptions further (riverfiend) Worth noting explicitly that they must be wielded to be used. (Why did we decide on that, again..?) -------------------------------------------------------------------------------- 5e2a1faac7 | Kate | 2023-01-20 21:34:36 +0000 Don't allow placing zigfigs on temp terrain (#2797) They would be overwritten when the terrain expired, and had various messy interactions. In general it's safer not to allow changing terrain that's already temporarily changed. Closes #2797. -------------------------------------------------------------------------------- 08127ecf53 | Nikolai Lavsky | 2023-01-21 00:18:06 +0300 fix: allow Enter to exit the skills menu when drinking !xp As a followup to 9571b93c, this commit restores the previous behavior, allowing to exit the skills menu with Esc or Enter when drinking !xp. -------------------------------------------------------------------------------- 0bb7008f9d | Kate | 2023-01-20 21:10:08 +0000 Clarify Octopode Beastly Appendage description (#2919) Closes #2919. -------------------------------------------------------------------------------- 96b69d01bc | Nicholas Feinberg | 2023-01-20 13:02:29 -0800 Clarify hell lord unrand descriptions (powerbf, #2912) Don't claim that they can be 'evoked', since they no longer use V. Instead, describe them as 'granting the ability'. Resolves #2912. -------------------------------------------------------------------------------- 50ae3c0e08 | advil | 2023-01-20 15:45:23 -0500 fix: restore the unknown items toggle in \ menu -------------------------------------------------------------------------------- 2367cd04db | Nicholas Feinberg | 2023-01-19 21:15:51 -0800 Consecrated labrys tiles (CanOfWorms) -------------------------------------------------------------------------------- bc80c1ad91 | Neil Moore | 2023-01-19 21:43:20 -0500 Update copyright date. [skip ci] -------------------------------------------------------------------------------- 3340775977 | Neil Moore | 2023-01-19 16:31:16 -0500 Add a new splash screen (SpinningBird) A bit large, at my request, but IMO better to have to scale down than up. -------------------------------------------------------------------------------- 5b54d204dd | patrick | 2023-01-19 13:22:24 -0500 Fix a tiles make bug with MSYS git -------------------------------------------------------------------------------- a6d2a93c4a | robertxgray | 2023-01-19 11:50:44 -0500 Clean obsolete TOUCH_UI code The latest version of the Android port made the TOUCH_UI build option obsolete. Somehow some fragments of code survived the merge process and one of them broke the tile_use_small_layout option. Fixes #2921 -------------------------------------------------------------------------------- 754fce4c43 | advil | 2023-01-18 17:10:45 -0500 fix: prevent a divide by zero in weird cases This should only be triggerable under debug conditions, but let's handle the error conditions that lead to this crash elsewhere only. -------------------------------------------------------------------------------- 4c74721511 | advil | 2023-01-18 17:09:18 -0500 refactor: handle spflag::testing and spflag::monster together This generates an error, rather than a crash, if a non-wizard casts a testing spell. It also lets wizmode chars memorise debugging ray, instead of just casting it via &z. -------------------------------------------------------------------------------- 8d191d4e4e | advil | 2023-01-18 16:35:34 -0500 fix: don't check spflag::monster for non-spell casts Various abilities and items use `your_spells` to cast spells that may be only castable in the normal way by monsters, don't error on these. -------------------------------------------------------------------------------- bdb63f398d | advil | 2023-01-18 13:47:20 -0500 fix: remove whitespace in some menus This is to some degree intentional (see comment), but it isn't needed for id/enchant/brand. -------------------------------------------------------------------------------- fa0a19f920 | Nicholas Feinberg | 2023-01-18 09:37:49 -0800 Fix consecrated labrys enum order Oops! This breaks all unrands that have an enum after the obsidian axe in saves after 0ad051ed3b7deee9383e0b7a7b666411275f9e51. -------------------------------------------------------------------------------- 08df3a68dd | Nicholas Feinberg | 2023-01-18 09:36:27 -0800 Remove Morg (moreso) (dilly) Missed some vaults. -------------------------------------------------------------------------------- 031d1225b2 | advil | 2023-01-18 12:18:10 -0500 fix: prevent a miscast crash on wizmode casting This code would crash when miscasting (via &z etc) a spell in wizmode with no spell schools. The game will still crash if not in wizmode, but a wizmode cast just skips the miscast effect. -------------------------------------------------------------------------------- 3ae23987fd | advil | 2023-01-18 12:03:38 -0500 fix: add an explicit spflag::monster check in _do_cast Before this commit, _do_cast relied on spell-specific code to determine if spret::none was returned, which unsurprisingly was all over the place. Previously I suspect that spflag::monster was too unreliable to use here, but it should be accurate now. The barn door may be almost closed now... -------------------------------------------------------------------------------- 636a5c3615 | advil | 2023-01-18 11:21:35 -0500 lint: fix a weird indent -------------------------------------------------------------------------------- 9571b93c2c | advil | 2023-01-18 11:17:22 -0500 fix: swap default for ui::key_exits_popup It's safer not to shadow enter by default. -------------------------------------------------------------------------------- 83e5d64585 | advil | 2023-01-18 11:07:41 -0500 fix: allow enter to join religions -------------------------------------------------------------------------------- 6c2b13695a | advil | 2023-01-18 11:06:51 -0500 Revert "Revert "feat: standardize popup exiting keys"" This reverts commit fcc1e2b2aff5e3f200ff84aef7794a608b68ef71. -------------------------------------------------------------------------------- ba7862b69d | Nicholas Feinberg | 2023-01-18 08:02:56 -0800 Unbreak wizmode memorization -------------------------------------------------------------------------------- d14727376c | Nicholas Feinberg | 2023-01-18 07:57:49 -0800 Refactor memorization code (advil) Per request, repeatedly check that a spell that the player is trying to memorize is actually available for them to memorize, just in case. -------------------------------------------------------------------------------- fcc1e2b2af | Nicholas Feinberg | 2023-01-18 07:50:55 -0800 Revert "feat: standardize popup exiting keys" This broke joining religions, and the code is complex enough that I don't immediately see how to fix it. (It's because 'enter' is now configured to close UIs, I think?) This reverts commit df044eaf4f235edcf790c93cfc1c61d2c97afcfd. -------------------------------------------------------------------------------- 0ad051ed3b | Nicholas Feinberg | 2023-01-18 07:46:22 -0800 New unrand: the consecrated labrys Players have often asked: we have demon blades, demon tridents and demon whips, but why no demon axe? Of course, those wise enough to peruse the source code will know we've always had a demon axe - the obsidian axe. Now we have the blessed version! The consecrated labrys is a +5 holy broad axe (with +1 base damage, like other blessed weapon types) with sInv, Flight, and a gimmick - it gets bonus enchantment as scarier enemies come into view, working via the same threat mechanic as Ru's Sacrifice Courage. To discourage aggressive swapping, it also has Fragile, and for pleasantness, it caps out at +27 enchant. That might be too high, truthfully, but let's give it a shot - we can revisit scaling after folks play around with it a bit. S/o to bitdizzy for suggesting the ego effect. -------------------------------------------------------------------------------- f9ce66f82c | Nicholas Feinberg | 2023-01-18 07:46:22 -0800 New unrand -------------------------------------------------------------------------------- 870441aebb | advil | 2023-01-18 10:45:36 -0500 fix: don't crash on &z zaps with no player tohit We don't necessarily aim to keep &z fully working, but this commit should remove a whole class of wizmode crashes where the spell uses a zap, and the zap is lacking a player tohit. (This would also crash the memorise menu if memorised in wizmode or, uh, via bugs.) -------------------------------------------------------------------------------- 5a0d6e57be | Nikolai Lavsky | 2023-01-18 16:29:15 +0300 feat: add tiles to the mutation description popup Mutation tiles were already shown on the `A` and `?/u` screens, but now the players can see these tiles in all their double-size glory in the description popup. -------------------------------------------------------------------------------- c3a7216ad8 | Nicholas Feinberg | 2023-01-17 20:59:03 -0800 Probably fix unlimited memorization Closes #2947. -------------------------------------------------------------------------------- 2f0a8685bb | Nicholas Feinberg | 2023-01-17 19:54:32 -0800 Fix unlimited memorization power (maybe) (Implojin, #2947) I haven't tested this, so I'm not closing the issue. -------------------------------------------------------------------------------- 5fa2372673 | Nicholas Feinberg | 2023-01-17 19:50:58 -0800 Fix a sign comparison warning -------------------------------------------------------------------------------- d82a45a22e | Monkooky | 2023-01-17 18:13:29 -0800 Make divine vigour apply multiplicatively Closes #2935. Fixes #2910. -------------------------------------------------------------------------------- c3cde76320 | robertxgray | 2023-01-17 17:39:33 -0800 Fix estimation of the minimum usable window size We were using the m_fonts array to get the font sizes. This is wrong because caching leads to unpredictable array contents. Now we are using proper char width and height. It also has the benefit of improved precision. -------------------------------------------------------------------------------- ab5fb16433 | Aliscans | 2023-01-17 17:39:14 -0800 FIX: Stop libPNG shouting into the void. When run, tilegen.elf produced a large number of copies of two warning messages. Both are considered harmless here, but may distract people. This change tells libpng not to report those specific errors. Closes #2904. -------------------------------------------------------------------------------- 1029e49c50 | Antern | 2023-01-17 17:34:26 -0800 fix: local tiles sidebar height -------------------------------------------------------------------------------- d3cbc7c866 | Zhang Kai | 2023-01-17 17:29:57 -0800 Update unrand.txt -------------------------------------------------------------------------------- 6f51dd0f84 | Zhang Kai | 2023-01-17 17:29:32 -0800 Update spells.txt -------------------------------------------------------------------------------- fe5d03000b | Zhang Kai | 2023-01-17 17:28:48 -0800 Update monsters.txt -------------------------------------------------------------------------------- 23e4f76630 | Zhang Kai | 2023-01-17 17:28:26 -0800 Update items.txt -------------------------------------------------------------------------------- 4d610aba3f | Zhang Kai | 2023-01-17 17:27:55 -0800 Update commands.txt -------------------------------------------------------------------------------- bde2ad023b | Nicholas Feinberg | 2023-01-17 17:27:34 -0800 Re-remove embers -------------------------------------------------------------------------------- f6d4d4f6a7 | Zhang Kai | 2023-01-17 17:27:13 -0800 Update clouds.txt -------------------------------------------------------------------------------- 32faffd49c | hellmonk | 2023-01-17 17:23:57 -0800 properly monsterify sickly merfolk Make the 'sickly' merfolk actual monsters instead of vault defines and recolor them for console (no retile yet). -------------------------------------------------------------------------------- 7904f2a0a2 | hellmonk | 2023-01-17 17:23:16 -0800 nerf randarts Based on some discord feedback. Try to make high plus weapons and high stat properties slightly less common. No idea if this will be noticeable. -------------------------------------------------------------------------------- d1d138d441 | hellmonk | 2023-01-17 19:55:27 -0500 decouple gold aura duration and corpse size Killing bigger monsters gave you longer gold aura duration, which is mechanically weird (also not great that you could pseudo-count the duration by looking at the size of a gold stack that dropped!) Just roll independently instead, choosing numbers roughly equal to the case for human size. Gold amount being tied to corpse size is also weird in a post-chunk universe, but the gameplay implications there are mostly fine and it would be a significant balance change to decouple it - worth looking at if gozag needs another nerf, but I've left it alone for now. -------------------------------------------------------------------------------- df044eaf4f | advil | 2023-01-17 18:21:03 -0500 feat: standardize popup exiting keys The original goal of this commit was to consistently let right-click exit popups in local tiles; in some cases this just wasn't implemented, in some cases it wasn't implemented because right-click cycled mode. I have removed the latter functionality, following recent menu changes (an end goal here would be to allow clicking on the mode text itself to cycle). I may well have missed some cases, but as far as I know, every popup can now be exited with the mouse by right clicking. In some cases widgets do override right click, e.g. it does other things in menus, but right clicking outside of the popup always works. Unfortunately click handling is not very sophisticated, otherwise I'd also add left clicking out (like webtiles). Along the way I realized that this was all extremely inconsistent for keys as well. This commit makes things as consistent as I can, at the cost of sometimes removing exit keys, or even removing "any unbound key to exit" schemes. If people complain I can restore the latter -- but these were mostly in really odd places so it wasn't very predictable when it would work. -------------------------------------------------------------------------------- 3e05ae4a99 | Nicholas Feinberg | 2023-01-17 13:59:43 -0800 Don't give DjHW useless spells (Wrentha) A very dreadful rot indeed. -------------------------------------------------------------------------------- 3bb28391b4 | Nicholas Feinberg | 2023-01-17 13:59:16 -0800 New Heavy brand & Wucad Mu doll tiles (CanOfWorms) -------------------------------------------------------------------------------- cc886f7154 | Nicholas Feinberg | 2023-01-16 15:21:24 -0800 Add missing mutation resistance icons (CanOfWorms) -------------------------------------------------------------------------------- 0755cc6dcf | advil | 2023-01-16 16:16:34 -0500 fix: correct local tiles evokable tooltips These were impressively outdated, and also slightly broken. -------------------------------------------------------------------------------- 4dd8b1dda3 | advil | 2023-01-16 16:06:53 -0500 fix: tiles build -------------------------------------------------------------------------------- e7f8f89663 | advil | 2023-01-16 15:18:31 -0500 fix: improve evokable uselessness handling * fix some issues in cannot_evoke_item_reasons * show uselessness reason for evokables in description, generalize some describe code * use correct uselessness checks for describe hotkeys * dedup code in is_useless_item -------------------------------------------------------------------------------- 755734b53a | advil | 2023-01-16 15:18:31 -0500 feat: move evoke to UseItemMenu This brings evoke together in a mode cycle with read/quaff, and automatically adds various features from this menu. Evoking from the floor is disabled. (In the future, a generic use menu could be produced from these three item types.) As part of this, I cleaned up some of the evoke check code and converted it to use a `cannot_evoke_item_reason` call with the same API as reading/quaffing. Also, CMD_ZAP (unbound legacy CMD?) still uses a regular inventory menu prompt. -------------------------------------------------------------------------------- 452ae9f181 | advil | 2023-01-16 15:18:31 -0500 feat: toggle equip vs unequip modes in UseItemMenu This commit adds a key (bound right now to tab) that, in the equip menus, toggles to the corresponding unequip menu (or general unequip if there isn't one) and vice versa. This is a bit overengineered, but the end goal of this is that a new player only needs to remember one key to get to all equip menus from the main view (`e`). Note: the option `equip_unequip` also can accomplish this goal (in combination with the new equip menus). However, it makes it a bit too easy to accidentally unequip stuff, and also (wheals) new players mostly don't want to unequip stuff in modern crawl, so there's not a huge need to make it so immediately accessible. Other notes: * this commit attempts to do smarter hover saving on mode changes; it doesn't just preserve position, but item link if possible. This applies to all menu mode changes. * keyhelp code here is kind of involved... * commit should have no effect outside of equip/unequip menus aside from more consistent keyhelps. -------------------------------------------------------------------------------- 753c900711 | advil | 2023-01-16 15:18:30 -0500 fix: bounds check for knockback Unclear what can trigger this, but a recent crash appears to have. -------------------------------------------------------------------------------- abd8b8bc87 | Nicholas Feinberg | 2023-01-16 09:15:54 -0800 Add new mutation tiles (CanOfWorms) Various resistances and stat mutations, mostly. -------------------------------------------------------------------------------- 3898ba8535 | Nicholas Feinberg | 2023-01-16 09:03:22 -0800 New unrand tiles (CanOfWorms) Force Lance and Slick Slippers. -------------------------------------------------------------------------------- 638baaf3f0 | Nicholas Feinberg | 2023-01-15 12:49:06 -0800 Reduce consistency of Kiku's second gift (acrobat) Make it a little less predictable exactly which spells you'll get, so that Kiku runs have more variety. (Reduce gift size from 5 to 4.) -------------------------------------------------------------------------------- 38b2fafcf8 | Nicholas Feinberg | 2023-01-15 12:46:42 -0800 Fix tremorstones in fog (MainiacJoe) If there were visible tiles within radius 3, e.g. while in Heavenly Storm or a cloud of fog, tremorstones would quietly break. Unbreak em. -------------------------------------------------------------------------------- 14e8c2fdae | Nicholas Feinberg | 2023-01-15 12:35:13 -0800 Minor tremorstone refactoring Reorder variables to be declared closer to where they're used. -------------------------------------------------------------------------------- 930af78ca9 | Nicholas Feinberg | 2023-01-15 12:22:40 -0800 Give ?butterflies knockback (acrobat) To make its effect more comparable in strength to ?summoning, which it now alternates with, apply a powerful knockback to nearby creatures. Unlike other forms of knockback, this does no damage, mostly so that we don't have to worry about prompting the player. ("Really knock back the goblin in sanctuary..?") -------------------------------------------------------------------------------- 3916f1956a | Nicholas Feinberg | 2023-01-14 22:27:26 -0800 Move Lesser Beckoning to L2 From L3. It's just not as powerful effect as I expected it to be when I designed it back in fcbf9236af95 (2016). -------------------------------------------------------------------------------- e099caa7e7 | Monkooky | 2023-01-14 22:18:13 -0800 Clean up spell power code calc_spell_power previously took five parameters, four of which were unneeded. apply_intel, fail_rate_check, and scale were used in the call for raw_spell_fail to make calc_spell_power function as _skill_power * scale / 100. This has been corrected by replacing the call with _skill_power * scale / 100. cap_power was used in three calls: - spell failure, which no longer uses check_spell_power - target_desc, which now applies the cap twice - and one of the two calls for spell_range passed uncapped spell power. The only 'material' change is that the impact of schools on failure chance no longer depends on spell power cap. However, this does not have an impact unless you have 75 skill, and probably was not intended in the first place. [Committer's note: Did some misc cleanup.] Closes #2735. -------------------------------------------------------------------------------- acddeb6d44 | Nicholas Feinberg | 2023-01-14 21:44:25 -0800 Remove Morg This has always been an extremely unexciting unrand, both from a lore and a gameplay perspective. Moving it to the early game didn't change that. We can add it back if we ever find a good gimmick for it, but we've been trying for years without any success, so I'm skeptical. -------------------------------------------------------------------------------- 200c5c4a83 | Nicholas Feinberg | 2023-01-14 10:14:38 -0800 Actually fix vampiric draining info leak (|amethyst) 0af90f9a207b1d would leak info for non-susceptible monsters who got mirror-cloned. Oops! -------------------------------------------------------------------------------- 8cb723ed8b | Nicholas Feinberg | 2023-01-14 10:00:51 -0800 Buff Slick Slippers We must provide a more delicious bait. (+1 -> +2, EV +3 -> +5.) -------------------------------------------------------------------------------- 8abc85282e | Nikolai Lavsky | 2023-01-13 23:13:58 +0300 fix: don't highlight an "unrand" in the FAQ As a side effect of cf644656b, one of the FAQ entries had a light cyan color. Fix this by making the corresponding default `menu_colour` rule more specific. -------------------------------------------------------------------------------- 3ad151c646 | Kate | 2023-01-13 15:28:08 +0000 Allow looking up hell/pan lord unrands (nesea) They required special-casing in the lookup code since they're have the nogen flag. The faerie dragon armour still can't be looked up - allowing it would probably be more confusing than helpful, since its properties change whenever it generates. -------------------------------------------------------------------------------- 346586fe48 | Nicholas Feinberg | 2023-01-12 15:58:52 -0800 Add labels to unrand artefact effects To make special effects 'pop' more, make it more obvious when an unrand does something unusual, and correlate inscriptions with their effects, add inscriptions for various unrand effects that didn't have any and preface unrand effect descriptions with a corresponding inscription. This is incomplete and a little ugly but I'm tired of staring at unrands for now, sorry. -------------------------------------------------------------------------------- f9bf66eb98 | Nicholas Feinberg | 2023-01-12 15:58:52 -0800 Actually adjust dart prices d54f4be4f7bd5e5b2 claimed to do this but didn't (fully). -------------------------------------------------------------------------------- 881e3bac89 | Nikolai Lavsky | 2023-01-12 17:10:29 +0300 docs: add new equip/unequip menus to ?? screen and changelog Also, fix unequip menu's key in the manual. -------------------------------------------------------------------------------- d54f4be4f7 | Nicholas Feinberg | 2023-01-11 17:54:38 -0800 Increase throwing weapon prices (Lici) They were drastically cheaper than wands, despite being arguably better. Up the base price for a javelin to $30 (from $8), boomerangs to $20 (from $5), and large rocks to $15 (from $7). (They're rocks. They can only cost so much.) Also make darts a bit more expensive. -------------------------------------------------------------------------------- 3eed219d4b | Nicholas Feinberg | 2023-01-11 17:43:58 -0800 Simplify SPMSL prices Remove an unnecessary scaling factor. -------------------------------------------------------------------------------- c11e7ae810 | Nicholas Feinberg | 2023-01-11 11:07:21 -0800 Various changelog fixes -------------------------------------------------------------------------------- d6a5dd7a1f | scarf | 2023-01-10 08:06:11 -0800 feat: add electricity cloud trail Add a decorative cloud trail for ball lightning. Resolves #2925. -------------------------------------------------------------------------------- 57b83c3cc8 | scarf | 2023-01-10 07:59:21 -0800 feat: make ball lightning move away from player Resolves #2924. -------------------------------------------------------------------------------- fb9a8591bf | Monkooky | 2023-01-10 07:57:02 -0800 Update description of Pain Pain still exists as a monster spell, and is inaccurately described as causing a minor backlash. This fixes that. -------------------------------------------------------------------------------- 41e54f568c | Nicholas Feinberg | 2023-01-10 07:56:55 -0800 Cleanup vorpal unrands in changelog (ardl) Bloodbane didn't exist, and the others didn't need to be described in such detail. -------------------------------------------------------------------------------- ddc90eaa04 | advil | 2023-01-09 18:04:04 -0500 fix: signal equip_unequip behavior Also, disable selecting unarmed in equip menus when already unarmed, regardless of equip_unequip. -------------------------------------------------------------------------------- 91dd1e5a54 | advil | 2023-01-09 17:46:00 -0500 fix: improve equip/unequip warning behavior * Use menu now handles warnings only for non-equip items * Fix a mistake in a4aca974772 * Handle equip/unequip inscriptions better: they are now checked when any corresponding specific operation gets checked, and warnings are not checked for the general case. * Fix what seems to be a preexisting bug in amulet removal on swap * Explicitly check !u on unwield * Document -------------------------------------------------------------------------------- 0e44632947 | Nicholas Feinberg | 2023-01-09 14:05:54 -0800 docs: changelog through 0.30-a0-619 -------------------------------------------------------------------------------- 120588e8e2 | Nicholas Feinberg | 2023-01-09 12:33:37 -0800 Note light's effect on stealth (MainiacJoe) -------------------------------------------------------------------------------- d6c86c23d0 | Nicholas Feinberg | 2023-01-08 21:40:57 -0800 Remove the species size factor for SH For kite shields, large species got -0.5 SH and kobolds got +0.5 SH. For bucklers, kobolds got +1 SH and spriggans got +2 SH. This almost didn't matter and was very silly. The intent, I believe, was to simulate that shields covered a smaller or larger part of the wearer's body, but we don't really need to have a tiny bonus modifier for that. (It was also, I believe, totally undocumented.) -------------------------------------------------------------------------------- 5a1f34b0d0 | advil | 2023-01-09 00:37:03 -0500 fix: add a missing oper_type name -------------------------------------------------------------------------------- a4aca97477 | advil | 2023-01-09 00:24:26 -0500 fix: no double prompting for jewellery removal I didn't replicate this bug for weapons or armour, this commit should fix the jewellery case. Resolves #2916 (hopefully) -------------------------------------------------------------------------------- b49e76e7eb | nicolae-carpathia | 2023-01-08 21:19:38 -0500 Add a selection of various vaults I've been working on (#2601) * Add two vaults to Dis * Add some generic-threat float vaults * Add a large abstract-threat vault to large_abstract * Add a silly early-game vault to mini_monsters * Add a hydraferious vault to mini_monsters.des * Add a small arrival vault * Add a vault featuring everyone's favorite goblin uniques * Add some trove layouts * Add two more decorative float vaults -------------------------------------------------------------------------------- e5ea1257c2 | Nicholas Feinberg | 2023-01-08 12:31:13 -0800 Make Force Lance always knock targets back 1 space Better tabfeel when you knock something back one space from melee and can now reach to keep hitting em, instead of having to use a throwing weapon or evocable or something. (Ew, gross!) -------------------------------------------------------------------------------- dd512c7efb | Nicholas Feinberg | 2023-01-07 22:10:05 -0800 New early unrand: Force Lance The Force Lance is a Heavy lance (same weapon type as Wyrmbane - a spear with +2 base dam) that has a 1/3 chance of knocking back enemies it deals damage to, sending them 1-2 spaces back and potentially causing extra collision. I've marked it as an early unrand (like Throatcutter, etc) because I'm unsure if its damage really works out for the late game, but it might be quite strong for an early unrand. We can play with the numbers. Yes, this is a pun. I'm not sorry. -------------------------------------------------------------------------------- 150a0467c1 | Nicholas Feinberg | 2023-01-07 21:28:11 -0800 Fix rBlind description (BlurryCent) 0b05bf5e213 (April 2022, PleasingFungus) duplicated functionality for displaying monsters' rBlind added in 0fd21794c30 (October 2014, PleasingFungus). Deduplicate. -------------------------------------------------------------------------------- 5309dc90a7 | Nicholas Feinberg | 2023-01-07 15:58:37 -0800 Clarify Deal Four description (Booper) 'Deal' was an ambiguous term. -------------------------------------------------------------------------------- b513c0a51f | Nicholas Feinberg | 2023-01-07 14:48:41 -0800 Make the slick slippers +1 Just feels nicer. Vibes-based design. -------------------------------------------------------------------------------- 59b6b8e1d4 | Nicholas Feinberg | 2023-01-07 14:41:50 -0800 New unrand: slick slippers The slick slippers make melee attacks from adjacent enemies trample the player, moving both the player and the attacker in the direction of the attack. To help this effect trigger, they provide immunity to constriction, engulfing, netting and webs. Instead of AC, they give +3 EV. They are, like sharks, smooth as heck both ways. They're also very silly. -------------------------------------------------------------------------------- 0e55d2c15d | Kate | 2023-01-07 16:12:53 +0000 Make Shadow Step and Blinkbolt check constriction As with other movement-based abilities (Power Leap, Electric Charge, regular blinks, etc), make using Shadow Step or Blinkbolt count as escape attempts for constriction and cancel the ability on failure. Storm Form is immune to constriction so this isn't actually relevant for Blinkbolt in practice, but add the check anyway in case it becomes possible to Blinkbolt in some other way. -------------------------------------------------------------------------------- 182fdc4e28 | Kate | 2023-01-07 16:12:53 +0000 Adjust Blinkbolt targeting restrictions Don't allow targeting allies or blinking out of mesmerisation/fear. -------------------------------------------------------------------------------- a80edbb7d7 | Nikolai Lavsky | 2023-01-07 15:18:42 +0300 fix: make equip_unequip work again (#2915) After cd1ce1e3b, it wasn't possible to select an equipped item in the unified equip menu even if the `equip_unequip` option was set to true. Closes #2915. -------------------------------------------------------------------------------- b2882149bf | Roadster Tracker | 2023-01-06 22:20:17 -0800 Tweaking spider text labels to be more consistent Fixed #2742, changing front legs to front pincers, which we could also call Pedipalps if we wanted to follow more closely with real anatomy. Venomous is the more commonly used term for things that can poison, and technically is the right term here, so let's be consistent. -------------------------------------------------------------------------------- 56536a0467 | bfaires | 2023-01-06 22:04:56 -0800 Fix: Ref to scroll of ID may break in _identify() Break caused by auto_assign_item_slot() and swap_inv_slots(), when the ID'd item swaps with the scroll of ID. Parameter 'link' is already provided to accommodate this. Mainly, fixing this means scroll of ID will be assigned to its assigned item_slot if it was previously unknown. (Committer's note: simplified the check logic.) Closes #2811. -------------------------------------------------------------------------------- 51a0fb1b98 | Nicholas Feinberg | 2023-01-06 21:50:41 -0800 Tweak demonic crawlers To avoid stalemates, decrease regen by 50% (9 -> 6 HP/turn) and increase damage 25% (16 -> 20). -------------------------------------------------------------------------------- e18489c159 | pdpol | 2023-01-06 21:47:31 -0800 fix: Make a flavor gimmick wand no_pickup -------------------------------------------------------------------------------- ae655ce167 | Nicholas Feinberg | 2023-01-06 19:31:16 -0800 Fix an abyssal Vhi's crash (erf) Very weird. -------------------------------------------------------------------------------- b7c8574cbb | Monkooky | 2023-01-06 14:48:15 -0800 Decouple knockback from beam.cc Moves knockback from beam.cc to actor, removes the reliance of knockback code on an origin spell. (Committer's note: also simplifies messaging for Wind Blast/Nemelex's Storm card and some associated behaviors, e.g. not trying to find a ray path that can push a creature past an obstacle and not handling dispersal trap weirdness.) Closes #2906. -------------------------------------------------------------------------------- 01405fa21b | Aliscans | 2023-01-06 13:25:57 -0800 Add a few missing options to options_guide.txt Add explore_item_greed, messaging, suppress_startup_errors, sounds_on and tc_forbidden to options_guide.txt. Also correct the spelling of trap_item_highlight. -------------------------------------------------------------------------------- d5c1ca3ef2 | Nicholas Feinberg | 2023-01-06 12:29:17 -0800 Make Majin-Bo a one-hander The HP cost (and not having an enhancer staff!) is enough of a tradeoff for the HP vamp effect on this unrand. Few people were going into melee with a +6 vamp quarterstaff, so just make it a one-hander to encourage more use. -------------------------------------------------------------------------------- dfe09d59a3 | Nicholas Feinberg | 2023-01-06 12:27:58 -0800 Reduce Banish fail% Following up on b4a478afbafa2c27c14ee0a351f27461f6865492. Now that Banish is at 2*, make it usable at Invo 4-5 or so, instead of wanting Invo 7-8. -------------------------------------------------------------------------------- 0af90f9a20 | Nicholas Feinberg | 2023-01-05 23:03:50 -0800 Fix vamp drain mirror info leak (Yermak, 12694) Targeting a mirror-clone'd non-rN enemy (eg an ettin mirorred by a rakshasa) with Vampiric Draining would show 'not susceptible'. But you're not supposed to know that! -------------------------------------------------------------------------------- 91969c0fa5 | Nicholas Feinberg | 2023-01-05 18:47:21 -0800 Fix cloud description spacing (Yermak, 12570) There was a missing newline between the desription of opacity and 'clouds of this kind an adventurer makes will vanish quickly...' -------------------------------------------------------------------------------- 8d6c2bfbca | Nicholas Feinberg | 2023-01-05 18:44:35 -0800 Make insubstantial forms web immune (Yermak, 12627) Consistent with monsters, and with 'common sense' (whatever that means). -------------------------------------------------------------------------------- e6437df491 | Nicholas Feinberg | 2023-01-05 18:42:14 -0800 Don't suggest dropping books (Yermak, 12639) Fix a dated oversight in the manual. -------------------------------------------------------------------------------- 36a728ae67 | patrick | 2023-01-05 18:45:15 -0500 Fix some randbook names those damned underscores ;_; -------------------------------------------------------------------------------- 3c58d2bc28 | Nicholas Feinberg | 2023-01-03 16:16:25 -0800 Show spell max damage in descriptions Give players a better idea of what increased power might get em. -------------------------------------------------------------------------------- 0ab68b0ef8 | Nicholas Feinberg | 2023-01-03 16:16:02 -0800 Fix conjure ball lightning damage display Don't randomize it! -------------------------------------------------------------------------------- 1249b68b83 | Nicholas Feinberg | 2023-01-03 15:59:44 -0800 Brand weapon description fixes (ragingrage) -------------------------------------------------------------------------------- 21f81f4b3e | Nicholas Feinberg | 2023-01-03 15:53:09 -0800 Rewrite weapon brand descriptions Move them closer to the damage rating, and provide additional numbers for many brands. This is an attempt to make damage ratings more useful, and clarify that brands are not included in the rating. Remove "+ Flame", etc, from damage rates, since that was more confusing than helpful. -------------------------------------------------------------------------------- fd7c166f36 | hellmonk | 2023-01-03 13:55:14 -0500 fix: Display explosion noise for fulminant prism This is more consistent with other spells and is the most relevant noise value. -------------------------------------------------------------------------------- 23e55c9e0a | Nicholas Feinberg | 2023-01-02 13:06:47 -0800 Cap Will at +++++ (200) I always assumed it was capped here, but that was just a display artifact! (Hex power is capped at 200, so I believe this didn't matter except for WL/2 effects.) -------------------------------------------------------------------------------- 93115170b9 | nicolae-carpathia | 2022-12-31 18:16:51 -0500 Add more entries to randbook.txt (#2896) Add more nouns, adjectives, and gerunds to randbook.txt. Also, alphabetize the spell school nouns/adjectives by spell school. Add new book title formats, new proper names for wizards, etc. -------------------------------------------------------------------------------- e794ca7099 | Nicholas Feinberg | 2022-12-31 15:09:50 -0800 Make Doom Hounds' Howl Will-resistable For consistency with other mental effects, and to make Grunn's Doom Hounds a bit weaker, Doom Hounds' Howl can now be resisted with Will. It's a max (200) power effect, so it has about a 85% chance of hitting folks around 1 pip of will, 67% chance of hitting folks around 2 pips, and 7% at 4 pips. Willpower is halved in Tar, of course, so good luck with that... :) -------------------------------------------------------------------------------- 19bae12e61 | Nicholas Feinberg | 2022-12-31 14:49:15 -0800 Improve doom hound description Clarify explicitly that each one can only inflict Howl on you once, since players may not check the spell description. -------------------------------------------------------------------------------- cd7af8bf02 | Nicholas Feinberg | 2022-12-31 14:43:16 -0800 Add new splash screen (Micah C) -------------------------------------------------------------------------------- 084b5e0cf6 | Kate | 2022-12-31 16:41:11 +0000 Fix a missing ENDMAP -------------------------------------------------------------------------------- 472bc636d8 | nicolae-carpathia | 2022-12-31 10:13:12 -0500 Svaults sfor sbranches (#2632) Add some vaults of all kinds for the S-branches: entry, decor, monstriferous. Thanks to hellmonk and gammafunk for feedback. -------------------------------------------------------------------------------- 71422dec44 | nicolae-carpathia | 2022-12-31 09:58:01 -0500 Add some nostalgic vaults taken/borrowed from Nethack (#2547) Even though I don't play it anymore these days, if I hadn't played Nethack I would never have gotten into roguelikes in the first place, and I would probably have never made even a single vault for DCSS. As tribute to the games of my past, I converted a few vaults (so to speak) from Nethack into DCSS. -Add a Nethack-style shop which has fared poorly in this Dungeon, and an interpretation of Vlad's Tower. -Add a shop vault based on the Nethack Oracle level -------------------------------------------------------------------------------- dee14c521f | Nicholas Feinberg | 2022-12-30 15:48:01 -0800 Remove fast regen from a grab-bag of monsters No idea why slime creatures, bennu, searing wretches, steelbarb worms, starcursed masses, hellwings, or cacodemons had fast regen. It mostly didn't matter, and now it's gone. No compensation. -------------------------------------------------------------------------------- 18c750863f | Nicholas Feinberg | 2022-12-30 15:39:27 -0800 Nerf Demonic Crawler Will (Prakerore) From 100 to 60, to give more options for players to deal with them post-df30a72648cc7404845406d854965524b211e338. -------------------------------------------------------------------------------- 89cddaab80 | Nikolai Lavsky | 2022-12-30 02:13:03 +0300 fix: don't crash when wizmode-blinking into the map border It was possible to move into the map border via the `xm` wizmode command and crash the game. -------------------------------------------------------------------------------- 6f4a10e2d2 | Nicholas Feinberg | 2022-12-29 09:35:57 -0800 New ?acquirement quote (Ge0ff) Plus, rename dril. -------------------------------------------------------------------------------- 4a2fe84c73 | Nicholas Feinberg | 2022-12-29 09:30:50 -0800 Incorporate Heavy into monster damage descriptions xving a monster with a Heavy weapon will now factor the brand into what it can 'hit for up to'. -------------------------------------------------------------------------------- 0687761a96 | Nicholas Feinberg | 2022-12-29 09:28:47 -0800 Truncate Heavy description Try to avoid splitting the damage rating over multiple lines. -------------------------------------------------------------------------------- 9cf5a25fce | Nicholas Feinberg | 2022-12-29 09:28:11 -0800 Fix Heavy on ranged weapons (various) This code was ancient and hacky! -------------------------------------------------------------------------------- df30a72648 | Nicholas Feinberg | 2022-12-28 21:56:58 -0800 Rework demonic crawlers (Lici, acrobat) After the last round of reworks, Spider ended up a little tougher than I'd prefer. One culprit is the screaming demonic crawlers, which call swarms of enemies from all around. These step on bunyips' toes a bit (as fellow S enemies), so let's swap out the screaming (and their omni-resists) for a new gimmick: super fast regen. Like mini-Parghits, demonic crawlers now regen at 9 HP/turn, meaning that burst damage is needed to take them down. Let's try it out and see how it plays. -------------------------------------------------------------------------------- 486de37d69 | patrick | 2022-12-28 14:16:42 -0500 Edit quotes.txt some more Add two new quotes, move a recently-added quote, and edit punctuation in an existing quote. -------------------------------------------------------------------------------- 58aec57eca | advil | 2022-12-28 09:54:40 -0500 fix: disable misc from acquirement Reverts a change in 8e341f0f67. It seems that enabling misc also enables wands, which was unintentional. ...and weird, it looks like that'd lead to 1.5 weighting of wands in dungeon acquirement, and 0.5 of misc? see _find_acquirement_subtype -- I suspect the random_choose there should be removed. But I don't have time to investigate right now so I'm just going to revert. -------------------------------------------------------------------------------- 124715a40b | Nicholas Feinberg | 2022-12-27 22:31:28 -0800 Add a few missing quotes -------------------------------------------------------------------------------- f7fd966b4a | patrick | 2022-12-27 21:25:34 -0500 Make changes to nicolae_shop_unique_rings after the EV ring changes The One-of-a-King Ring store is getting some inventory changes for the new year. Making room for the 2023 models and all that. * Adjust the ranges of evasion rings. They used to be 1-3 for the worse ones and 5-7 for the better ones. Now that they're +5 by default, and Hare is now +10, the ranges are 1-4 for the worse ones and 6-9 for the better ones. * Tweak the variance on some of the other plus rolls. * Add comments. -------------------------------------------------------------------------------- 7d635642ba | Nicholas Feinberg | 2022-12-27 17:38:39 -0800 Fix up other evasion rings post-buff (nicolae) -------------------------------------------------------------------------------- e6aed4c269 | Nicholas Feinberg | 2022-12-27 15:48:52 -0800 Improve Lugonu Abyssal conversions Make Lucy altars a bit more than 3x as common in the Abyss, and give those who convert in the Abyss an instant 2*. This is intended to make conversion more enticing, without making getting Lugonu from a faded altar stronger. More general Lugonu buffs are still under consideration. -------------------------------------------------------------------------------- f5d82afd56 | Nicholas Feinberg | 2022-12-27 15:48:52 -0800 Protect Fedhasites from opp attacks (CarefulOdds) Moving out of a plant should follow the same logic as swapping with an ally - either way, adjacent foes can't follow to the same square you were just in, so they shouldn't get a chance to launch an opportunity attack on you. -------------------------------------------------------------------------------- c7247dd3ff | Nicholas Feinberg | 2022-12-27 15:48:52 -0800 Buff rings of evasion slightly Move 'em from +4 to +5. The former value stacked up poorly compared to other common rings, like AC and even Dexterity. -------------------------------------------------------------------------------- 4ce571a2c8 | Nicholas Feinberg | 2022-12-27 15:48:52 -0800 Clarify Vhi/MA casting speed -------------------------------------------------------------------------------- 1b0378597e | Nikolai Lavsky | 2022-12-27 21:25:09 +0300 fix: don't let monsters block attacks with an orb (u/kuniqsX) Due to a missing subtype check, orbs gave monsters an ability to block attacks. Big monsters with high HD received an especially large shield bonus from orbs. A frost giant could get up to 17 SH from a +0 kite shield, 23 SH from a +0 tower shield, and 38 SH from any orb. Reported in https://www.reddit.com/r/dcss/comments/zu9xl3/orbs_block_things_for_monsters/ -------------------------------------------------------------------------------- ef2d420e60 | advil | 2022-12-27 12:07:31 -0500 fix: quiet a platform-specific warning `%llu` is not guaranteed to line up with `uint64_t`, so use the correct printf specifier. (Seen in CI builds.) -------------------------------------------------------------------------------- 1df383f42f | advil | 2022-12-27 12:07:31 -0500 fix: local tiles glyph mode animations Noticed by Aliscans in #2904, but this warning was a symptom of a bug, not a false positive. Without these calls, zap animations don't display in local tiles glyph mode. -------------------------------------------------------------------------------- fc1376df4e | Nikolai Lavsky | 2022-12-27 14:23:41 +0300 fix: add a uselessness check for scrolls of brand weapon Similar to scrolls of enchant armour/weapon, consider scrolls of brand weapon to be temporarily useless if the player doesn't have a weapon to brand. -------------------------------------------------------------------------------- e2afbf3030 | hellmonk | 2022-12-26 19:13:12 -0500 Increase steam breath cooldown It's arguably the strongest draconian breath. Unclear why it had half the cooldown of the others. -------------------------------------------------------------------------------- 0a0f5a245f | Antanishin, Ernest | 2022-12-26 17:02:00 -0500 fix: highscore line buffer length enlarged from 1300 to 1500. -------------------------------------------------------------------------------- c8b2f71149 | Nicholas Feinberg | 2022-12-26 13:47:40 -0800 Replace Vorpal with Heavy (bitdizzy, hellmonk) Vorpal is a pretty bland brand. It's just more damage, everywhere, all the time. It's often fine but never exciting. So let's swap it out for something else I wanted to add anyway. Heavy is a new brand that increases weapon delay by 50% (the opposite of Speed), but increases weapon base damage by 80%. (This then gets multiplied by stats, skills, etc.) It works differently from Vorpal, Flaming etc because, if it was a post-AC effect, it would be utterly terrifying in monsters' hands. It's also much easier to display to players as a pre-AC effect - it'll show up properly in damage rates. Various unrands have been adjusted as appropriate. Currently the only ones that keeping Heavy are Sniper and the Dark Maul (with some tweaking), but it feels like there should be another good Heavy unrand design out there somewhere. The idea is that this should feel fun to use (big impacts per keypress), but should also be a bit scary (potentially multiple enemy actions per attack). It's very good against monsters with high AC, but quite bad if you're depending on auxes or slaying for damage. It's a land of contrasts. Let's try it out! -------------------------------------------------------------------------------- e4bbf75661 | advil | 2022-12-26 16:16:42 -0500 fix: quiet some gcc warnings (Aliscans) In the case of the `aux` parameter here, this now seems to be completely unused, so I have removed it rather than commented it out. -------------------------------------------------------------------------------- 7fabdf1491 | hellmonk | 2022-12-25 22:23:23 -0500 remove a gimmick entry vault It was a source of endless new player confusion and only had one exit. -------------------------------------------------------------------------------- 68bb171944 | advil | 2022-12-25 21:34:12 -0500 fix: handle vs and curing uselessness Followup to 41eeaaa. The problem was not the ailment check, but that the call to you.can_potion_heal with temp set to false would lead to !curing being marked as perma-useless to Vs. This commit refactors the logic to be clearer, since every species that can drink at all should be able to use curing (as far as I can see). -------------------------------------------------------------------------------- 8e341f0f67 | advil | 2022-12-25 21:25:41 -0500 feat: remove staves/misc from acquirement if fully id'd All acquirable items from both classes are now pointless to give if they've been seen before. Previously for misc types, this didn't matter much, as this was only used in troves (see 148af02efdf0ad). I did decide to put misc items back in regular acquirement circulation, with this check: the circumstances have changed quite a bit since 148af02efdf0ad and it seems to make sense to give previously unseen misc items. I don't feel strongly about this part of the commit, though. -------------------------------------------------------------------------------- ea934af5c9 | advil | 2022-12-25 21:17:41 -0500 fix: correct bounds for two checks against get_max_subtype `get_max_subtype` returns one past the max valid subtype (e.g. `NUM_WEAPONS`), correct the comparison operator in two ASSERTs. -------------------------------------------------------------------------------- fb95710a5e | advil | 2022-12-25 21:17:41 -0500 fix: don't try to acquire staves under sac hand (Monkooky) A non-fo char with a missing hand could still cause SK_STAVES to be rolled as a weapon acquirement skill, but then all weapon types for the skill would be useless or acquirement weight 0 (WPN_STAFF), causing the reservoir sampling line to never run at all, leading to a crash. The effect would be increased by staves skill, but probably possible on all sac hand chars. This code adds a (somewhat elaborate) check for this case, preventing most sac hand chars from getting staff weapons via acquirement. (I think it probably prevents staff unrands as well, which would be usable in principle -- probably fine?) Also, add an ASSERT specifically for this reservoir sampling failure case, and add some baseline acquirement testing to the makeitem test. The new test wouldn't have actually caught this case, but I think it might have caught a different recent issue, and it's still useful for hand debugging of acquirement (by modifying the setup code). -------------------------------------------------------------------------------- 74b111d446 | advil | 2022-12-25 21:17:41 -0500 fix: use correct var in an acquirement assert `type_wanted` here is subtype, not base_type, so this check was wrong and also mismatches the ASSERT in is_useless_item. -------------------------------------------------------------------------------- f74bfe16ba | hellmonk | 2022-12-25 20:52:32 -0500 fix: Always stop constriction under paralysis Fixes issue #2801. -------------------------------------------------------------------------------- 41eeaaa9f6 | hellmonk | 2022-12-25 20:27:11 -0500 fix: remove an erroneous uselessness check This was preventing vine stalkers from quaffing curing while poisoned or confused. It also applied to robe of vines, I think. -------------------------------------------------------------------------------- ee59754557 | hellmonk | 2022-12-25 20:09:03 -0500 Adjust summon mana viper Scale HP with HD like normal (for simplification) and start it 1 HD higher. This should be fine now that the summon cap is 1. HP breakeven is at 48 power. -------------------------------------------------------------------------------- 09da2da527 | hellmonk | 2022-12-25 19:54:24 -0500 remove confusing touch to-hit bonus Intended as a simplification more than a nerf, it used dex rather than power (weird). Can buff the spell in other ways if this makes a big difference. -------------------------------------------------------------------------------- c507713703 | hellmonk | 2022-12-25 19:52:47 -0500 reduce discharge self damage -------------------------------------------------------------------------------- e43150dd35 | Nikolai Lavsky | 2022-12-25 21:04:33 +0000 fix: don't visit item piles with useless glowing or artefact items On default settings, greedy explore travels to and stops at all piles of glowing or artefact items even when the items are useless for the character. This leads to a lot of unnecessary autoexpore interruptions for species with gear restrictions, especially for octopodes and felids. After this commit, greedy explore will ignore useless items if `explore_greedy_visit` is set to `artefacts` and/or `glowing_items` (the default). If it's set to `stacks`, explore will visit all piles, as before. -------------------------------------------------------------------------------- 4038c81314 | Nikolai Lavsky | 2022-12-25 21:04:33 +0000 fix: revisit item piles only if their size increases After df645b4c5, autoexplore visits all piles with glowing items or artefacts even when the piles don't have anything for autopickup. If the character encounters an already visited pile that has changed in size, autoexplore will travel to it again. If the stack's size has increased, there might be new interesting items. Otherwise, there is usually no reason to recheck a pile. Most of unnecessary pile revisits happen due to corpse decay, but they can also be caused by the player apporting items from piles or by Jiyva jellies eating items. After this commit, autoexplore won't revisit item piles after they get smaller. -------------------------------------------------------------------------------- 0af01429fa | advil | 2022-12-24 18:31:30 -0500 fix: mark a static (Aliscans) -------------------------------------------------------------------------------- cd1ce1e3ba | advil | 2022-12-24 18:08:58 -0500 feat: add a generalized unequip menu This moves the take off and remove popups to use UseItemMenu, and adds a general unequip pane to that menu. This new pane can be accessed via CMD_UNEQUIP, bound right now to `c` as the only free letter. There was various refactoring and tweaking in this commit to enable this, and these actions are now triggerable via use_an_item with the appropriate operatio value. Aspirational notes: * it might be better to connect the equip menus with the unequip menus somehow. Maybe allow unequipping from the equip menu? The easiest thing here would just be another hotkey that swaps between the two. * It would be really great if error messages for equip/unequip would show in this menu somehow. Unfortunately, they are all directly printed all over the place via mpr, so this is a bit involved to get going. Misc notes: * I moved a lot of the error messaging onto MSGCH_PROMPT. I'm not sure if this or the regular channel is really better, but this was very inconsistent before. Seems likely to still be inconsistent. * I marked jewellery as temp useless when in a form that doesn't allow it; this is for consistency with weapons/armour, which are already marked this way. -------------------------------------------------------------------------------- 7acccb668d | advil | 2022-12-24 18:08:58 -0500 feat: unified equip menu This adds a pane to the use item menu that shows all equipable items (weapons, armour, jewellery) and binds the new CMD_EQUIP to `e`. With this change comes a relatively big refactor of the use item code, both to clean up some of the messiness in 5a63ccc183, and just generally have more uniform codepaths. Some of the old api could perhaps be further removed / cleaned up, e.g. a lot of these functions probably shouldn't take an `item_def *` any more. Aside from the new command / menu features, this refactor isn't intended to change equipping. -------------------------------------------------------------------------------- 6c4b56ed3b | advil | 2022-12-24 18:08:58 -0500 refactor: separate weapon swap from regular wield code This code was smushed into one somewhat confusing function, despite the inputs and logic being fairly different. I'm pretty sure I've correctly detached them.. -------------------------------------------------------------------------------- df6ecd2dc0 | advil | 2022-12-24 18:08:58 -0500 refactor: simplify `wield_weapon` signature This function had a bunch of legacy unused parameters (one was still used, but only in now dead code). Simplify. -------------------------------------------------------------------------------- 2c0b3469a7 | Nikolai Lavsky | 2022-12-24 19:11:46 +0300 docs: update some links in the new developer docs -------------------------------------------------------------------------------- dc55766716 | Nicholas Feinberg | 2022-12-23 22:39:42 -0800 Welcome nlavsky to the devteam Cheers! :) -------------------------------------------------------------------------------- 4794bfbd1c | Nicholas Feinberg | 2022-12-23 13:44:20 -0800 Fix: don't claim the autumn katana is vorpal Broken since 5f824d10e6f (13+ months ago). -------------------------------------------------------------------------------- 27a1dae89b | Nicholas Feinberg | 2022-12-23 13:35:04 -0800 Rework Mad Mage's Maulers Make them more exciting for hitting things with by replacing regenMP (+0.4 MP/turn) with VampMP, which turns damage done in melee into MP. (Currently 1/8th of damage done, but I'll probably adjust that.) Make them even more appealing to melee brutes by replacing the Int-3 (which is potentially dangerous to low-int characters) with -Cast. -------------------------------------------------------------------------------- b4a2863f8f | Nikolai Lavsky | 2022-12-23 11:42:43 -0800 fix: make autoexplore wait for movement restrictions to expire If you wear an amulet of magic regeneration, it's possible to cast Momentum Strike and then restore MP before -Move times out. Pressing `o` will just print "You cannot move." and you'll have to use `5` or `.` to rest -Move off. Fix this by making autoexplore wait for -Move to expire before attempting to move. Tree form and Stuck status from Translocations miscasts also prevent autoexplore, so let's fix these cases too. -------------------------------------------------------------------------------- a9c6de93fa | RypoFalem | 2022-12-23 11:40:40 -0800 fix fsim with ranged weapons Use fake projectiles rather than whatever you're quivering -------------------------------------------------------------------------------- 946936b853 | advil | 2022-12-23 10:36:23 -0500 fix: remove butchering and destroying(??) -------------------------------------------------------------------------------- 8c47a4955b | Nicholas Feinberg | 2022-12-22 20:39:11 -0800 Fix Toxic Bog + Step from Time (#2749, Monkooky) Per the comment, end the toxic bog status when doing Chei's step from time or temporal distortion. The linked issue suggests also disabling L's Liquefication, Mark, and Mesm, but I unfortunately disagree. Mark is a status on the player, like any other duration, and stepping from time doesn't affect those. Ditto liquefication, which follows the player around. Mesm is more ambiguous, but if the mesmerizer is still around when the player returns from their step, they should still be affected. Fixes #2749. Closes #2893. -------------------------------------------------------------------------------- d44aff7e82 | Nicholas Feinberg | 2022-12-22 20:30:21 -0800 Checkwhite -------------------------------------------------------------------------------- 68f495328a | Zhang Kai | 2022-12-22 20:29:57 -0800 Update monsters.txt To make the words more uniform and the sentences more smooth, and adapt to line character limit -------------------------------------------------------------------------------- 10769c07a2 | Zhang Kai | 2022-12-22 20:29:52 -0800 Update spells.txt Update, make the words more uniform and the sentences more smooth, and adapt to line character limit. -------------------------------------------------------------------------------- 807956db86 | Zhang Kai | 2022-12-22 20:29:40 -0800 Update gods.txt Update, make the words more uniform and the sentences more smooth. -------------------------------------------------------------------------------- 18dac8f90a | Zhang Kai | 2022-12-22 20:29:34 -0800 Update ability.txt -------------------------------------------------------------------------------- 1eefe1720f | Zhang Kai | 2022-12-22 20:29:30 -0800 Create mutations.txt -------------------------------------------------------------------------------- 01a5972819 | Zhang Kai | 2022-12-22 20:29:25 -0800 Update spells.txt Update, make the words more uniform and the sentences more smooth, and adapt to line character limit. -------------------------------------------------------------------------------- b4612467ca | Zhang Kai | 2022-12-22 20:29:18 -0800 Create FAQ.txt -------------------------------------------------------------------------------- 906f8a8453 | Zhang Kai | 2022-12-22 20:29:09 -0800 Create help.txt -------------------------------------------------------------------------------- b5a9a196e2 | Zhang Kai | 2022-12-22 20:28:44 -0800 Create monflee.txt -------------------------------------------------------------------------------- f0747e9c1c | Zhang Kai | 2022-12-22 20:28:06 -0800 Create montitle.txt -------------------------------------------------------------------------------- 18619c1dc1 | hellmonk | 2022-12-22 20:27:10 -0800 remove invisibility from chaos effects It's a very annoying interface tax without sinv. To replace it, increase the odds of agility for the beam version and add a chance of resistance for both beam and attack flavor versions. -------------------------------------------------------------------------------- c876ba1704 | Nicholas Feinberg | 2022-12-22 20:25:46 -0800 Adjust stash.cc formatting for readability -------------------------------------------------------------------------------- 9bd54e8edc | pdpol | 2022-12-22 20:25:31 -0800 feat: Filter out useless altars from stash search -------------------------------------------------------------------------------- 663962266a | Nicholas Feinberg | 2022-12-22 18:30:18 -0800 Bump Heroism and Finesse ability costs Having Heroism be extremely cheap meant you basically wanted to use it for any even slightly threatening fight, which isn't awful, but isn't the most exciting thing ever, either. Since we want to pull Okawaru's strength back a bit toward other gods', increase Heroism's piety cost from 1 to 3-4, making it more suitable for threatening encounters. Raise Finesse's cost correspondingly, from 3-4 to 5-7. -------------------------------------------------------------------------------- 913f7af9ec | Nicholas Feinberg | 2022-12-22 18:25:49 -0800 Don't show .s for low stealth Falsely implies to players that replacing all your . with + means you've capped out on stealth. (There is no cap on stealth.) This looks a little weird at very low stealth, but let's try it out anyway. -------------------------------------------------------------------------------- 0d9051e15b | advil | 2022-12-22 15:06:41 -0500 refactor: consolidate potion uselessness code Previously, potion uselessness was handled in a superficial way by a bunch of checks in item-use.cc, and then in a much more fine-grained way on the actual quaff calls. The latter didn't expose the messaging to be usable elsewhere (as scrolls now do), and wasn't fully consistent with the other uselessness code. This commit refactors so that the potion code overall uses the same strategy as scrolls, except that this is plumbed directly into the `can_quaff` checks in potion.cc. * Expand temp uselessness to match almost exactly when potions won't work. This does now mark e.g. !heal as temp useless at full hp and so on, which could be annoying. (nlavsky was worried about making the action panel too flickery with some of these cases.) If so, I'd rather have the general case working and then special case what ui needs further changes. A few weird cases: brilliance no longer works under Trog, before it worked but its effects only matter if you cased. !invis still works when temp useless with an override, and I've fixed some of these cases. It's possible that effects prevented by armour (robe of folly, robe of vines) should be perma-useless? But generally that's not how we handle equip. * Show uselessness reasons in item descriptions. * Fix some corner cases: invis while wielding eos, !magic with full mp, curing with full hp and nothing to cure, brilliance with folly (prev marked as useless but drinkable), some flight check issues * Overall message consistency -------------------------------------------------------------------------------- 799d0685e7 | advil | 2022-12-21 19:55:42 -0500 refactor: adjust scroll uselessness reasons * Move `cannot_read_item_reason` to the same file as `is_useless_item` (not sure I care hugely which file they should be in, but they should be together). * Expand out perma-uselessness reasons. Everything should be covered now, and the function has an explicit `temp` param. * Reason priority should be better, and every scroll should show a reason in its description if temp or perma useless. * Various minor tweaks. One awkward case: after this commit, amnesia no longer works under Trog. Before, it worked, despite being marked as perma-useless. This could probably be overridden if necessary. -------------------------------------------------------------------------------- d016549fea | advil | 2022-12-21 16:26:10 -0500 Merge branch 'android' This at long last merges #1892 plus a few tweaks, mainly to CI and documentation. Resolves #1892 -------------------------------------------------------------------------------- f32fc37df5 | advil | 2022-12-21 13:43:33 -0500 docs: notes on command line android builds This is still a bit sketchy, as I never really got this to run all the way through (due to issues in my android build setup, as far as I can tell). However, I think there's enough here to get someone going. Eventually, it would be useful if someone added explicit fully replicable linux steps here using apt. (Unfortunately, my experience on mac was that the package manager based approaches I tried were horrendously broken, so I gave up on describing that exactly.) -------------------------------------------------------------------------------- 92a8e1e1ec | advil | 2022-12-21 13:43:04 -0500 fix: mac ccache location in CI -------------------------------------------------------------------------------- 89d08c6997 | advil | 2022-12-21 13:07:00 -0500 fix: update CI ccache location Since ccache 4.0 (2020-10-18), ccache changed the default location for the cache based on the XDG base directory specification. I'm not sure when this started appearing on our CI runners, but it appears that as of right now it has completely broken ccache saving. This commit should get the correct location. -------------------------------------------------------------------------------- cea3e4f894 | advil | 2022-12-21 12:16:45 -0500 build: ccache debugging info -------------------------------------------------------------------------------- 7ea5a21d01 | advil | 2022-12-21 11:09:24 -0500 build: another try at ccache I think this is unlikely to work, but we'll see... -------------------------------------------------------------------------------- 330ca2eb8e | advil | 2022-12-20 09:40:43 -0500 fix: maybe fix console build -------------------------------------------------------------------------------- 03497ec522 | Nicholas Feinberg | 2022-12-19 15:19:12 -0800 Remove MONS_NO_MONSTER from Orc spawn tables Fixes weird cases where Orc could spawn no monsters. Total monster count / XP drops by 3-5%, which is within margin of error. We can tweak a little more later if need be. -------------------------------------------------------------------------------- 5673dd7ce6 | Nicholas Feinberg | 2022-12-19 14:23:14 -0800 Enable Grinch Mode Allow players to opt out of the new holiday tiles, plus Halloween. -------------------------------------------------------------------------------- de979b18e0 | Nicholas Feinberg | 2022-12-19 14:23:14 -0800 Add cozy, easy-to-wear holiday hats (Sastreii) Downside: constant jingling gives -3 stealth. -------------------------------------------------------------------------------- ecbe3e46b9 | Nicholas Feinberg | 2022-12-19 14:23:14 -0800 Give Sigmund some holiday spirit (CanOfWorms) -------------------------------------------------------------------------------- c78de03d82 | advil | 2022-12-19 14:25:10 -0500 build: attempt to enable ccache for android This is a bit of a shot in the dark.. -------------------------------------------------------------------------------- 4f163fc199 | advil | 2022-12-19 10:44:05 -0500 build: cut a job from CI This seems like the most pointless of the current build matrix; I don't think anything is gained by testing these options in combination that won't be handled by the individual cases. -------------------------------------------------------------------------------- 6ac2e24f95 | advil | 2022-12-19 10:36:20 -0500 build: remove a duplicate CI job Seems to have been accidentally duplicated a couple years ago. -------------------------------------------------------------------------------- 367de1291c | advil | 2022-12-19 10:25:39 -0500 build: tweak CI order for android I'm pretty sure ccache is not working properly for the gradle build, this is an attempt to get more info. -------------------------------------------------------------------------------- 05911a2283 | advil | 2022-12-19 10:05:47 -0500 docs: add a note about android to INSTALL.md This could probably stand to have a bit more detail, but I don't understand this build process enough for that. -------------------------------------------------------------------------------- a54866c054 | advil | 2022-12-18 19:06:01 -0500 Merge branch 'master' into android -------------------------------------------------------------------------------- 84de5afbc5 | Josh Braendel | 2022-12-18 12:32:03 -0500 fix c++ warning [committer's note: renamed `copy`, since it doesn't have the semantics of std::copy. This is structured like the copy and swap paradigm, but this function isn't really a swap function; it's possible there's a more idiomatic c++ way of doing this whole thing, but FixedArray is not very idiomatic c++ in the first place. Resolves #2861] -------------------------------------------------------------------------------- 647bc5cc63 | advil | 2022-12-18 11:32:21 -0500 fix: explicitly cast ghost colours to int This prevents a warning in gcc. This probably means the related commit in #2861 is unnecessary, though the sign issue still remains, as detailed by the comment here. I spent a while trying to figure out how to disable this warning, but when I looked into the details of this exact bit of code, I think gcc was right to warn. -------------------------------------------------------------------------------- 47a42acea8 | advil | 2022-12-18 10:40:42 -0500 fix: correctly handle monsterless branches -------------------------------------------------------------------------------- fa4925f201 | advil | 2022-12-18 10:07:03 -0500 fix: remove a constraint from 4188047c905 This can (in principle) happen in lair as well, no reason to restrict this check to orc only. (I think I had this in for testing reasons and forgot to remove it.) -------------------------------------------------------------------------------- 8901f6c8b5 | gammafunk | 2022-12-16 17:15:27 -0600 feat: Some tweaks to three lair vaults pdpol_lair_cabin_in_the_woods: Give the human survivor some passable gear. A good_item war axe and lower tier good_item armour won't grant a lot loot value but will make this human slightly less trivial to defeat. Not to the extent that it's likely to kill a player, but it should make fighting the survivor a little more thematic. Replace the lua block with a simple KMONS with a fallback definition. Simplify some of the SUBST weights, and reglyph to put monsters on the usual glyphs and terrain on glyphs not reserved for item slots. pdpol_lair_cavern_descent: Rebalance monster placement to reduce the overall monster count, since it was pretty high for such a small and relatively open vault. Reglyph to put monsters in rough order of difficulty and simplify statements. For pdpol_lair_neglected_garden, a minor weight simplification. -------------------------------------------------------------------------------- 42e7360d12 | pdpol | 2022-12-16 16:59:44 -0600 Some monsters vaults and a decor vault for Lair pdpol_lair_neglected_garden: Someone hasn't taken care of their garden, but occasionally it takes care of itself. A decor garden vault with a withered theme that sometimes has healthy plants instead. pdpol_lair_cabin_in_the_woods: A horror-themed runed door vault inspired by The Evil Dead. pdpol_lair_cavern_descent: A descent into a watery cavern featuring eels and a variety of Lair monsters. Committer's Note: Squashed and rebased from commits in PR #2794. Added the commit message with a brief summary for each vault. Removed the pdpol_lair_dawg_pound vault in the original submission, since pdpol may rework that one or it just won't be merged. -------------------------------------------------------------------------------- 4188047c90 | advil | 2022-12-16 16:41:46 -0500 fix: veto levels where very few monsters are placed Probably the most important case here is 0, but I went with 3 because that is a lower bound on `_num_mons_wanted()`. -------------------------------------------------------------------------------- d5975efbca | Nicholas Feinberg | 2022-12-15 11:08:39 -0800 Fix momentum strike not giving XP (acrobat) Oops! -------------------------------------------------------------------------------- 5ca811292f | Alex | 2022-12-15 10:53:53 -0500 build: harden ci.yml permissions Signed-off-by: Alex -------------------------------------------------------------------------------- 3668837a89 | Nikolai Lavsky | 2022-12-15 10:25:44 -0500 fix: show perma uselessness in shop and shopping list menus The menus have been showing temp uselessness of items for a long time. For example, potions of invisibility were greyed out for characters with enough magic contamination even in previous versions. As a followup to 43e804b48, use perma-uselessness highlighting for these menus. -------------------------------------------------------------------------------- 9104f0fc43 | advil | 2022-12-14 14:36:46 -0500 fix: show misc evokables in quiver menu These appears to have gotten dropped via cut and paste error in cc732e7c341debec790. -------------------------------------------------------------------------------- 86641cc369 | Nikolai Lavsky | 2022-12-13 08:14:54 -0500 fix: don't leak usefulness of unidentified scrolls (#2877) After 4b7bca3bf, unidentified perma-useless scrolls are greyed out in the read menu. This affects ?butterflies and ?summoning for followers of Okawaru and ?teleport and ?blinking for Formicids. Also, it's not possible to read-identify permanently useless scrolls. Fix this by checking perma-uselessness only of identified scrolls. Closes #2877. -------------------------------------------------------------------------------- 4b7bca3bfa | advil | 2022-12-11 16:13:59 -0500 fix: adjust more cases of perma vs temp uselessness * Butterflies and summoning should be treated as perma-useless if allies are forbidden (either by oka or by ru). * blinking/tele should be treated as perma-useless for formicid. This also adjusts some of the scroll reason logic. I think this whole code path could stand to be refactored so that the temp parameter is propagated into the reason-generating code, and more perma-uselessness reasons are provided. But for now, I have done some hacky brute force checks to get this right, as well as reorded some of the reason priorities. -------------------------------------------------------------------------------- 2e3cb7ea4d | advil | 2022-12-11 15:36:16 -0500 feat: show usability for scrolls/potions in description The quality of scroll info here is a lot higher, because of the existence of `cannot_read_item_reason`. Cancellation already had some existing special casing, so I have included an informative message for it, but no other potions will print a reason as of this commit. To a lesser extent, this kind of info may also be useful for evokables, and perhaps other items too. -------------------------------------------------------------------------------- 9b11ac4179 | advil | 2022-12-11 14:31:02 -0500 fix: mark !cancellation as temp useless if it won't do anything The messaging and even item description was already handled for this case, this just gets coloring in quaff and the action panel. -------------------------------------------------------------------------------- b9dab8fb20 | advil | 2022-12-11 12:16:36 -0500 fix: further clean up the clumsy throwing check This shouldn't change behavior as far as I'm aware. The item type check is already covered (in a rather roundabout way) via the `throwing()` call, and is_throwable already takes an actor, so there's no need for player-specific code. -------------------------------------------------------------------------------- 03f49bf3ed | advil | 2022-12-11 11:02:53 -0500 fix: unnerf launching Bug introduced in 9e567866badc7; silly me for thinking that `clumsy_throwing` would only be checked for throwing. Resolves https://crawl.develz.org/mantis/view.php?id=12714 -------------------------------------------------------------------------------- 9e567866ba | advil | 2022-12-11 09:11:50 -0500 fix: nerf throwing This removes a pretty good tech reported in #2874 by acrobat. Via quiver, and also throw with the "toss anything" submenu, all species could do damage throws with any throwing ammo. I think this even probably prevented mulching. The bug originates in a8e9c987b86ad, which replaced a specific fumble check in ranged-attack.cc with an item type check. Resolves #2874 -------------------------------------------------------------------------------- e042605de7 | Nicholas Feinberg | 2022-12-10 17:36:22 -0800 Make ?butterfly weight match ?summoning (Prakerore) Oops! -------------------------------------------------------------------------------- cec5606451 | advil | 2022-12-10 20:33:05 -0500 fix: show classy draconians' flight Really, show flight for black draconian knights (nothing else gets flight). But, generality! Resolves #2752 Resolves #2770 -------------------------------------------------------------------------------- b646966af9 | Nicholas Feinberg | 2022-12-10 17:31:49 -0800 Make ?butt alternate with ?summ instead of ?fog To avoid inventory clutter, when ?butterflies were added, they were set up to alternate with ?fog - each game would only contain one or the other. This made sense to me conceptually, as both were 'defensive' items - you could protect yourself from a d:4 centaur by reading ?fog or by reading ?butterflies, and both would have advantages and disadvantages. Each has situations in which it's preferable, which is good! However, ?fog's niche is a bit more unique, especially in extended. So, let's change up the alternation: ?butterflies will now alternate with ?summoning. We'll see how this plays. -------------------------------------------------------------------------------- 7f7f6b1b85 | Nicholas Feinberg | 2022-12-10 17:31:44 -0800 Replace Cigotuvi's summoning scrolls with poison They only had summoning scrolls because summoning scrolls used to be 'scrolls of unholy creation', which created a thematically appropriate small abomination. Since those were replaced in a6578962e0 (almost a decade ago), summoning scrolls have been out of theme for Cigo's wizlab. Replace em with poison scrolls, which feel vaguely OK. -------------------------------------------------------------------------------- 9651f06ebd | Samantha Tobias | 2022-12-10 19:46:42 -0500 fix wizlab wizards "come into view" message (Flugkiller) Wizlab wizards did not have the M_UNIQUE flag, which caused them to get displayed in "come into view" messsages as "a " instead of "". this only happened when they came into view along with other monsters. This fixes the issue by giving them the M_UNIQUE flag. Resolves #2738 -------------------------------------------------------------------------------- 43e804b486 | advil | 2022-12-10 19:03:21 -0500 feat: tweak when temp uselessness is shown After this commit, items get temp useless highlighting in: * use item menus (e.g. quaff, read) * action panel Elsewhere, they should receive perma-uselessness highlighting, including: * inv menu * pickup/drop * drop messages * known item menu * stash search I changed `menu_colour_item_name` absolutely in order to get the drop message case, so this may have some further consequences. It's possible there's still missed cases. -------------------------------------------------------------------------------- 92f4fb2d71 | Nicholas Feinberg | 2022-12-10 12:08:47 -0800 Don't warn when zappin your spectral (Aoae, acrobat) You don't take damage when damaging your own spectral weapon, so don't bother warning about doing so with Arcjolt, Chain Lightning, Static Discharge, etc. -------------------------------------------------------------------------------- 87402fac92 | Nicholas Feinberg | 2022-12-10 12:01:17 -0800 Fix 'sink to the bottom' messages (elliptic) Creatures that can swim shouldn't sink to the bottom. -------------------------------------------------------------------------------- cbdd7f1727 | Nicholas Feinberg | 2022-12-10 11:55:08 -0800 Rewrite monster net immunity code For consistency with players in tree-form getting netted, let stationary monsters with melee attacks be netted. (In practice, I think this just affects... training dummies & the new abyssal starflowers?) -------------------------------------------------------------------------------- baa0261540 | Nicholas Feinberg | 2022-12-10 11:55:08 -0800 Don't allow Mighting monsters with no attacks Seems a bit pointless. -------------------------------------------------------------------------------- 4e368e6683 | Nicholas Feinberg | 2022-12-10 11:55:08 -0800 Allow applying Haste and Might to statues Probably Might should have a check for only affecting monsters with attacks. -------------------------------------------------------------------------------- d6ef553a8b | advil | 2022-12-10 09:46:51 -0500 build: comment and improve util/find_font This is in response to: https://github.com/crawl/crawl/pull/1367/commits/53545380446f6c79db6221757b9bb63 b4259b878 That commit is wrong, because fc-match always tries to return something, and if dejavu isn't installed, it will return something completely wrong e.g. verdana. Also, it seems to have a false premise that this script wasn't searching fontconfig directories -- because of the use of fc-list, it does search whatever fontconfig directories are around (and I've tested it out with macports' custom directories). However, this wasn't very apparent on a casual read of the script, so I've added a bunch of comments to clarify, and improved the fc-list call a bit. The addition of "-L" here is from: https://github.com/NixOS/nixpkgs/blob/master/pkgs/games/crawl/crawl_purify.patch It seems useful + safe enough to include for everyone. (That patch also seems to have the false premise re fontconfig? So I've added comments to head off the unnecessary change they included there.) -------------------------------------------------------------------------------- 9e77e4d916 | pdpol | 2022-12-09 16:55:51 -0500 fix: adjust monser placement in wad_wood_setup. An absdepth conditional was placing a harder monster set at shallower depths. This flips the condition, and also makes the transition point L:3 instead of L:4, which I think seems in line with the recent reduction to 5 floors. -------------------------------------------------------------------------------- 37d5509b11 | Perry Fraser | 2022-12-09 16:53:25 -0500 Add asserts for valid weapon subtypes for ?acqs. -------------------------------------------------------------------------------- bbba3d4eb4 | Perry Fraser | 2022-12-09 16:53:25 -0500 Don't crash when generating slings for ?acqs There was a rare crash that could occur when reading a scroll of acquirement where, when choosing a weapon, the now-defunct slings skill would be picked for the kind of weapon that should be generated. Specifically, _acquirement_weapon_subtype would attempt to iterate through every weapon trying desperately to find something that uses SK_SLINGS before eventually dying out of its main loop and returning 101 (OBJ_RANDOM), which was the initial value of result. Later on, the value returned from _acquirement_weapon_subtype is blindly used as the subtype for the object being generated, and /that/ subtype is then used in an index for testing if the item is able to be wielded, and /that/ causes a segfault. -------------------------------------------------------------------------------- 76bb9edea9 | bfaires | 2022-12-09 16:52:27 -0500 Fix int params to crawl.sendkeys() Currently crawl.sendkeys(6) sends "6" instead of keycode 6. Due to lua_isstring() returning true; ints considered valid strings. Moved number check ahead of lua_isstring() check. Made number check explicit; lua_isnumber() can return True for strings. -------------------------------------------------------------------------------- e848bf14ca | Roadster Tracker | 2022-12-09 16:51:10 -0500 Shrinks the size of chequers_temple_sunken There's a lot of empty water in this vault that really contributes absolutely nothing useful. Removing it to have flying and swimming species auto explore quicker. -------------------------------------------------------------------------------- 5004eecd7a | Roadster Tracker | 2022-12-09 16:51:10 -0500 Don't care about exploring the edge tiles The edge tiles aren't really that interesting to explore, nothing can go there. This change treats those tiles like translucent tiles, going through isn't possible and so don't even bother trying to visit. Fixes #2785 -------------------------------------------------------------------------------- eb60c0892e | Benjamin S Wolf | 2022-12-09 16:24:19 -0500 Remove defunct and completed todo -------------------------------------------------------------------------------- 1e1ebe7c07 | Duong Hoang | 2022-12-09 16:18:05 -0500 fix: a few css issues fix some syntax errors existing in the style.css [committer's note: these fixes were in a commit with a css style change for the "play now" div that I didn't take] -------------------------------------------------------------------------------- 41561af1f8 | Nikolai Lavsky | 2022-12-09 15:52:58 -0500 fix: improve handling of ?poison and ?fog under Still Winds These scrolls are already marked as useless under -Clouds, but there are two problems: * The player still can read and waste scrolls of poison without any effect. * Trying to read a scroll of fog prints "As you read the scroll of fog, it crumbles to dust.", even though it doesn't destroy the scroll. This commit fixes these issues. -------------------------------------------------------------------------------- 77163bc473 | Nikolai Lavsky | 2022-12-09 15:52:58 -0500 fix: add more uselessness checks for consumables There are several situations when the game doesn't let you use an item, but the item is not marked as useless. For example, scrolls are not considered useless in Gehenna or when you are confused or berserk. Scrolls of teleportation are greyed out in the Gauntlet, but not when you are under Stuck or -Tele status. Scrolls of enchant weapon/armour look exactly the same in your inventory when you have something to enchant and when there are no such items. This commit adds several uselessness checks for consumables. This affects not only the action panel, but also the `i`, `r`, `q`, and `v` menus and the quiver. -------------------------------------------------------------------------------- 6319d2f74e | Nikolai Lavsky | 2022-12-09 15:52:58 -0500 feat: grey out useless items on the action panel The game has a lot of situations when the player cannot use some consumables. There are branch-, god-, and status effect-specific item restrictions, some of which can be discovered only by trial and error. To better communicate these restrictions to players, grey out currently useless items on the action panel. -------------------------------------------------------------------------------- 5d0fae5569 | advil | 2022-12-09 11:41:51 -0500 build: ignore catch2 in unbrace This file already doesn't check hpp files, so catch2 v2 was fine. For build purposes I renamed catch_amalgamated.cpp to a .cc file, and so now unbrace tries to look at it. -------------------------------------------------------------------------------- f926380dec | advil | 2022-12-09 10:58:26 -0500 build: update checkwhite for catch2 v3 -------------------------------------------------------------------------------- 90188ab0ba | advil | 2022-12-09 10:43:36 -0500 build: update catch2 This updates our catch2 infrastructure to the latest version, 3.2.0. This is a pretty big version change for catch2, though since our catch2 tests are quite simple, it wasn't very impactful for the tests themselves. We were previously on v2.11.0. * v3 still supports an "amalgamated" build along the lines of what v2 did, but it is not the preferred way of building. However, the preferred way of building appears to require cmake. So I have therefore used the amalgamated build files. v3 is no longer header-only, and as indicated by the docs, is pretty slow to build (link especially) in this form. However, I don't think there's a viable alternative. * v3 does not support c++11. I have conditionally enabled c++14 when building catch2 tests, since the case where we can't support c++14 is production builds which don't need these tests. * Updating to v3 allows catch2 tests to build on arm mac (not possible in any version of v2 without backporting a patch), so this is a nice bonus. * This commit fixes an error and a bunch of warnings that showed up when updating the version. There's some extra catch2 stuff that I don't know what it is and didn't touch, I suspect it would need some attention though? -------------------------------------------------------------------------------- 523d8b781c | advil | 2022-12-09 10:43:36 -0500 fix: improve c++14 support We can't support c++14 generally because cao can't use it, but this commit allows crawl to build if the standard is set to c++14. Hopefully this won't be too brittle. -------------------------------------------------------------------------------- 7412bad402 | advil | 2022-12-08 16:08:38 -0500 build: move ci to ubuntu-20.04 This should hopefully be only temporary but there are a couple of issues that will need attention before we can run CI on ubuntu-22.04 (maybe more that we don't yet know about): * py3.6 is past its eol, and no longer usable. But, we shouldn't stop testing unless all servers are past this version. * catch2.hpp needs an update to work for some reason -------------------------------------------------------------------------------- 9a071d2b26 | advil | 2022-12-08 14:46:09 -0500 fix: possibly fix CI Looks like `ubuntu-latest` just changed, and the dejavu package name is one thing that broke. -------------------------------------------------------------------------------- 946f4849ff | Nicholas Feinberg | 2022-12-07 21:48:26 -0800 Fix sInv monster spellcasting logic (acrobat) Tracers didn't have can_see_invisible set, badly breaking targeting for spells like LRD when the player was invisible. Pretty funny, admittedly. -------------------------------------------------------------------------------- 7324886222 | Nicholas Feinberg | 2022-12-07 21:37:56 -0800 Add to-hit for Vhi's targeter I'd meant to do this when I first added it, but I ran out of... charge. -------------------------------------------------------------------------------- 5c55548130 | Nicholas Feinberg | 2022-12-07 21:22:30 -0800 Remove an un-needed 'else' -------------------------------------------------------------------------------- 1e86977b1d | Nikolai Lavsky | 2022-12-07 21:22:21 -0800 feat: display Resonance Strike damage in xv This should give players a better idea how much damage Zenata and ragged hierophants can deal at range. Also, this commit changes how the damage is displayed by the monster utility: (3d15+) -> ((3-7)d15). -------------------------------------------------------------------------------- 2fc4330e95 | Nicholas Feinberg | 2022-12-07 21:19:26 -0800 Discount Sniper (acrobat) Its default price doesn't take into account the very high delay (or the Acc+∞, but that's neither here nor there). Discount it from a bit under 1400 to a flat 800, matching Damnation. -------------------------------------------------------------------------------- c76752946b | advil | 2022-12-07 21:29:49 -0500 lint -------------------------------------------------------------------------------- f932412b2a | advil | 2022-12-07 20:49:07 -0500 feat: restful lobby endpoint Currently lobby info can be extracted in one of two ways. First, like beem, one can open a websockets connection and read the lobby json as it comes in. Second, and lesser known, is the rube goldberg machine that powers https://crawl.develz.org/. The way this works is that: (i) the server writes a "dglwhere" file in a specific format, (ii) the webtiles server admin exposes these via apache or the like[1], (iii) these are collected and parsed by a python script[2] on cdo and turned into aggregated json, and (iv) the cdo javascript side of things reads this json from disk. Historically, this format presumably was used by servers that were not running webtiles, but only one of those remains. This commit puts forward something that I hope will eventually replace a bunch of this, namely an endpoint that just directly generates the json that scripts like this would need. As usual, do not run bots on a server without permission, and don't scrape this frequently enough that a server admin would notice. This endpoint is very lightweight, so it has no restrictions or throttling, but it may need something if badly behaved bots are pointed at it (as they seem to be for most crawl infrastructure, sooner or later). [1] This is so lesser known that I think every server owner has forgotten about this step, and they have faded away over time except for cao. And it's not that the current cao admins actually remembered it either. [2] Script in question: https://github.com/crawl/dcss-website/blob/master/build-scripts/dgl-status-colle ct.py -------------------------------------------------------------------------------- 685d318daa | Nicholas Feinberg | 2022-12-07 14:41:02 -0800 Remove DID_KILL_PLANT Fedhas conduct It should be almost impossible for the player to hurt a plant under Fedhas, so no particular need to keep a conduct preventing you from doing the implausible. (You can still whack em in melee, but that's covered by the 'did attack friend' conduct.) -------------------------------------------------------------------------------- cb316572d5 | Zhang Kai | 2022-12-06 22:40:45 -0800 Create status.txt -------------------------------------------------------------------------------- 69fa218f66 | Nikolai Lavsky | 2022-12-06 22:39:47 -0800 fix: don't shelter projectiles from injuries Sheltering orbs of destruction from injuries does nothing, but ironbound preservers do it anyway. Friendly guardian golems are so friendly, they protect even hostile OoDs. This happens because of how `mons_aligned()` treats all projectiles. -------------------------------------------------------------------------------- 5902d59ca7 | Nicholas Feinberg | 2022-12-06 22:39:11 -0800 Fix checkwhite -------------------------------------------------------------------------------- bd94b87d25 | Zhang Kai | 2022-12-06 22:38:54 -0800 Update unrand.txt -------------------------------------------------------------------------------- c4c10c6247 | Zhang Kai | 2022-12-06 22:31:12 -0800 Update items.txt -------------------------------------------------------------------------------- e100a291cf | Zhang Kai | 2022-12-06 22:26:06 -0800 Update cards.txt -------------------------------------------------------------------------------- eb79e001ea | Zhang Kai | 2022-12-06 22:25:44 -0800 Update unident.txt -------------------------------------------------------------------------------- 3bdf3c9e3d | Zhang Kai | 2022-12-06 22:24:13 -0800 Update skills.txt -------------------------------------------------------------------------------- 7447358451 | Nicholas Feinberg | 2022-12-06 22:21:51 -0800 Fix various water issues (dilly) - Make large species move at normal speed in shallow water, matching the monster behaviour. (I agonized over this for years, but honestly it's fine. Water does other stuff, and most species aren't large.) - Don't double-message when entering water while invisible as a naga or other large-torso species. - Various other refactorings. This introduces at least one unforseen bug. Closes #2769. -------------------------------------------------------------------------------- ca3939328b | Nicholas Feinberg | 2022-12-06 21:59:19 -0800 Treat monsters with throwing weapons as ranged (acrobat) Don't allow rest/autotravel while an enemy with a throwing weapon is visible across impassable terrain. RIP Sergey's 38 streak. Fixes #2833. -------------------------------------------------------------------------------- 0b3c3f4973 | Roadster Tracker | 2022-12-06 21:54:24 -0800 Fixes this to be consistant with current penalties (Committer's note: reworded somewhat.) Fixes #2838 -------------------------------------------------------------------------------- 46e4cf009a | Zhang Kai | 2022-12-06 21:52:14 -0800 Update species.txt -------------------------------------------------------------------------------- 9f89ac5fbf | Zhang Kai | 2022-12-06 21:50:34 -0800 Update features.txt -------------------------------------------------------------------------------- 2b7a1c9105 | Zhang Kai | 2022-12-06 21:48:44 -0800 Update backgrounds.txt -------------------------------------------------------------------------------- b083acad24 | Nicholas Feinberg | 2022-12-06 21:44:26 -0800 Make Sniper +27 (hellmonk) The +0.4 base delay is very cool but very painful - Sniper mostly did less damage over time than a basic triple crossbow. At +27, it's still often a little weaker, but it's comparable and *much* cooler. -------------------------------------------------------------------------------- 26384909b7 | Nicholas Feinberg | 2022-12-06 21:37:31 -0800 Simplify partially-resistable attacks (hellmonk) Instead of ice, lava, and water being 40/55/40% resistable by their applicable resistance (respectively), make them all 50% resistable. This is a small nerf to hailstorm/glaciate/polar vortex/iceblast/flash freeze/etc, and a small buff to fire storm/bolt of magma/lava spit. (Except against vulnerable creatures.) We can add a little compensation damage later if it's really needed - this is just intended to simplify. -------------------------------------------------------------------------------- eff3892269 | Nicholas Feinberg | 2022-12-06 21:34:45 -0800 Add a special message for mindbursting GOBs They're nothing but minds! -------------------------------------------------------------------------------- ea827ebd68 | gammafunk | 2022-12-06 21:06:43 -0600 feat: Adjustments to an arrival vault For `tekkud_arrival_beachfront_property`, reduce the number of fog machines, since they're overlapping each other. Add yellow color to the floor for the tiles with sand floor tiles. Reorder DES, reindent, and checkwhite. -------------------------------------------------------------------------------- 84d97b07b6 | yrdzrfxndfvh | 2022-12-06 21:04:25 -0600 feat: A beachfront arrival vault The player arrives on D:1 at a large, abandoned beach front, where they can see misty open sea and abandoned shops. Level item generated in the vault can only place along the beach, implying that they too washed ashore. Committer's Note: Added a descriptive commit message. Part of PR #2796. -------------------------------------------------------------------------------- fe72c296f8 | Aliscans | 2022-12-06 10:36:01 -0500 fix: initialise you.sacrifice_piety. Initialise you.sacrifice_piety before Crawl copies it to a new character's save file. Clear the whole thing (when only the section between ABIL_FIRST_SACRIFICE and ABIL_FINAL_SACRIFICE is saved) as that's what FixedVector provides a function for. On Linux 3.16.0 with Crawl 0.30-a0-394-g3e4acdb0ae, this takes Crawl (on my system) from a situation where valgrind reports access to an uninitialised variable when I start a new character to one where it doesn't. [Committer's note: reformatted commit msg, added second para from PR description. Resolves #2863] -------------------------------------------------------------------------------- 3e4acdb0ae | advil | 2022-12-05 17:29:03 -0500 fix: clear monster seen flags for wizmode map wipes One (even one who wrote this command) might have thought it already did this, but it didn't. -------------------------------------------------------------------------------- 54b8e3be05 | advil | 2022-12-04 15:22:14 -0500 fix: don't block with many spectators on game end The `go_lobby` function is individually just a bit below the threshold of being a problem (though it could use some testing in production), but with a lot of spectators, this loop can easily be a problem when the player saves or otherwise ends the game. Even in local testing I'm seeing 500ms when 10+ spectators disconnect. This commit converts the loop to one that is called asynchronously (for backwards compatibility, via old-fashioned IOLoop callbacks). -------------------------------------------------------------------------------- 7679850db9 | advil | 2022-12-04 12:59:23 -0500 fix: improve (with hacks) map sending to spectators When a new spectator joins, `_send_everything` pushes out a whole bunch of json data which previously was sent to all sockets connected to a process. The biggest part of this is usually the map: a fully mapped level can involve a 100k+ json, and handling this turns out to be impactful, at least with many spectators. (I haven't profiled most aspects of this, but what I do know is that the deflate time on cao can be 3-10ms, which can get into human-noticeable territory with 10 or more spectators. Even on a very fast local machine I can get this into what are probably noticeable latencies with 20+ spectators.) This commit adds some heuristics on the server side so that, after some spectator(s) join, the next full map is sent only to those spectators. This should take map handling from linear with the number of spectators, to constant with the number of spectators. Webservers would need to restart to get this change. I also considered various more robust seeming versions of this, including trying to compress the map message only once. But this turns out to be extremely hard to do with how the deflate protocol works. And I expect that there's also json decoding penalties for the map on the receiver end. I may try to add something more systematic via control messages, but this change also has the advantage that it should work with any version of crawl that is currently played online. -------------------------------------------------------------------------------- f4ee2d632a | advil | 2022-12-04 12:59:23 -0500 refactor: clean up ws_handler send code This improves the organization of the send code, and adds some comments; should not change any behavior. (Was originally part of a bigger rewrite that I abandoned, that would have attempted to not deflate once per socket.) -------------------------------------------------------------------------------- 80c34de65d | advil | 2022-12-03 10:11:20 -0500 feat: prevent good mutations from causing unfixable stat zero Following 6a3c3ed53f1b it is possible to get stuck with stat zero via only base stats + good mutations. For example, a starting feee with two levels each of clever and agile has base 4 str, and -4 str from the mutations. Recent example: https://crawl.xtahua.com/crawl/morgue/sanka/morgue-sanka-20221201-183043.txt This char went from str 6 to 0 in one jiyva pass. (Note that the present commit doesn't actually check mutation loss, but it would have prevented the case in this morgue because loss happens before gain.) This is very rare for normal players so I think just hasn't come up, but on a jiyva char can happen rather easily (and rapidly) especially with an early jiyva conversion. This circumstance can effectively make a char non-viable, with the only counterplays being mutation potion luck, or preemptively raising stats. A 4str char possibly *should* consider the latter, but it doesn't really seem like a large set of "good" mutations is an amazing way to reinforce this message, and a char like the one above would have only ~1 opportunity to even do this. The commit only checks muts flagged with mutflag::good, so weak/dopey/clumsy could still cause stat 0 (not sure about whether they should be able to, as they may have the same fixability issues, but the circumstances are a lot different and would at least typically allow more time to preemptively raise stats). The commit also doesn't check items and so on, since if a mut causes stat 0 in combination with items, there is an immediate counterplay. The mutation is silently rerolled if it would cause stat 0. To do this, I refactored how stats + mutations are handled to be a bit more clearly data-ified. Interaction with the stats code is still somewhat brute force, though. -------------------------------------------------------------------------------- 8d7d949f56 | Kate | 2022-12-02 18:14:41 +0000 Don't allow Transference to work on projectiles -------------------------------------------------------------------------------- be348a5456 | advil | 2022-12-02 12:33:53 -0500 refactor: centralize some version-related metadata The goal of this is to make it straightforward for forks to change this metadata in one go, especially the bug report line (please send your bug reports to you, not us). Minorly improve what info is displayed where, e.g. show the build target with version number, show the bug tracker link on the version page, a few other things. -------------------------------------------------------------------------------- cbb7f7dcb2 | advil | 2022-12-02 12:30:16 -0500 fix: update morgue parsing from webtiles crashes Broken since 81ff5c4599e2d4d4d. A following commit will add a comment to dbg-asrt.cc that will give specific instructions on how not to break this in the future. -------------------------------------------------------------------------------- 814673872d | advil | 2022-12-02 09:22:06 -0500 fix: don't break admin panel on watchers -------------------------------------------------------------------------------- febfb9b408 | Kate | 2022-12-01 15:59:34 +0000 Fix a hints mode lua error (#2845) Closes #2845. -------------------------------------------------------------------------------- 471f0101a1 | Kate | 2022-12-01 15:59:34 +0000 Fix a hints mode typo (#2846) And reword slightly. Closes #2846. -------------------------------------------------------------------------------- f862984e2c | advil | 2022-12-01 09:04:49 -0500 fix: further tweak how player info is sent to spectators Also, comment some of this weirdness. -------------------------------------------------------------------------------- a738ffb698 | advil | 2022-12-01 08:54:16 -0500 fix: don't update time display on spectator connection This is a bit tricky to keep in sync, because the server-side version of this works differently than the webtiles client version. (I'm inclined to say the webtiles version is probably better and should be ported over to the c++ side, but that's a bigger project.) This commit sends the server-side time delta value on spectator connection, and uses the fact that this is only sent by `_send_everything` to ignore time updates in that case for the player. It's still possible for a spectator to be seeing slightly out of sync values for this on connection, but it now shouldn't ever be updated for the player on this case. -------------------------------------------------------------------------------- 6ea064c7b4 | advil | 2022-11-30 21:22:34 -0500 fix: remove debug code (ge0ff) -------------------------------------------------------------------------------- 72b080bd28 | advil | 2022-11-30 18:27:33 -0500 fix: add some missing crt checks These fix a way of getting the exceptions reported in https://crawl.develz.org/mantis/view.php?id=11387 namely, if a spectator joins while a crt menu is being displayed. In 2018 there were probably more of these, but now I think this is mainly the skill menu. (However, in current testing these exceptions do not cause anything like the symptoms seen in that mantis report..) -------------------------------------------------------------------------------- 06526a8a8b | advil | 2022-11-30 18:26:58 -0500 fix: clean up ui stack handled flag -------------------------------------------------------------------------------- 86d51d8b50 | advil | 2022-11-30 17:31:07 -0500 fix: don't keep processing webtiles ui-stack messages (dilly) The `ui-stack` message gets sent when a spectator joins, and consists of a sequence of menu descriptions. When a spectator was already viewing a submenu, and a new spectator joined, the same menus would be added to the old spectator's ui stack on top of other already displayed menus. This commit simply prevents processing of this message more than once, which is correct for the way it's currently used. -------------------------------------------------------------------------------- 5cb311bc9f | advil | 2022-11-26 16:57:25 -0500 fix: unbreak webtiles server config reload -------------------------------------------------------------------------------- 24c37cb796 | advil | 2022-11-26 10:37:05 -0500 fix: show IP for webtiles token logins 36e498a9c added this for regular logins, but not token logins for some reason. -------------------------------------------------------------------------------- eb1d99f871 | advil | 2022-11-26 10:31:37 -0500 feat: allow disabling anonymous spectating -------------------------------------------------------------------------------- 95c0257040 | advil | 2022-11-24 10:15:14 -0500 fix: don't allow treeform over deep water 80ed8d6641f added a check to allow transformations over dangerous terrain when the player has tempflight, but this missed an interaction with treeform. Treeform disables all sources of flight immediately, so if the player had tempflight (e.g. via !flight), this would lead to sequences like the following: You turn into a tree. Your roots penetrate the ground. You fall into the water! You can't survive in this terrain! You fly above the water, but the process is draining. Splash! You fall into the deep water. You sink to the bottom. For the duration the player is in deep water, they get emergency flight draining. (Permaflight had a correct version of this check.) To fix, move the tempflight check into `_flying_in_new_form` so the interaction with forms forbidding flight is handled correctly. Also, remove an obsolete Xom death check that looked at deep water/lava. -------------------------------------------------------------------------------- d37427bb62 | Neil Moore | 2022-11-22 19:05:13 -0500 Add a missing quote quote Does no one double-check my commits? You're playing with fire here. [skip ci] -------------------------------------------------------------------------------- 0ce2686038 | advil | 2022-11-22 12:34:44 -0500 fix: correct a slime-related bounds check -------------------------------------------------------------------------------- ad7725a93e | advil | 2022-11-19 09:43:51 -0500 fix: gitignore generated version info -------------------------------------------------------------------------------- 22bf6fb5de | advil | 2022-11-19 09:42:05 -0500 fix: remove generated file accidentally committed -------------------------------------------------------------------------------- 3872ae82dd | advil | 2022-11-19 09:36:58 -0500 fix: spell menu improvements (elliptic) (Eventually this menu needs to be refactored so that it's not a ToggleMenu...) * Fix a bug with the footer if the regular cast menu * put the action name in the header, so it's more quickly apparent what menu version is being shown. -------------------------------------------------------------------------------- 86fb4627a9 | advil | 2022-11-17 19:28:14 -0500 lint -------------------------------------------------------------------------------- 839099abd5 | advil | 2022-11-17 17:49:18 -0500 feat: show webtiles version to admins I didn't find a way to do this except via some brute force build stuff. It possibly would make sense to show this version info (or a much simplified version of it) somewhere in the lobby as well, but there's no immediately convenient place. -------------------------------------------------------------------------------- 93dc600154 | patrick | 2022-11-17 13:43:44 -0500 Update the entrance message for the Pan rune shop vault The other phrasing suggested to some that the pandemonium lord would leave you alone if you paid up for the rune, which is not the case. Now the announcement is a little more clear about how to get the rune, without suggesting how the panlord thinks about the situation, one way or another. "nicolae why does the pan lord want to kill its customers" i don't know buddy i'm not a pan lord -------------------------------------------------------------------------------- e7f957f1db | Nicholas Feinberg | 2022-11-15 16:38:06 -0800 Fix Devastator effect description (MIC132) It hits friends *and* foes! -------------------------------------------------------------------------------- f6b3ef1049 | advil | 2022-11-13 13:32:58 -0500 fix: remove an obsolete log message Tornado hasn't had blocking logging for a long time, and it seems that server admins tend to find this message alarming. Remove. -------------------------------------------------------------------------------- 76810e16d9 | advil | 2022-11-13 13:20:02 -0500 fix: use buffered writing mode for ttyrecs I can't see any good reason for this to be unbuffered, and only bad potential consequences. This does some flushes for good measure, but I'm not even sure these are necessary. Also, fix some misc timing logging stuff. -------------------------------------------------------------------------------- 0b7830ef10 | advil | 2022-11-13 13:20:02 -0500 feat: more manual timing logging Add a mechanism for explicitly logging slow IO. There's some redundancy with slow callback logging, but this is a lot more focused, provides precise information about when IO in particular is blocking, and is on by default. This is part of my continued quest to reduce lag on cao... -------------------------------------------------------------------------------- 30ec35652d | advil | 2022-11-13 13:20:02 -0500 refactor: clean up TerminalRecorder a bit In particular, separate object initialization from the calls that attempt to start the process. (This will eventually be needed for an async version of this class, anyways.) -------------------------------------------------------------------------------- 447f08457e | Nicholas Feinberg | 2022-11-12 13:51:32 -0800 Fix hurling damage ratings (Undo) -------------------------------------------------------------------------------- d0147acb1a | advil | 2022-11-10 18:44:08 -0500 fix: improve slow callback logging code 1. Rip out the old manual code, completely obsolete now. (The ony thing plausibly useful remaining was logging that connected up a username with blocking, but I don't think this is necessary.) 2. Add some try...except future-proofing, given the level of weird introspection this code is doing. 3. Improve logging for slow handlers on BaseAsyncIOLoop, which were logged in a quite useless way (but showing up as blocking on CAO). -------------------------------------------------------------------------------- 0d69a1922f | advil | 2022-11-07 20:16:59 -0500 feat: a webtiles config override specifically for live-debug mode To test things on production servers in live-debug mode, I'm often editing config.py in place. This isn't ideal (forgetting and not doing a dgl publish could lead to these setting tweaks ending up in production). So, add a way to override only settings for live-debug mode, based on the config.yml override. Of course, to test a config as close to possible as production, you probably don't want to heavily modify this. -------------------------------------------------------------------------------- 9a6ad51620 | advil | 2022-11-07 19:50:02 -0500 feat: configurable webtiles milestone tailing interval This feature is not used for current versions, and 1s strikes me as potentially quite aggressive for an old server with many seldom-played versions. Therefore, it seems useful to allow this interval to be configured. I kept the default at 1s for now, though. -------------------------------------------------------------------------------- 0b6ecbc06f | advil | 2022-11-07 19:45:21 -0500 fix: improve logging for RequestHandler and PeriodicCallback For both of these, the slow callback logging printed fairly anonymous info that made it hard to identify the actual source. This commit improves the situations for both classes. For PeriodicCallback, I was able to straightforwardly override `__repr__` since the object itself is used. The method for RequestHandler is more entertaining than good. -------------------------------------------------------------------------------- 4c39ff33d3 | advil | 2022-11-07 10:14:32 -0500 fix: improve repr-based callback logging in webtiles The default `repr`s for tornado callbacks were not very useful when trying to debug slow callbacks, which has led me to spend a fair amount of effort on relatively janky manual logging via the `@util.note_blocking_fun` decorator etc. This sort of worked, but wasn't very accurate beyond certain obvious functions (lots of false positives), and it's not very maintainable. I have done a dive into asyncio internals, and come up with a much better set of solutions. First, the `repr`s turn out to have not been useful simply because asyncio generates them with reprlib, which by default limits `repr`s for "other" to 20 chars. Since IOLoop callbacks from the webserver are essentially always wrapped in `functools.partial` (17 chars), they were pretty much guaranteed to have no useful info in them - but this is easily tweaked via the reprlib API. There are a bunch of other possibilities, but still always very long strings where 20 chars is just not enough. Second, a lot of the info here for many callbacks can be eliminated: to debug webtiles blocking callbacks, we don't really need calling info, just the name of the callback itself. This commit writes some custom repr code that fixes the reprlib limit, and handles some of the IOLoop-specific special cases much more nicely. It does use asyncio Handle internals a bit, but it looks likely to me that these internals are fairly stable. I think this probably fully obsoletes the manual blocker tracking code, and so if this remains true after some testing, a future code will likely just remove it entirely. -------------------------------------------------------------------------------- 6b83867211 | advil | 2022-11-06 21:28:52 -0500 fix: add COLLATE NOCASE to the username index ...needs to exactly match the query. -------------------------------------------------------------------------------- e1e7d3de80 | advil | 2022-11-06 21:00:02 -0500 fix: add a unique index for dglusers.username Despite being treated like it, username was neither indexed nor constrainted to be unique. In large user dbs (aka CAO, with around 100k rows), this was actually impacting performance -- lookup was on the order of 100ms there. This commit creates new databases with a unique index, and tries to add an index on upgrade. (Note that just a regular index doesn't see noticeable performance gains without something else; I was able to tune the queries in combination with a non-unique index, but I think it's safe just to enforce uniqueness.) I know that it's possible for this to fail, because uniqueness was not previously enforced except by side effect (CAO has some duplicate rows from 2007 right now), so it's handled relatively carefully. If an admin encounters the error here on upgrade, they probably should go and manually fix in their user db (typically you can do this by renaming one of the duplicates, but you should check carefully). -------------------------------------------------------------------------------- 1e81539c98 | advil | 2022-11-06 14:55:20 -0500 fix: more blocking annotation adjustments Because the dgl file update runs on a timeout, it was getting false positives for stuff that happens early in a connection, so explicitly prevent the timeout version from doing this. Also, in my local testing, some of these were false positives for MainHandler.get (namely the initial render of client.html). -------------------------------------------------------------------------------- 17a13138e6 | advil | 2022-11-06 10:15:16 -0500 fix: replace password tokens when generating new ones The recovery token code doesn't really ever automatically delete previously created tokens, prior to this commit this only happened on an actual password change. Because of this, generating a new token when the previous one(s) were unused would just lead to multiple potentially active tokens. It seems much less confusing (and perhaps more secure) to only allow one active recovery token at a time, so this commit deletes any old tokens on generating a new one. This will also clear out any expired tokens. If a token is expired and unused, it will still linger aside from these two cases (passwd change, passwd reset) -- not sure whether it would be better to delete these at some point? They probably do slowly build up over time. -------------------------------------------------------------------------------- 0c61f328b0 | advil | 2022-11-06 10:10:35 -0500 feat: allow customizing recovery token lifetime Also, default it to a longer value. Previous this was hardcoded to 1 hour, which is definitely a pretty safe option, but in practice was too short for servers where admins are doing the password resets. Basically it makes any admin-managed password reset that is not done synchronously fail. In a quick survey of best practices here (or at least practices), I found answers ranging from 1 to 24 hours. The previous value of 1 is still probably practical for servers that have email password resets. -------------------------------------------------------------------------------- dc488dc59d | advil | 2022-11-05 17:32:08 -0400 refactor: rewrite webtiles db code Since the very beginning (82b49a24b7ed1), webtiles has accessed its user databases by opening and then closing a connection on each access. I haven't been able to figure out any reason why it should do things this way (sqlite3 can certainly handle concurrency), and there are a bunch of reasons why this is bad: (a) it increases overhead on each call (an fopen is necessary each time, probably among other things), and (b) it leads to a bunch of bad code to minimize the number of db opens per each function. This commit rewrites the db access code to have a persistent connection to both of the sqlite3 databases. Because of this change, I was also able to majorly refactor most of the db calls so that there is much less duplicate code. This commit also changes (arguably) a bunch of stylistic stuff in this code, and improves aspects of the API. Along the way, I wrote unit tests for the major functions of this module. I'm not sure how significant the speedup is, but it isn't nothing; on a SSD in local testing this about halved the time of db calls (though from ~20ms to ~10ms, so may or may not be impactful). But I suspect on a server with a spinning disk (aka CAO), this will be quite noticeable. -------------------------------------------------------------------------------- 79de549745 | advil | 2022-11-05 17:30:36 -0400 feat: mark some potentially blocking functions -------------------------------------------------------------------------------- f58ed5266c | advil | 2022-11-04 19:47:31 -0400 refactor: clean up save info collection Previously, save info was collected for each game mode. In most scenarios, this results in many unnecessary calls to crawl binaries, because a single `-save-info-json USERNAME` call prints all saves for that binary. Webtiles already had a mechanism for distinguishing binaries that handles dgamelaunch-config setups correctly, so this commit takes that and uses it to reduce the number of calls when collecting save info for the lobby. Now, each binary is called at most once. This commit also slightly cleans up how the callback chain is constructing, and better comments this (slightly baffling) bit of code. -------------------------------------------------------------------------------- e9b783979b | advil | 2022-11-04 19:44:08 -0400 refactor: reorganize webtiles.config Move most module-level assignments to the top of this file, rather than scattered all over the place. Also, some tweaks to game info caching. -------------------------------------------------------------------------------- f0b7877050 | advil | 2022-11-03 09:40:43 -0400 fix: correctly handle game mode with non-mode options For the game mode encoded by the binary as "" (e.g. normal game mode), the code that collected modes on startup would fail if there were non-mode options in the option sequence. This fixes handling of "" modes. Also, add some comments to clarify what is happening here. -------------------------------------------------------------------------------- c8fac2a973 | advil | 2022-11-03 09:06:22 -0400 refactor: centralize some webtiles call construction code This refactors some common code from a few different places into the new GameConfig object. -------------------------------------------------------------------------------- faeacb97bc | advil | 2022-11-03 09:03:30 -0400 fix: eliminate some double error logging in webtiles 7915c1070c07 added logging for arbitrary exceptions that happen during crawl startup. However, sys.exit works by raising an exception, so any explicit calls to `err_exit` then resulted in multiply logged error messages (actually triple-logged because of "During handling" messages). So, only do the outer logging on exceptions other than SystemExit. -------------------------------------------------------------------------------- 04419e6e1e | advil | 2022-11-03 08:01:02 -0400 fix: cache some info across webserver reloads Previously, `collect_game_modes` was rerun on a HUP. Unfortunately this is a very heavy function with big game configs, as it runs the crawl binary for each game and blocks the whole time. This fix caches the gametype info for each binary across reloads, since in practice I think this will never change; this function should now only block on initial load (which is fine). -------------------------------------------------------------------------------- 682706514a | advil | 2022-10-31 10:17:00 -0400 fix: missing module -------------------------------------------------------------------------------- 7915c1070c | advil | 2022-10-31 09:44:41 -0400 fix: better log exceptions during webtiles startup If an exception happens in this phase on a production server, it seems to vanish into the ether. This commit adds explicit try blocks and logging. -------------------------------------------------------------------------------- 89bb51ec76 | advil | 2022-10-30 18:31:32 -0400 fix: adjust some game config validation details Previously, config.py game configs weren't actually validated, so this check seems to have some incorrect assumptions that flew under the radar. `pre_options` was not declared at all, and `client_path` was incorrectly described as required (if it is not set, the webserver will pick it up from the crawl binary). -------------------------------------------------------------------------------- 36bb253adc | advil | 2022-10-30 18:09:48 -0400 fix: adjust `send_json_options` behavior when unset This option was added in 0.14, and when unset was treated as False, I assume for compatibility with versions that were around at the time. However, very few servers even host versions this old now, and the code also handles gracefully if the crawl binary errors when called with the relevant option. I think it's time to get rid of this from active webtiles configs, and so this commit accordinatly treats it as True if it is unset. It can still be explicitly set to False for servers that are still running relevant versions (this may be a good idea for io-bound servers at least). -------------------------------------------------------------------------------- 398606ed4f | advil | 2022-10-30 18:09:48 -0400 feat: templating enhancements for webtiles game config Previously, webtiles allowed some minor string templating via %n and (recently) %v, but that was it. However, in practice, on production servers most game settings are repeated across many games, and some way of editing them all it once is necessary to avoid errors. Most servers (with only a few exceptions) dealt with this by running the dgamelaunch-config package, which layered a bunch of string templating on top of config.py (and other files). This commit adds some relatively major enhancements to game definitions in webtiles config that accomplishes the main goals here without needing an external package. The main new feature here is the ability to specify a partial game definition via a template, and then use that template to fill out a full game definition. There's a bunch of ways to use this, and it's probably somewhat overengineered even for the relatively complex setups on current production servers, but my hope is that (a) this will make life a lot easier for those managing large game configs, and (b) this will make life a lot easier for anyone who wants to make changes to how game configs are used. To give a flavor for how simplified this is (see config.py and base.yaml for full examples), the simplest use case is to define a template `default`, which will then be used by default on any other templates and game definitions, that has all the shared settings. The config.py example does this, allowing the games definition itself to be written as just: ``` games = collections.OrderedDict([ ("dcss-web-trunk", dict(version = "trunk", name="Play %v",)), ("seeded-web-trunk", dict(version = "trunk", name="Seeded", options=["-seed"])), ("tut-web-trunk", dict(version = "trunk", name="Tutorial", options=["-tutorial"])), ("sprint-web-trunk", dict(version = "trunk", name="Sprint %v", options=["-sprint"])), ]) ``` This code may overall still need some bugs shaken out as it goes into production, so server owners may prefer to let me test it out on CAO for a while before rewriting their configs. This commit along the way refactors a whole bunch of code. 1. Game loading is completely rewritten. It now supports game removals on HUP, and treats config module games in exactly the same way that yaml games are treated for loading purposes. 2. Game config string templating is restructured again: game configs are now in a custom mapping class, so most code can just get templated strings from objects of this class directly. (For convenience, I've still kept the `game_param` function introduced in a recent commit.) A bunch of older string templating code is cleaned up. 3. Lots of documentation. Though, this code now has a bit of an identity crisis as to where this documentation should be; it's split between config.py and base.yaml. Perhaps it should be in a third file. -------------------------------------------------------------------------------- c890208271 | advil | 2022-10-30 18:09:48 -0400 fix: unbreak webtiles dgl_mode=False This was freezing because of the ban check. (It appears that also, the main menu is semi-broken in this mode, but I'm not going to deal with that right now.) Also, better document the option. -------------------------------------------------------------------------------- e5acde7520 | Kate | 2022-10-29 19:30:58 +0100 Allow examining the map border again -------------------------------------------------------------------------------- 02c875d3d0 | Kate | 2022-10-29 19:30:24 +0100 Improve some targeter messaging For Simulacrum, Inner Flame and Poisonous Vapours - don't print "You can't see that place." when aiming at a monster that can't be affected. -------------------------------------------------------------------------------- 3f6d011563 | Nikolai Lavsky | 2022-10-29 19:30:24 +0100 fix: make Poisonous Vapours targeter ignore rPois enemies Otherwise the targeter always starts on the closest monster, even if the monster is resistant or immune to poison. Closes #2783. -------------------------------------------------------------------------------- b34b94214e | advil | 2022-10-29 13:33:41 -0400 fix: missing assignment -------------------------------------------------------------------------------- 8ab09dc110 | advil | 2022-10-28 18:03:50 -0400 fix: fix and generalize some webtiles templating code This was crashing if `version` wasn't set, so generalize. (Probably a bit over the top...) -------------------------------------------------------------------------------- 8f2769a82d | advil | 2022-10-28 14:27:49 -0400 feat: make creeping frost damage fully resistable As discussed in dev chat, this was not intended (a side effect of the zap type), and has been a surprising damage spike for players. This commit converts the damage part of this spell into BEAM_COLD so that it is normally resisted, but otherwise keeps the damage the same. It also documents flash freeze's resistance bypass (rime drakes etc), and documents creeping frost's `frozen` status bypassing rC. I considered whether to change rime drakes as well, but they are balanced in other ways so it would need more consideration (breath timer, and flash freeze itself does no damage with the frozen status already applied). -------------------------------------------------------------------------------- 85436e0a43 | hellmonk | 2022-10-27 21:53:43 -0400 randomly round englaciate duration -------------------------------------------------------------------------------- 9f0d5c6853 | hellmonk | 2022-10-27 21:24:56 -0400 Try a new haunt ghost formula Remove the deprecated stepdown_value call and just use random2avg to set ghost number. Seemed to give ok results in testing but can be adjusted if this is too consistent/inconsistent/otherwise "off". -------------------------------------------------------------------------------- f42c42fe99 | hellmonk | 2022-10-27 21:12:13 -0400 additional spell random rounding fixes -------------------------------------------------------------------------------- 6dfb9d8481 | advil | 2022-10-27 18:21:27 -0400 fix: a couple of mistakes -------------------------------------------------------------------------------- b515db48ae | advil | 2022-10-27 17:38:52 -0400 feat: enhance templating for webtiles game configs Previously, these allowed using the template string "%n" in certain game config fields, which would be replaced by the username. This commit expands this out a bit, with the target of some common setups on production servers, in particular to allow specifying a version string once and using it in a templated way. Some (quite minimal) examples in the default config, but this can be used in most path fields as well as pre_options, options, and the game binary name. -------------------------------------------------------------------------------- 6d2431741b | advil | 2022-10-27 10:38:08 -0400 fix: fix and refactor webtiles hidpi implementation This commit revamps the hidpi implemenation in 3925e268bea408. To get hidpi to work in a browser canvas object, the internal dimensions need to be twice that of the external dimensions (essentially). The normal way of implementing this is to multiply the internal dimensions by devicePixelRatio, and scale the canvas accordingly. We used to do this, but 3925e268bea40 changed things so that the external dimensions were halved. This was, according to the commit message, in order to prevent scaling artifacts on firefox. (Where the salient fact is that window.devicePixelRatio on some browsers, these days including chrome/firefox but not safari, also changes with browser zoom.) However, a consequence is that tile rendering is halved on hidpi devices, exactly not what should happen. This commit changes canvas sizes to be correct, and refactors a big chunk of hidpi rendering code to be somewhat clearer, and with better abstraction. Sadly, this change cannot work just by scaling the canvas, as browser pizel snapping from fractional pixels is quite varied and inconsistent. So, pixel snapping has to be implemented manually. The new approach is the same as before, just (maybe) a bit clearer: each tile is snapped to non-fractional locations and dimensions, and tile rendering happens in a fashion that scales to these dimensions. There's a lot of subtle potential bugs here. I suspect that the previous implementation that 3925e268be replaces wasn't wrong in using a scaled canvas, but rather had issues in its assumptions about pixel snapping. Why was this wrong for so long? The half-size tile rendering wasn't immediately noticeable because the dungeon is auto-scaled, and the monster list matches its scale to the dungeon. But, icons in menus and popups instantiate the problem, and scaling them to the dungeon size is not ideal. The action panel also had some workarounds for this that I didn't fully understand at the time. (I only noticed this myself after many years of working on this stuff because I switched from a regular-density monitor to a 4k monitor of similar size, even though I've used retina devices for a long time. Hidpi devices have been broken for so long that I won't be surprised if we get requests to readd this behavior as an option or something, menus may look odd now to people who have only ever played on hidpi.) I've tested this on a range of browsers, DPIs, map zoom levels, and browser zoom levels, and it seems to work across all of them at this point. -------------------------------------------------------------------------------- f7cf27c79d | advil | 2022-10-27 08:39:02 -0400 fix: maybe fix an arcjolt crash -------------------------------------------------------------------------------- 102857c98e | advil | 2022-10-26 22:16:38 -0400 fix: autotargeting for Vhi's electric charge This was quite involved because Vhi's has its own special targeting code (from when it was an ability). This code is involved enough that I don't immediately know exactly how to merge it with more general spell targeting code. This commit at least removes some of the special casing, but not all by a long stretch -- just enough to support non-interactive targeting (e.g. autofiring via the quiver). -------------------------------------------------------------------------------- f7783e6616 | advil | 2022-10-26 17:04:59 -0400 fix: numpad keys at cast prompt This lets numpad ./*/enter work at the (non-menu) cast prompt. -------------------------------------------------------------------------------- bdac0718f0 | Kate | 2022-10-25 19:25:09 +0100 Update a comment To clarify what effect_noise is and how it works, and hopefully prevent future cases of spells having an effect_noise but not using it anywhere! -------------------------------------------------------------------------------- eaf674384c | Kate | 2022-10-25 19:18:06 +0100 Adjust monster dragon spell noisiness Dragons were special-cased to be extra noisy on casting their spells, but it only applied to their breath weapons, and not to the Serpent of Hell's Summon Dragon and Xtahua's Paralyse (which thematically are also cast by roaring). Make those get their bonus noise, and don't make Bai Suzhen's wizardly (pre-dragonform) spellcasting extra noisy. -------------------------------------------------------------------------------- 6ace9fa8eb | Kate | 2022-10-25 19:18:06 +0100 Make Malign Gateway's horrible noise audible It claims to make a horrible noise and shake the dungeon but then makes no actual sound - give it 15 noise. -------------------------------------------------------------------------------- 8190f5fdf4 | Kate | 2022-10-25 19:18:06 +0100 Adjust noise for lightning-based spells Lightning Bolt, Arcjolt and Chain Lightning are all intended to be especially noisy, but the changes to zap noise now cause them to create their noise on every target hit, instead of just once at the casting position. Rather than special-casing them again, keep the new behaviour but reduce the bonus noise for Lightning Bolt and Arcjolt. Chain Lightning gets to just be extremely noisy, as is fitting for a level 9 spell. -------------------------------------------------------------------------------- 667f962bc3 | Kate | 2022-10-25 19:18:06 +0100 Let monster zaps make noise on hit When setting up beams for zap-based monster spells, the loudness value was discarded, making them silent on hit. There's no obvious reason that they should work differently, so allow them to work the same way as player zaps, and make noise happen when the player is hit by a beam. -------------------------------------------------------------------------------- d80880ac2d | Kate | 2022-10-25 19:18:06 +0100 Refactor zap noise handling Remove loudness from the zap_info struct, and base the noise made on hit by zaps on the loudness of the associated spell. Enchantments make no noise on hit, and explosions still have their noise calculated separately based on radius, but otherwise all zaps make noise equal to the spell's effect noise (if present), or the spell level. In general, zaps that were historically player spells (Bolt of Fire/Cold etc) already made some noise, but this commit adds noise to many monster-only zaps that previously made no noise on hit. Probably this is fine, but there's room for more adjustments if needed by adjusting effect noise individually (as is currently done for cloud-based spells which have a low effect noise). -------------------------------------------------------------------------------- 1022a3223f | Kate | 2022-10-25 19:18:06 +0100 Simplify noise on casting a spell Instead of having a semi-arbitrary noise value assigned to every spell, have all spells create noise equal to their spell level on cast. "Effect noise" remains and can be used for spells that should be extra noisy for some reason (either just when cast, for example with Lightning Bolt, or at a specific time/location, for example with Passage of Golubria). A few spells are specifically flagged as silent to allow them to be used for stabbing sleeping monsters (Ensorcelled Hibernation and Passwall, as well as Silence since it'll always be silent anyway). Very few spells end up with noticeable changes as a result - most spells already had noise approximately equal to their spell level, with some drift as spell levels changed. Zap-based spells also have a separate noise value when they hit something, which will be adjusted separately. -------------------------------------------------------------------------------- ae38170b09 | advil | 2022-10-25 13:51:15 -0400 feat: full CLI for dgl flag management Previously, for anything other than bans or holds you needed to use dgamelaunch-config scripts, or set the flags manually via sqlite itself. This provides a cli for setting all (in-use) flags. It also updates to reserve the new flags in use on CDI; these are not currently used by webtiles at all except via this interface, and there's some cosmetic options that alert the user about this. This commit also refactors some of the other CLI subcommands and improves error messages. -------------------------------------------------------------------------------- eb1268decc | advil | 2022-10-25 11:09:13 -0400 fix: don't let blocking enemies riposte off fencer's gloves d843f3a48cabf41 refactored most of the riposte check code into `maybe_riposte`, but not the player check, and then didn't include the player check in the call for the shield block case. This commit moves the player check into this function. Seen via: https://www.reddit.com/r/dcss/comments/ycouo3/riposte_blocking_bug/ -------------------------------------------------------------------------------- f115ab0292 | advil | 2022-10-24 17:34:00 -0400 fix: spell menu prompt in non-cast calls to `list_spells` For casting and describing spells, e6dd553d160feaab tried to put an informative prompt in the menu footer (previously there was no indication at all of what this menu was). Unfortunately, this conflicted with how quiver/amensia/adjust call list_spells, by changing the title. This commit always puts an informative prompt in the footer and allows only customizing the verb. It also fixes some weirdness with adjust (though that code probably needs a custom menu...) Resolves #2792 -------------------------------------------------------------------------------- 7d6cbdfea6 | Kate | 2022-10-23 23:31:01 +0100 Capitalise the Lochaber axe (Aliscans) And fix a missing comma in its inscription. -------------------------------------------------------------------------------- 0f8422e3f7 | Kate | 2022-10-23 23:31:01 +0100 Remove more obsolete missile handling code This code was also presumably dead since the ranged combat refactor. Pre-refactor players had an AC-based chance to resist curare, which can stay gone, and Xom is now amused by the player being caught in nets again. -------------------------------------------------------------------------------- 95ba73633e | Kate | 2022-10-23 23:31:01 +0100 Improve Jiyva's jelly missile mutation Now that it works at all, give it a more noticeable effect. -------------------------------------------------------------------------------- 1a7143a415 | Kate | 2022-10-23 23:31:01 +0100 Fix Jiyva's jelly missile mutation It did nothing, and had (possibly?) been broken since 2014's ranged combat refactor. Since all monster projectiles except throwing nets now mulch (and it can't eat nets), it no longer needs to destroy the item - but do allow it to eat javelins mid-flight so they don't pierce past the player (saving any precious jellies behind you!) -------------------------------------------------------------------------------- 959d978c02 | Kate | 2022-10-23 23:31:01 +0100 Remove an obsolete reference to Scattershot -------------------------------------------------------------------------------- 026cb31310 | advil | 2022-10-20 08:54:52 -0400 fix: add a final delay to the arcjolt animation Locally, this timing is a bit better, and this also allows for a final delay for Options.reduce_animations. -------------------------------------------------------------------------------- dc4b735fe1 | advil | 2022-10-19 16:40:53 -0400 fix: remove more python2 oops, missed -------------------------------------------------------------------------------- 583829d9f1 | advil | 2022-10-19 16:39:54 -0400 fix: remove python2 Python2 is fully deprecated for webtiles, and keeping around old testing and requirements sends the wrong message. Remove all this. Also, update a doc. (To be clear, this doesn't break anything that is still working on py2.) -------------------------------------------------------------------------------- 96a745ab99 | Nicholas Feinberg | 2022-10-19 12:06:07 -0700 Increase ranged weapon brand variety The ranged weapon loot game is made a little less exciting by the smaller pool of brands to work with. Play around with it some. - Add electrocution and antimagic to the pool for all ranged weapons. (Crossbows artefacts could already have elec.) - Replace venom with draining brand for ranged weapons, since there is nothing good or exciting about the ranged venom brand experience, and draining is a perfectly fun brand to play with. -------------------------------------------------------------------------------- b4a478afba | Nicholas Feinberg | 2022-10-19 11:51:06 -0700 Move Lucy's Banish to 2* Now that Bend Space is gone. -------------------------------------------------------------------------------- 793202b318 | Nicholas Feinberg | 2022-10-19 11:50:44 -0700 Cut Bend Space Just an incredibly unexciting ability. Lucy has plenty of other fun effects - we can do better than this. -------------------------------------------------------------------------------- 80b981deb3 | Nicholas Feinberg | 2022-10-19 11:50:44 -0700 Give Lugonu wrath protection To encourage conversion, make Lugonu banish 2d3 nearby foes whenever another god's wrath triggers. Should be very good against many wrath types. (Too good?) -------------------------------------------------------------------------------- 2f725a73e1 | Nicholas Feinberg | 2022-10-19 11:50:44 -0700 Make Banishment cause malmutation on resist Makes it feel less bad to fail, and gives you a better chance for next time. -------------------------------------------------------------------------------- 0ec75d9ef4 | advil | 2022-10-17 17:53:28 -0400 fix: rename some old autofight options, document The documentation was very confusing, and not helped by the fact that these options have changed out from under their old names and impact many non-throwing quiver attacks. I've renamed the options to something better, and kept the old options for backwards compatibility. Also, hopefully the documentation is a bit clearer now. -------------------------------------------------------------------------------- 7342b43953 | advil | 2022-10-17 13:02:06 -0400 fix: use name overrides in pluralised mlist names This fixes a meatsprint bug, where if more than one of a custom monster is in view, the monster's regular type name was shown in the monster list (e.g. "hell knight" instead of "fleshlord"). Probably this bug applies elsewhere too. I have not carefully tested whether the plurals involved all come out right. -------------------------------------------------------------------------------- db1af66bbf | advil | 2022-10-17 11:43:10 -0400 fix: remove socket state from slow callback logging I haven't found this info to be particularly revealing for diagnosing slow callbacks. -------------------------------------------------------------------------------- 70bf11b127 | advil | 2022-10-17 11:14:57 -0400 fix: missing explicit anon user handling in a log message -------------------------------------------------------------------------------- a49068932a | advil | 2022-10-17 11:04:02 -0400 feat: show webtiles socket info to admin users On a reload, show current socket stats and username info in the admin panel. This does not refresh except manually. This may or may not turn out to be useful, but otherwise there's right now no good way of getting info about usernames in the lobby or spectating. This also lets admin users more easily see what held accounts are currently doing. -------------------------------------------------------------------------------- 0f741e3f8e | Nicholas Feinberg | 2022-10-16 21:20:16 -0700 Make Fedhas protect trees from harm For consistency with shooting through other plants. I believe we should be able to remove the 'hurting plants' conduct in a follow-up commit. -------------------------------------------------------------------------------- 84690aa778 | Nicholas Feinberg | 2022-10-16 21:11:43 -0700 Add extra messages for Armataur potion/scroll muts To emphasize what's happening and make it clearer to players when the muts are taking effect. -------------------------------------------------------------------------------- 72a7dafe43 | Nicholas Feinberg | 2022-10-16 21:11:43 -0700 Allow stabbing distracted batty mons (acrobat) While they're actually distracted, not just batting about. -------------------------------------------------------------------------------- 93faf69470 | Nicholas Feinberg | 2022-10-16 21:11:38 -0700 Don't display damage ratings for darts (Undo) They were wrong. -------------------------------------------------------------------------------- 5c880eff19 | Nicholas Feinberg | 2022-10-16 21:11:38 -0700 Don't create wretched spriggan druids (Sergey) The on-death might is quite a bit silly as an effect from a supposedly beneficial god ability. (Kiku's Unearth Wretches.) -------------------------------------------------------------------------------- eff92bb211 | Nicholas Feinberg | 2022-10-16 21:11:38 -0700 Clean up transformations + webs (acrobat) Treeform should only destroy temporary webs, as with spider form. Dragon form shouldn't destroy any webs - monster dragons don't! (Both still destroy nets - trees because stationary creatures can't be netted, dragons because they're too big to be netted.) -------------------------------------------------------------------------------- 6f7e019470 | Nicholas Feinberg | 2022-10-16 21:11:38 -0700 Make Ashenzari print messages when blocking malevolence To make it clearer to players that Ashenzari does this - many players hadn't realized. Should feel good. Hopefully won't be too annoying that it interrupts runrest. -------------------------------------------------------------------------------- 5eb3a25a7d | Nicholas Feinberg | 2022-10-16 21:11:38 -0700 Make J's jellies immune to player mass hexes (Sergey) Mass hexes, e.g. ?fear, previously caused friendly jellies to become hostile (permanently) without penance. Setting up penance seems painful and annoying, and I'd like to make J give full protection to jellies later, so let's just start on that now. -------------------------------------------------------------------------------- 8a68597c01 | Nicholas Feinberg | 2022-10-16 21:11:38 -0700 Make Gozag block hostile soul binding I.e. from necromancers/pharoah ants. For consistency with player simulacrae. Some argument that these should both be changed to work under gozag, since they're based on souls now, or something. -------------------------------------------------------------------------------- f371ce1921 | hellmonk | 2022-10-16 17:10:17 -0400 random round toxic radiance numbers -------------------------------------------------------------------------------- c09304477a | hellmonk | 2022-10-16 16:56:41 -0400 randomly round lrd damage -------------------------------------------------------------------------------- 74d67f175d | hellmonk | 2022-10-16 16:37:32 -0400 random round some summon durations -------------------------------------------------------------------------------- 0a2392f0f4 | hellmonk | 2022-10-16 16:27:48 -0400 random round collision damage -------------------------------------------------------------------------------- 4b46babb21 | Kate | 2022-10-15 22:41:51 +0100 Apply sacrifice rejection penalties on Ru abandonment Fixes it being possible to get a quicker reroll of your first set of Ru sacrifice offers by abandoning and re-worshipping Ru. Abandoning Ru now applies the same penalties that manually rejecting sacrifices would have (but those penalties are now a lot lower than previously, due to the previous commit's bugfix). -------------------------------------------------------------------------------- 9bfbb5f4d0 | Kate | 2022-10-15 22:41:51 +0100 Fix Ru faith penalties always applying to Reject Sacrifices Since 26bd780f50c, manually rejecting a set of sacrifices via the Ru ability has applied a bonus penalty, which was intended to apply only when an amulet of faith was removed. Fixing this is a reasonably large buff to rejecting sacrifices (especially early ones), but hopefully that's fine considering that rejecting sacrifices is usually a bad idea anyway. If not then the base penalties could easily be increased. -------------------------------------------------------------------------------- 60c05b4e74 | advil | 2022-10-15 17:34:09 -0400 fix: maybe fix tremorstones with reduce_animation (Rytisgit) -------------------------------------------------------------------------------- 2d03c1e4d5 | advil | 2022-10-15 16:39:54 -0400 More checkwhite Lots of accumulated stuff for checkwhite -a -------------------------------------------------------------------------------- fe74333c6a | Kate | 2022-10-15 20:23:18 +0100 Checkwhite -------------------------------------------------------------------------------- fa9835406b | Kate | 2022-10-15 19:56:42 +0100 Let wizmode superheal clear barbs And move exhaustion and sickness from regular heal to superheal, since they're no longer common status effects. -------------------------------------------------------------------------------- b7e7e335b1 | advil | 2022-10-15 14:55:43 -0400 feat: better webtiles username ban management Since 0.28 or so, I have behind the scenes been distributing code to server admins that bans some slurs in usernames for account creation. This commit substantially enhances that code and builds it in to the webtiles server. This does not add any banned usernames to the repo / default config, but does make them quite a bit easier to add. Highlights: 1. A config option `banned` that can be used to indicate disallowed usernames, including handling some basic leet-speak translation, letter repeats, etc. Currently, these are disallowed for account creation only, and database bans are a distinct concept (but see 4 below). See documentation in config.py on how to use the more complex possibilities here. 2. The ability to load this list from a yml (or txt) file, similar to Alex's config.yml override. The format of the option is designed to be easily encoded in yml, and also line up with the (simpler) yml banned names format for the scoring db. This also means that admins no longer have to see / have visible on their screen slurs that are written out in a config file. (To be honest, this problem was the main impetus for me starting work on this set of changes.) 3. A distinct bans.py module that is self-contained and can be pulled into other crawl projects (e.g. scoring, tourney). I'm hoping that we can start to share some bits of infrastructure-wide config like this across servers, projects, etc... 4. Options for the command line utility that can check config-based bans against the user database, and automatically ban accounts. As noted in several comments, this code makes it very easy for admins to run into https://en.wikipedia.org/wiki/Scunthorpe_problem, so exercise care with the more powerful username matching options. There's preliminary allowlist code that can be expanded if this is desireable. This probably makes it overall easier for an attacker to come up with ways around username restrictions (by removing some things, such as my exact leet-speak decoding, from obscurity). But, I do hope that this commit still overall improves the situation for server admins. In the worst case scenario this is no different than the the previous state of affairs: it acts as a preventative for more casual abuse, and account holds fill the role of dealing with more persistent attackers. -------------------------------------------------------------------------------- f98c3da03f | advil | 2022-10-14 14:41:18 -0400 feat: default `reduce_animations` to true on webtiles Crawl's animations have long been a problem for webtiles. They work by using precisely timed delays (ranging from as short as 25ms up to a few hundred ms) combined with many redraws at interim stages as e.g. a beam path unfolds square by square. This works fine locally, but on webtiles this is all run on the server side, so a redraw is (a) at the mercy of the network, which can impact this timing substantially, and (b) causes a spike in map data sent to the server. Ideally, if animations are desirable on webtiles it would be much, much better to run them in the client, but this is something noone has ever implemented (and it doesn't sound very easy to do). The situation is so bad that stronger players tend to just turn off animations altogether. However, doing so leads to no visual feedback at all for ranged attacks that use animations. This commit threads the needle a bit, and by default shows most animations with just one delay + one graphic. It's possible this will still be too underinformative for newer players, and this commit might need to be reverted. As more background: A worst case scenario has been that firing or drawing beam animations became so laggy on webtiles, that in some conditions it has been slower than the key repeat timing or are slow enough for lag to impact webtiles server performance, see e.g. 0b5ff556b1e2, 0306a414dbaaa, e645bd13c135ed, etc. These commits involved hotspots that were improvable, but I think this option potentially provides a much better default solution. -------------------------------------------------------------------------------- 12470dd2fc | advil | 2022-10-14 14:41:18 -0400 refactor: various adjustments to animation reduction * Rename to just `reduce_animations` -- make it more general, and don't add another case where players can be confused about what a beam is. (Probably we'd want to implement this eventually for non-beam animations like rune lock, anyways.) * Refactor so that the combo of a delay + a redraw is abstracted, rather than being pasted in many places. * Small tweaks to how and when the final delays happen * Implement for disaster area as well as upheaval * options guide documentation Resolves #2635 -------------------------------------------------------------------------------- 2d2572e83d | Rytis Petronis | 2022-10-14 14:40:48 -0400 feat: add an option to reduce redraws for animations The reduce_beam_redraw option now decides whether to draw whole beam at once instead of animating every tile seperately with screen redraws in between. To achieve this the bolt::draw function is modified to return after setting the tile to the bolt but before trying to redraw. The redraw is then done only once outside the loop in which bolt::draw function is called to draw the whole beam at once. [committer's note: previously, the only choices for animations were to have the full animation (at a customized rate), or to show nothing at all. This provides a useful intermediate option that will be particularly valuable on webtiles. Note that a following commit will rename this option to `reduce_animations`.] -------------------------------------------------------------------------------- f0224bf7b6 | hellmonk | 2022-10-13 21:45:05 -0400 randomly round dispersal confuse duration -------------------------------------------------------------------------------- c94a717997 | hellmonk | 2022-10-13 21:43:34 -0400 randomly round intoxication chance -------------------------------------------------------------------------------- 9c5b80c1dc | hellmonk | 2022-10-13 21:28:03 -0400 fix: Apply statue form damage bonus after AC This bonus is intended to compensate for slower attack speed, but applying before AC meant it did slightly more than that. I don't think this changes much tbh. -------------------------------------------------------------------------------- 2b27a225a3 | Nicholas Feinberg | 2022-10-13 11:56:08 -0700 Move Anguish into a later Kiku gift (IguanaIguana) Mostly to make the second spell gift nondeterministic. Worth doing some further shuffling around here, maybe reducing gift size somewhat. -------------------------------------------------------------------------------- 2b75c2a55d | advil | 2022-10-13 14:43:25 -0400 fix: make InvMenu examining a bit less crash-prone InvMenu keeps turning out to have been used in various cases for non-inventory items (e.g. via DescMenu). A more ambitious refactor idea might be to actually just intentionally turn this into a more general item menu class, but I won't do that right now. This commit makes examine_index behave more gracefully if the menu items are not `InvMenuItem`s, something that would have also headed off crashes for a use case like that fixed in 475f425cf99f. (And probably other DescMenu uses.) -------------------------------------------------------------------------------- 475f425cf9 | advil | 2022-10-13 13:00:50 -0400 fix: prevent a help lookup crash This code uses DescMenu, which for some reason, is a subclass of InvMenu, which is expecting its items to correspond to inventory items. We need to override on_examine therefore to prevent crashes. The following comment in directn.cc unfortunately still remains unresolved: `// XX this probably shouldn't use InvMenu, why does it?` -------------------------------------------------------------------------------- e22c4ad894 | hellmonk | 2022-10-12 22:53:24 -0400 fix: Update battlesphere HD when recalling -------------------------------------------------------------------------------- c2e06944d9 | hellmonk | 2022-10-12 22:28:29 -0400 adjust Shatter damage Random round and apply AC normally, rather than with a penalty of 1 -------------------------------------------------------------------------------- e375a5e35f | hellmonk | 2022-10-12 22:21:40 -0400 randomly round ddoor power checks -------------------------------------------------------------------------------- 8b876d146b | hellmonk | 2022-10-12 22:19:25 -0400 randomly round disjunction duration -------------------------------------------------------------------------------- 4eb8f405f2 | advil | 2022-10-12 20:33:50 -0400 docs: update server admin comment for config.py Make this comment a little bit more general, so as not to mislead someone running a dgamelaunch-config server (which will no doubt break if someone does try to use config.yml there). -------------------------------------------------------------------------------- 902f57cb4f | advil | 2022-10-12 20:26:52 -0400 refactor: adjust how games are loaded dgamelaunch-config servers currently can't load from games.d (and because of the default values, attempting to prevents servers from starting), but with the previous sequence of commits, the default is never to put games configuration in the config module at all. This commit adjusts how the double bind is resolved. By default, if `games` is defined in the config module, games.d files are not loaded. This can be overridden by setting the old option `use_game_yaml` to True, if someone wants this for some reason. I've also fixed up a few issues in how games are loaded. For backwards compatibility, the old option `games_config_dir` is treated as a boolean-like that will have the same effect (previously it was set to None to prevent reading games.d on some servers). This commit also adjust the config.py documentation accordingly and puts back in the games dictionary as an example. (Together with previous commits) resolves #2655 -------------------------------------------------------------------------------- 30c107533f | Alex Jurkiewicz | 2022-10-12 20:23:32 -0400 refactor: Keep use_game_yaml setting Required by dgl-config. -------------------------------------------------------------------------------- 55547e2a59 | Alex Jurkiewicz | 2022-10-12 20:23:32 -0400 refactor: Move all game definitions to games.d/ Manually specifying games in config.py is deprecated. Instead, add them to a YAML file in games.d/. This reduces the pain of pulling in upstream changes to config.py. (Support for config.py-specified game definitions is not going anywhere while dgamelaunch requires it.) -------------------------------------------------------------------------------- 9dacfef450 | Alex Jurkiewicz | 2022-10-12 20:23:32 -0400 feat: Support webserver config.yml override file Rather than requiring server operators to modify config.py in-place (and deal with the pain of merge conflicts when updating webtiles server code), allow them to specify server-specific configuration in a .gitignore'd config.yml file. -------------------------------------------------------------------------------- 79d7498bdb | Alex Jurkiewicz | 2022-10-12 20:23:32 -0400 refactor!: Hardcode games_config_dir There's no need to support customising the 'games.d/' path, and might just end up confusing in future. Also, simplify and improve the messaging related to loading game configs in this directory. The existing messaging was slightly verbose, a holdover from its original development. Finally, improve the sanity checking to ensure YAML files are maps (not eg lists or single values). This was already asserted implicitly, but now will be handled without instantly crashing. BREAKING CHANGE: webserver config option games_config_dir removed (now is always "games.d"). -------------------------------------------------------------------------------- 6b895097cc | advil | 2022-10-12 17:36:52 -0400 fix: remove some missed commented code -------------------------------------------------------------------------------- d42a0f4da5 | advil | 2022-10-12 17:32:10 -0400 feat: waypoints for all levels (gammafunk) Two changes: relax the constraints on when waypoints can be set, and ensure that waypoint housekeeping is correctly done for waypoints on non-connected levels and especially in the abyss. (Luckily, I think the conditions under which rune detection needs an update are identical to those under which waypoints need reset.) These are marginally useful at best for a human user on some of these levels, so possibly only the lua API should allow e.g. waypoints in the abyss. But, they are useful for a bot that needs to establish reference points. UI note: the `G` command does not work on non-connected levels, but waypoints can still be accessed and traveled to interactively on these levels in a slightly clunkier way via `X`. I haven't actually checked the lua API so if it has a restriction like this for waypoint travel, that may be worth removing. But I have the sense that the use case of this is really for reference points, not travel. -------------------------------------------------------------------------------- 98ac1a292c | Nicholas Feinberg | 2022-10-12 09:51:20 -0700 Re-fix damage ratings aa749bd8e47d5e8e434b133971969834f8024a58 was incoherent. -------------------------------------------------------------------------------- 41c1d76940 | hellmonk | 2022-10-11 23:48:44 -0400 correct the firestorm targeter It is always possible to get a radius 3 firestorm if power is > 0. -------------------------------------------------------------------------------- 4b55263497 | hellmonk | 2022-10-11 23:38:45 -0400 random round arcjolt damage -------------------------------------------------------------------------------- defe565e8d | hellmonk | 2022-10-11 23:10:30 -0400 cleanup -------------------------------------------------------------------------------- bdec91c41a | hellmonk | 2022-10-11 23:10:30 -0400 feat: Icy lair entrance -------------------------------------------------------------------------------- 568b07f25b | hellmonk | 2022-10-11 23:10:30 -0400 adjust minmay_lair_entry_lava Replace the fire dragon with a crab and adjust the vault to prevent vetos. -------------------------------------------------------------------------------- 03e9ba43c7 | hellmonk | 2022-10-11 22:40:12 -0400 randomize confuse/para duration on monsters -------------------------------------------------------------------------------- be970518db | hellmonk | 2022-10-11 22:38:54 -0400 random round confusing touch duration Rather than having breakpoints at low power. -------------------------------------------------------------------------------- aa749bd8e4 | Nicholas Feinberg | 2022-10-11 13:47:54 -0700 Fix UC/Throwing damage rating (#2748) We incorrectly multiplied damage by weapon skill, but that doesn't occur in actual combat. Fixes #2748. -------------------------------------------------------------------------------- 7bf8e6d787 | advil | 2022-10-10 19:49:55 -0400 docs: tweak macos build instructions Try to clarify various aspects of the build instructions, and make it even clearer that the Xcode install isnt' because we are using Xcode. -------------------------------------------------------------------------------- 1121274140 | hellmonk | 2022-10-09 20:23:59 -0400 adjust Kiku actives Reduce the power of wretches and increase its piety cost slightly. Reduce the piety cost of torment. -------------------------------------------------------------------------------- 3111722afa | hellmonk | 2022-10-09 20:10:15 -0400 checkwhite -------------------------------------------------------------------------------- ba8dcd3c80 | hellmonk | 2022-10-09 20:09:45 -0400 round mephitic cloud duration -------------------------------------------------------------------------------- 88f5cd7b0b | hellmonk | 2022-10-09 20:04:31 -0400 correctly cap hibernation at 50 power -------------------------------------------------------------------------------- 3abaafb9f6 | hellmonk | 2022-10-09 19:58:12 -0400 randomize slow hex duration -------------------------------------------------------------------------------- 0740ab4923 | hellmonk | 2022-10-09 19:46:51 -0400 remove slow's hex power buff -------------------------------------------------------------------------------- fbc3a94d58 | hellmonk | 2022-10-09 19:39:09 -0400 remove hidden hibernation power stepdown As far as I can tell, this wasn't accounted for in the targeter. -------------------------------------------------------------------------------- 97d66968fd | Nicholas Feinberg | 2022-10-09 14:16:02 -0700 And unnerf endoplasms (see last commit) -------------------------------------------------------------------------------- 46bee08b82 | Nicholas Feinberg | 2022-10-09 14:15:39 -0700 Derandomize monster Freeze damage dice Make the damage display simple to display without being misleading. -------------------------------------------------------------------------------- 7c5df11ecf | hellmonk | 2022-10-09 16:57:59 -0400 random round dragon call duration -------------------------------------------------------------------------------- 6ac44c9753 | hellmonk | 2022-10-09 16:48:00 -0400 random round infest status duration -------------------------------------------------------------------------------- 3c8e1c8089 | hellmonk | 2022-10-09 16:35:21 -0400 randomly round summon hydra heads Removes yet another power breakpoint; this is a slight buff. -------------------------------------------------------------------------------- 2dd1c91445 | hellmonk | 2022-10-09 16:27:31 -0400 Adjust noxious bog duration Slightly increase variance and randomly round. -------------------------------------------------------------------------------- 2d71ba6e3a | hellmonk | 2022-10-09 16:19:41 -0400 random round bogcloud duration ... when igniting poison with bog tiles in los. -------------------------------------------------------------------------------- 6c849f5caf | hellmonk | 2022-10-09 16:15:28 -0400 adjust Portal Projectile rounding Randomly round accuracy bonus with throwables and duration. -------------------------------------------------------------------------------- e18b8abeca | hellmonk | 2022-10-09 15:44:02 -0400 randomly round freeze max damage. Also brings damage/turn into line with ramparts. -------------------------------------------------------------------------------- 04c3547f4f | advil | 2022-10-09 14:34:56 -0400 feat: mention pan lord flavor color in description This started because it seemed like the ETC_RANDOM possibility is flavorful enough to be worth mentioning explicitly, but I realized it would be good to always include even regular colors. -------------------------------------------------------------------------------- e52a3cb02f | Kate | 2022-10-09 18:26:48 +0100 Reduce the chance per floor of ecumenical altars Redesigned ecumenical altars are generally a much more desirable option than their original fully-random design. They're also more complex (requiring manually checking each individual altar to see its god options). Reduce their chance from 1/2 to 1/4 per floor from D:1-3, so that they'll still be fairly frequent options (available in over half of games), but not so overwhelmingly likely to be some of the first altars found in every game. -------------------------------------------------------------------------------- cb0039aa0c | Kate | 2022-10-08 23:22:05 +0100 Adjust an ecumenical altar vault Reduce its weight slightly, and limit it to two ecumenical altars - placing multiple ecumenical altars now offers a lot more information and a wider selection of gods before committing. -------------------------------------------------------------------------------- e547ba4400 | advil | 2022-10-07 11:12:24 -0400 fix: clean up after a few tests These tests spawn monsters but were not getting rid of them afterwards. Also, a few comments. -------------------------------------------------------------------------------- f7f13252f9 | advil | 2022-10-07 10:48:54 -0400 fix: Ds mutations conflicting with beak after 15c3b865de76 Mutations that block the same eq slot are treated as being in physiological conflict, so after the linked commit beak also blocks horns/antennae. (This may not have been intentional with this commit, it seems not to have been part of the original beak design.) However, for whatever reason, the conflict marking for deletion needs to be handled separately, so deletion of beak on conflict was failing. The main consequence was that beak would block Ds horns but the resolution code couldn't remove beak, leading to test failures (but maybe silent failure in a real game?) This commit adds the conflict marking to match 15c3b865de76 and prevent crashes. However, it may be desireable to treat beak vs horns differently, which would require some hardcoding somewhere (or refactoring). As a side note, there's a comment here that indicates a similar thing might have come up for antennae, but I cannot find current code in physiology_mutation_conflict that matches this comment. It's also possible that affected Ds games would need explicit save compat for this fix that I haven't added (if so, they'll be missing some horns they are due.) -------------------------------------------------------------------------------- 8710fb66a6 | advil | 2022-10-07 10:14:12 -0400 fix: don't crash if mut_species test removes flight Because this would happen at 0,0, this caused a bounds check crash. Possibly rare for this test, as this doesn't seem like it could be a new thing. -------------------------------------------------------------------------------- f2db51d15e | Nicholas Feinberg | 2022-10-05 07:25:59 -0700 Revert "fix: correct webtiles hidpi implementation" Probably cauing visual artifacts. Rolling back for now. This reverts commit c90f4eb94e883a330bf49edabe2f271034f0982d. -------------------------------------------------------------------------------- edb9141078 | Michael Del Monte | 2022-10-04 14:21:34 -0700 Adds `ac`, `ev`, and `sh` functions to the lua `you` object. -------------------------------------------------------------------------------- 09a5e214e2 | Nicholas Feinberg | 2022-10-04 10:41:14 -0700 Mention weakness stinger blocking cloaks (Huan) In the mutation description. -------------------------------------------------------------------------------- 2cd6803ab7 | Kate | 2022-10-04 17:13:57 +0100 Remove the Palentonga roll mutation (#2766) It was still randomly obtainable (by any species, but with no actual effect). Closes #2766. -------------------------------------------------------------------------------- be4c2caf12 | advil | 2022-10-04 11:17:08 -0400 fix: two typos -------------------------------------------------------------------------------- 4ec62bdb57 | Nicholas Feinberg | 2022-10-04 07:39:56 -0700 Add CipHuK's acrobat icon to UNUSED (#2607) -------------------------------------------------------------------------------- 36afe0b79d | Nicholas Feinberg | 2022-10-04 07:36:35 -0700 Recolour acrobat icon (Sastreii) To reduce similarity to the the 'magic regeneration' amulet icon. Closes #2607. -------------------------------------------------------------------------------- 5a3754191e | Marcelo Henrique Cerri | 2022-10-04 07:25:52 -0700 Add show_blood option (default true) Add a new option show_blood to control if blood splatters and bloody corpses should be shown, or should be replaced with skeletons and nothing respectively. Might be nice to have tile variants for a few monsters as well, eg flayed ghost. Closes #2357. -------------------------------------------------------------------------------- c90f4eb94e | advil | 2022-10-04 07:09:31 -0700 fix: correct webtiles hidpi implementation This commit reverts 3925e268bea408. To get hidpi to work in a browser canvas object, the internal dimensions need to be twice that of the external dimensions (essentially). The normal way of implementing this is to multiply the internal dimensions by devicePixelRatio, and scale the canvas accordingly. We used to do this, but 3925e268bea40 changed things so that the external dimensions were halved. This was, according to the commit message, in order to prevent scaling artifacts on firefox. (Where the salient fact is that window.devicePixelRatio on some browsers, these days including chrome/firefox but not safari, also changes with browser zoom.) However, a consequence is that tile rendering is halved on hidpi devices, exactly not what should happen. This change also made for a lot of messy code that had to interact directly with devicePixelRatio. The half-size tile rendering wasn't immediately noticeable because the dungeon is auto-scaled, and the monster list matches its scale to the dungeon. But, icons in menus and popups instantiate the problem, and scaling them to the dungeon size is not ideal. The action panel also had some workarounds for this that I didn't fully understand at the time. (I only noticed this myself after many years of working on this stuff because I switched from a regular-density monitor to a 4k monitor of similar size, even though I've used retina devices for a long time. Hidpi devices have been broken for so long that I won't be surprised if we get requests to readd this behavior as an option or something, menus may look odd now to people who have only ever played on hidpi.) In my testing so far, I can't really detect any rendering differences between the approach after this commit and the approach in 3925e268bea408. However, I'm not exactly sure of what the original issues were, and this commit should be tested on a non-hidpi device before merge. -------------------------------------------------------------------------------- 01b79a254e | Nicholas Feinberg | 2022-10-03 22:15:17 -0700 Book rebalance, pt 2 Add a new book, Maxwell's Memoranda, to shift books back toward an average of 3 per book. (I believe this is about as close as we can get - we're exactly one spell over at present.) -------------------------------------------------------------------------------- aa07282108 | Nicholas Feinberg | 2022-10-03 21:51:24 -0700 Note insubstantiality in spell targeters For Sticky Flame and Fastroot (wand of roots), since it affects both. -------------------------------------------------------------------------------- 8d5dd66c5c | Monkooky | 2022-10-03 21:36:58 -0700 Documents insubstantial in the monster x-V view As per title. Also documents Sticky Flame's inability to stick to insubstantial monsters. -------------------------------------------------------------------------------- 6573418d01 | Nicholas Feinberg | 2022-10-03 21:29:59 -0700 Fix: Don't let Spriggans cast Swiftness (Monkooky) While in water, they were incorrectly counted as being slow, allowing them to cast Swiftness and then run around outside the water. Nice! Anyway, now they can't. Closes #2739. -------------------------------------------------------------------------------- d8d8a64377 | Zhang Kai | 2022-10-03 21:17:54 -0700 Update gods.txt (Chinese translation) Closes #2716. -------------------------------------------------------------------------------- 7032f90272 | Zhang Kai | 2022-10-03 21:15:54 -0700 Update ability.txt (Chinese translation) Closes #2715. -------------------------------------------------------------------------------- 317d1de1b5 | 张凯 | 2022-10-03 21:14:48 -0700 Update clouds.txt (Chinese translation) Closes #2692. -------------------------------------------------------------------------------- a836afdb34 | 张凯 | 2022-10-03 21:13:29 -0700 Update branches.txt -------------------------------------------------------------------------------- 0d51db2871 | 张凯 | 2022-10-03 21:07:44 -0700 Update spells.txt (Chinese translation) Closes #2690. -------------------------------------------------------------------------------- e521aab31e | 张凯 | 2022-10-03 21:04:06 -0700 Update monsters.txt (Chinese translation) Closes #2663. -------------------------------------------------------------------------------- 17fea662fc | Nicholas Feinberg | 2022-10-03 20:58:24 -0700 Book rebalance, pt 1 Start moving books back toward an average of 3 spells per book. -------------------------------------------------------------------------------- 1efd971db8 | 张凯 | 2022-10-03 20:56:45 -0700 Update commands.txt -------------------------------------------------------------------------------- 15c3b865de | Monkooky | 2022-10-03 20:49:28 -0700 Update mutation.cc so ashenzari correctly blocks beaks -------------------------------------------------------------------------------- 960f186ce7 | kd7uiy | 2022-10-03 20:45:58 -0700 New nickname for Xom Added a new option for Xom's nickname, Xom the Chaotic. -------------------------------------------------------------------------------- 22508d058b | Nicholas Feinberg | 2022-10-03 20:44:05 -0700 Fix infusion cost (pisastrish) Various things that killed the defender could result in infusion not costing MP, e.g. special unrand effects. Fix this by paying infusion MP costs earlier. Closes #2712. -------------------------------------------------------------------------------- 6a831dfdda | Nicholas Feinberg | 2022-10-03 20:25:00 -0700 Simplify Mad Mage's Maulers Make them use the same damage multipler per MP spent as normal infusion gloves, instead of 50%. -------------------------------------------------------------------------------- 8c06622978 | Nicholas Feinberg | 2022-10-03 17:26:17 -0700 New Armataur player tile (Sastreii) Get riiiipped -------------------------------------------------------------------------------- f89613a6cc | Kate | 2022-10-04 00:02:29 +0100 Fix Momentum Strike not applying -Move on friendly fire -------------------------------------------------------------------------------- 5dbf5516b7 | Kate | 2022-10-03 23:36:12 +0100 Update docs for no_tele_into (advil) It is, and always has been, very funny to teleport the player into hellion island. (In general, no_tele_into should only be used to prevent the player from getting trapped - big groups of monsters and dangerous vaults are just tough luck!) -------------------------------------------------------------------------------- 33132b1f91 | Kate | 2022-10-03 23:36:12 +0100 Rebrace -------------------------------------------------------------------------------- 22c9a3c0ff | advil | 2022-10-03 11:54:21 -0400 refactor: don't end ozo's on temporal distortion (hellmonk) This commit refactors the movement aspect of chei's temporal distortion and step from time to use a RAII object for common code, and allow a bit more flexibility for ice movement expiry. After this commit, neither rampart's nor ozo's expire with temporal distortion, and they both do with step from time. The difference between the two abilities could be easily changed, the difference between the two spells a bit less so. The internal player implementation is slightly messy because I don't want to try to change the actor/monster ::moveto signature. -------------------------------------------------------------------------------- 2a4cff5a3b | advil | 2022-10-03 11:01:23 -0400 fix: bog and rampart status descriptions Both missing `status`, hence weren't properly showing up. I've also tweaked the wording of the bog status message to indicate the toxic bog immunity it grants. -------------------------------------------------------------------------------- c626debdff | Monkooky | 2022-10-03 07:39:50 -0700 Stop momentum strike from using vhi's checks momentum strike case was missing a break; -------------------------------------------------------------------------------- d9c2deaf24 | Nicholas Feinberg | 2022-10-02 22:08:15 -0700 Improve low-power Lesser Beckoning Halve power cap from 100 to 50, and increase min range from 2 to 3. Should make it more usable for reasonable characters. -------------------------------------------------------------------------------- 105a1d9ad3 | Nicholas Feinberg | 2022-10-02 22:06:13 -0700 Fix Armataur manual abbreviation (elliptic) AT -> At, matching Merfolk etc. -------------------------------------------------------------------------------- d62a825edf | Nicholas Feinberg | 2022-10-02 21:10:00 -0700 Rework Armataur aptitudes Magic and throwing aptitudes were bad to encourage use of the rolling charge, which no longer exists. Upgrade those and defensive apts (HP, Armour), plus Stealth as a funny combo with rampage. Then shift other apts down to compensate for overall buffs. Try to avoid overlap with Hill Orc and Ogres. -------------------------------------------------------------------------------- ce2a380349 | Nicholas Feinberg | 2022-10-02 21:10:00 -0700 Cut Armataur Curl Sort of a complicated effect that's hard for players to do that much with. Let's spend our complexity budget elsewhere. -------------------------------------------------------------------------------- f2e57c08ab | Nicholas Feinberg | 2022-10-02 21:09:45 -0700 Add 'tongue' Armataur mutations The main feature here is that Armataurs get double potion effects. Double healing! Double status effect duration! Double degeneration, double mutations, double !xp! It's chaos here. (Healing/mp restore from cure/!hw/!magic/!ambrosia is doubled, other durations are doubled.) Then flip it around a little and make scroll reading 50% slower. This is not a large penalty, just sort of a cute twist. They're reverse mummies..? (This will probably get cut eventually.) The code added in potion.cc is godawful and I'm very sorry. -------------------------------------------------------------------------------- c40470cdd7 | Nicholas Feinberg | 2022-10-02 20:55:46 -0700 Give Armataurs Rollpage It's rampaging, but roll-themed. Seems like a cute property for a species to have, and an armadillo-pangolin species needs to roll up in some way. -------------------------------------------------------------------------------- 2a6e7f69e1 | Nicholas Feinberg | 2022-10-02 20:55:46 -0700 New spell: Vhi's Electric Charge (L3 Tloc/Air) As promised, the palentonga rolling charge has become a spell. Some notable differences: - The extra damage is electric, rather than physical. That is, enemies with rElec take no extra damage from an electric charge. - Power adds a little more bonus damage, up to 33% at max power. (That is, a total of +133% damage at max range.) - Since some users won't have sInv, the spell now passes through intervening enemies, and does its darned best to displace anything on the final space. (Blinking, teleporting, banishing, or just murdering as needed.) - Stationary enemies are invalid landing targets, on the principle that they really shouldn't be moved and are rarely invisible. Fingers crossed. It's in the Warper start book, replacing Gell's Gravitas, as part of an attempt to make the start more focused on being a 'warrior-mage'. It might be a little strong at level 3, but we can retune it as needed. It is probably very buggy. I'm quite scared. Tile by Sastreii. -------------------------------------------------------------------------------- eb9d758594 | Nicholas Feinberg | 2022-10-02 20:55:46 -0700 Remove Rolling Charge This ability still seems quite fun, but it seems like it'll work better as a spell (where it can combine with many different species in interesting ways) than as a species (where it only combines with a few backgrounds in distinctive ways). Let's move it out for now. Also remove Armataurs' innate sinv, since that only existed for Rolling Charge UI reasons. -------------------------------------------------------------------------------- ba81c3259c | Nicholas Feinberg | 2022-10-02 20:55:32 -0700 Rename Palentonga to Armataur The name 'palentonga' was intended to be a bit more subtle than 'felid', 'octopode' or even 'barachian' - to be an 'animal-person' species name that merely hinted toward the species (pangolin), rather than shouting it from the rooftops. But of course, they weren't exactly pangolins - they were giant, and had four legs plus two arms... This was too many things at once! If the concept was simple and familiar, we could have used a more exotic name, and the rest of the flavour would have put players on the right path. But as it was, players were lost. There was no resonance. So, let's rename em. 'Armataur' is a simple 'armadillo' + 'centaur' combination. (Yes, I know that properly they should be 'cenadillos'...) The abbreviation is At, to avoid ambiguity with the Artificer start. It's exciting, it's hip, it's fun. Let's try it out. -------------------------------------------------------------------------------- 4db885d750 | advil | 2022-10-02 13:26:35 -0400 fix: don't do excursions during shopping list purchases Shop menus work with various data structures that are wiped out by a level excursion (the shop data itself, plus item data for anything in the shop). Buying an unid'd item could, however, trigger a level excursion if other items of the same type are on the shopping list on different levels. This commit refactors so that (a) there's a way of preventing level excursions (causes a crash by default if enabled), (b) the shopping list will detect if excursions are disallowed and store what needs to be done, and (c) there's a way to manually trigger any postponed excursions. This is possibly still a bit brittle if no_excursions are used more widely, since the shopping list update will need to be manually called in other cases. But, it's still better than allowing arbitrary excursions as a side effect of apparently innocuous id calls. Historically I would guess this bug was widely possible, though I suspect it shouldn't be any more. Resolves #2760 -------------------------------------------------------------------------------- 1cb5dbfd7a | gammafunk | 2022-10-01 21:14:00 -0500 feat: Adjust an oklob stair vault (CarefulOdds) This vault is pretty polarizing among players since it guards all three downstairs with oklobs and places in Lair. Hence it forces you to fight through the vault to proceed, and this can involve reseting the fight until your combat results are favorable enough. Stationary monsters are always difficult to work with in terms of avoiding trivial resets of fights, but if we wanted to prevent this, we'd have to remove stationary monsters. This commit doesn't do that, but it does rebalance things a bit so that the vault places less often, and when it does place we're usually not forced to fight through it. Lower the weight to 2 and have the third staircase place inside only 1/3 the time. It's not as interesting to seal off only one staircase, so always place at least two. It's fun to torment players once and a while with mandatory stationary monsters, but with these changes mandatory clearing of this vault will be much more rare. Also remove placement in Elf and Depths, since by then oklobs are a bit less interesting as opponents, and while there's still somewhat formidible in Elf, the theme isn't really there. Move the placement in Snake to Swamp, where the thorn hunters this vault uses for post-Lair make more sense, and remove the acid blobs. -------------------------------------------------------------------------------- dd20fb75b6 | Nicholas Feinberg | 2022-10-01 11:55:24 -0700 Fix Arcjolt uselessness check -------------------------------------------------------------------------------- 972bcd5032 | Nicholas Feinberg | 2022-10-01 11:48:39 -0700 Fix Arcjolt animation -------------------------------------------------------------------------------- bc10bd73c2 | Kate | 2022-10-01 11:30:43 +0100 Add message for casting Momentum Strike with no target -------------------------------------------------------------------------------- 3c4d611d4f | Kate | 2022-10-01 11:12:31 +0100 Reword Momentum Strike uselessness message -------------------------------------------------------------------------------- c5509c9e31 | Nicholas Feinberg | 2022-09-30 20:53:23 -0700 Fix holy unrand fallbacks (elliptic) Don't place randart vorpal eudaemon blades! -------------------------------------------------------------------------------- d1b97b9b04 | Nicholas Feinberg | 2022-09-30 20:50:23 -0700 Increase player base regen by 0.2 (elliptic) To make early game resting less annoying. Someone can revert or comp this later, if desired. -------------------------------------------------------------------------------- 85af917532 | Nicholas Feinberg | 2022-09-29 21:10:15 -0700 Only trigger Momentum -Move on a hit Remove a feels-bad. I'm a little concerned about balance here, but hopefully it's fine. -------------------------------------------------------------------------------- 06f667207d | Monkooky | 2022-09-29 13:28:04 -0400 Fixes power leap, line pass, and shadow step (#2756) -------------------------------------------------------------------------------- 0b976cbdc4 | Nicholas Feinberg | 2022-09-28 20:52:16 -0700 Clean up Momentum Strike's -Move Make it only prevent voluntary physical movement - walking, flying around, hopping, etc. Translocations are still unaffected, as are other sources of movement - so you can be trampled, etc. Rewrite the descriptions to be a little clearer. Also rename the old -Move from -Go to Stuck. -------------------------------------------------------------------------------- 62a5988fa7 | Nicholas Feinberg | 2022-09-28 20:24:55 -0700 Don't arcjolt rElec+++ enemies Fixes a warning when arcjolting next to a summoned lightning spire. -------------------------------------------------------------------------------- 5d06c95188 | Nicholas Feinberg | 2022-09-28 10:16:58 -0700 Continue to ruin ebering's vision (Monkooky) Remove an overlooked reference to astral vision / xray_vision, per 1891117ce. -------------------------------------------------------------------------------- 1891117ce2 | Nicholas Feinberg | 2022-09-27 19:03:23 -0700 Remove Ashenzari's Astral Vision (hellmonk) Very thematic, but quite buggy - breaks monster AI, resting, etc. Let's axe it for now. Could maybe bring it back someday as an active, similar to old Ash. -------------------------------------------------------------------------------- 83d47c8028 | Nicholas Feinberg | 2022-09-27 17:47:20 -0700 Rework Volcanic Tap into Momentum Strike Switch it from Conj/Fire/Earth to Conj/Tloc, to reduce the number of spells in the starting book and to push more toward hybrid-friendly schools. Also frontload the power of the spell a bit more. Tile is a placeholder. -------------------------------------------------------------------------------- c060d6dac2 | Nicholas Feinberg | 2022-09-27 17:18:09 -0700 Add new loading art (Gompami) Kobold with a triple crossbow! -------------------------------------------------------------------------------- 2ba88f6271 | Nicholas Feinberg | 2022-09-27 14:05:35 -0700 Fix Airstrike (nicolae) Very bad merge in 068b7645628b362d40088dc8c96a52e76a035056. -------------------------------------------------------------------------------- dd60e06945 | Kate | 2022-09-27 15:58:33 +0100 Fix monster spellcasting test failure -------------------------------------------------------------------------------- cfceee88d3 | advil | 2022-09-27 07:55:25 -0400 fix: don't crash in hailstorm targeting 068b7645628b seems to have a bad cut and paste that removes the return value here, leading to crashiness. -------------------------------------------------------------------------------- 068b764562 | Nicholas Feinberg | 2022-09-26 21:57:55 -0700 New spell: Volcanic Tap (L2 Cj/Earth/Fire) Try three at a level 2 start spell for Reaver. Volcanic Tap is a range 4 smitey (but capable of missing) damage spell, comparable to Stone Arrow. However, it locks the player in place with -Move for 5-8 turns after a cast, and can't be recast until that status wears off. For the first few dungeon floors, it's a 'cast once per fight' spell - a strong pull toward continuing to cast rather than immediately switching to armour. Later, it becomes more situational, since getting locked in place in fights against multiple enemies can be extremely dangerous. Let's try it out. -------------------------------------------------------------------------------- 895c20ea24 | Nicholas Feinberg | 2022-09-26 21:57:55 -0700 Tweak Hailstorm To maybe make it more appealing to Reaver, move it to level 3 and give it a miss chance. This should also serve the cause of making more spells care about accuracy. -------------------------------------------------------------------------------- 161da3a0d4 | Nicholas Feinberg | 2022-09-26 21:57:43 -0700 New background: Reaver A new warrior-mage background, Reavers primarily focus on melee combat, but have a small set of backup spells to use for tough situations. These spells have limitations (Drain, -Move, or simply positioning) that make them difficult or impractical to use as a primary offense. Reavers are intended to be a flexible background - shifting more toward melee, casting, or neither (remaining a hybrid) as the game goes on. Tile by Sastreii. Partially reverts 1cc687962fc2b6 (2011). -------------------------------------------------------------------------------- f478ae5f9b | Nicholas Feinberg | 2022-09-26 21:53:45 -0700 Switch out Ice Elementalist's Hailstorm for SIB Players have historically been a bit unhappy with Hailstorm as the top-end of the Ice Elementalist spellset. It's an interesting spell, but tricky to use effectively, especially without Summon Ice Beast or Metabolic Englaciation to help maintain distance between the player and their enemies. That trickiness suits Reaver exactly, though, so I'm stealing the spell from IE. In exchange, Summon Ice Beast returns to the IE start. 1b49dfe8c25f9 (2021) removed Summon Ice Beast because it was 'overly defining' for the background (and we already have another background defined by summons!). However, now that there's a 1-beast summon limit on the spell and now that it's not stealing attention from Hailstorm, that should be much less of a problem. Let's try it out! -------------------------------------------------------------------------------- 833205f978 | Nicholas Feinberg | 2022-09-26 21:53:37 -0700 New spell: Kiss of Death L1 Conj/Necro. Does high draining damage to an adjacent foe, starting at 2d5 and rising to 2d13 at max (25) power. However, also inflicts heavy drain on the player, equivalent to a use of Ru's Apocalypse. Can bail you out of a tough spot early on, but be careful about over-using it! Intended as a starting spell for the new Reaver background. Kiku can also grant it. Tile by Sastreii. -------------------------------------------------------------------------------- b106f4c828 | Kate | 2022-09-26 21:55:49 +0100 Let Static Discharge affect rElec monsters As long as they're not completely immune to electricity, they should still be valid targets. Also fix resistance being applied twice for its damage. -------------------------------------------------------------------------------- 71e3da25a7 | Kate | 2022-09-26 21:55:49 +0100 Fix missing save compat for a removed vault -------------------------------------------------------------------------------- d541229a0b | hellmonk3 | 2022-09-26 16:50:46 -0400 feat: hermit pendant guarded unrand Also, adjust pendant capitalization (elliptic) -------------------------------------------------------------------------------- f412724dd0 | hellmonk3 | 2022-09-26 16:40:49 -0400 feat: new Okawaru overflow Teaches the player what a real friend looks like. -------------------------------------------------------------------------------- 343ea32564 | advil | 2022-09-26 12:43:43 -0400 fix: save compat for 1eb326923381 Without this, saves where the vault has already placed will crash on loading the level. Alternatively one could disable this vault in the save compat, but I don't have a test save with the vault on hand. -------------------------------------------------------------------------------- 7f746667c4 | Nicholas Feinberg | 2022-09-25 22:19:34 -0700 Fix @ attack delay with haste + finesse (elliptic) Don't claim that haste stacks nicely with finesse in @. I'm not sure when this became broken - it looks like maybe we tried to factor out haste when displaying attack speed in @, and didn't fix the finesse code after we started including haste? -------------------------------------------------------------------------------- 4d237caa85 | Nicholas Feinberg | 2022-09-25 22:10:59 -0700 Let formicids shaft through Tomb I believe this was only forbidden by accident; shafts can't generate as random malevolence effects in Tomb, which incidentally broke Formicid self-shaft. -------------------------------------------------------------------------------- 30045a6dda | Nicholas Feinberg | 2022-09-25 22:06:32 -0700 Mark delvers pre-shafted (acrobat) Don't allow delvers to be shafted in D, for lore and kindness reasons. -------------------------------------------------------------------------------- 10421eeba7 | Nicholas Feinberg | 2022-09-25 21:56:41 -0700 Give lochaber axe *Drain (acrobat) To discourage swapping for higher-damage weapons against single targets. Lochaber axe is an oldschool weapon - if you just toss it aside for newfangled 'bardiches' and 'executioner's axes' at the least excuse, you deserve to get haunted! acrobat also suggested giving a vorpal brand, but that seems excessive to me. If you want the spectacular power of a 5x5 cleave, you shouldn't get mega damage per hit too! -------------------------------------------------------------------------------- 03d90e2e6d | Nicholas Feinberg | 2022-09-25 19:22:19 -0700 Display monster Arcjolt damage (ardl) -------------------------------------------------------------------------------- 748be8cbb9 | Nicholas Feinberg | 2022-09-25 19:18:36 -0700 Remove AK (the background tile) Missed a spot earlier. Partially reverts 1d83d27b2f203060e91c6742e3b95ad49ca714ac, in a sense. -------------------------------------------------------------------------------- fbc108b0ab | Nicholas Feinberg | 2022-09-25 19:15:22 -0700 Fix: banished pharaohs shouldn't bind souls (ardl) Only killing pharaoh ants should trigger the bind soul effect. -------------------------------------------------------------------------------- 7370640ec8 | Nicholas Feinberg | 2022-09-25 14:10:51 -0700 Remove unused targeter_shotgun Gone but not forgotten 7, add fighter flag to mostly compensate accuracy, add XP multiplier to mostly compensate XP. -------------------------------------------------------------------------------- ea98e250e0 | advil | 2022-09-20 17:08:18 -0400 feat: more butterflies This commit makes two changes: * Substantially increase the density of range 2 butterflies. * Approximately double the total amount of butterflies, placing the second set further from the player. Too far? Not enough? I'm not sure... It might be more sensible to explicitly randomize based on local density, not number, but this commit works with existing summon placement tricks. Because it doesn't do this, this commit maybe makes things too strong in enclosed areas? But it doesn't do anything about butterflies dying easily. -------------------------------------------------------------------------------- 630cfc4551 | Nicholas Feinberg | 2022-09-19 21:27:31 -0700 Fix delvers + ?fog + ?butterflies (Monkooky, Solitudinal) Don't show ?butterflies in the unknown items list after you've already found a ?fog on the floor - item sets make that impossible. Closes #2711. -------------------------------------------------------------------------------- b40fab5c76 | Nicholas Feinberg | 2022-09-18 13:37:51 -0700 Make fleeing monsters enter clouds Someone in #dcss suggested this, but I can't find their post again now that I'm looking for it. Anyway, it seems fun. If this makes the Cause Fear spell too powerful, we may simply have to r-word it. -------------------------------------------------------------------------------- 8056f4cfa4 | Nicholas Feinberg | 2022-09-18 13:33:12 -0700 New Cinder Acolyte (Sastreii) -------------------------------------------------------------------------------- ba5a0857d8 | Nicholas Feinberg | 2022-09-18 13:29:25 -0700 Make friendlies avoid blastsparks (acrobat) Make it take a little more work to blow up your pals. -------------------------------------------------------------------------------- 3d28bfe2ac | Nicholas Feinberg | 2022-09-18 13:25:17 -0700 Prompt before walking into blastsparks And don't autoexplore into em, etc. -------------------------------------------------------------------------------- 28931fb96c | Nicholas Feinberg | 2022-09-18 12:58:36 -0700 Make monsters cheat when casting Sandblast (hellmonk) It's too much of a pain to make them take 1.5x time, so make em take 1x instead of 2x. -LOC! -------------------------------------------------------------------------------- 5188dcd197 | Nicholas Feinberg | 2022-09-18 12:57:47 -0700 Fix Arcjolt noise (acrobat) -------------------------------------------------------------------------------- aceff491a1 | Nicholas Feinberg | 2022-09-18 12:54:27 -0700 Make the Robe of Misfortune an early unrand (gammafunk) Seems funny. -------------------------------------------------------------------------------- cbaa6ad2a4 | robertxgray | 2022-09-18 20:28:10 +0100 Fix missing newline in the options guide This breaks the corresponding help dialog in small screens. Bug introduced in f02deff4a79ecda93b89ecfb91e49eea323dc6f2. -------------------------------------------------------------------------------- 78081006d9 | Kate | 2022-09-18 20:25:35 +0100 Fix Golubria timers being stopped by terrain changes (#2728) If all the existing passages of Golubria on a level were temporarily removed (for example by casting Noxious Bog, or by an elemental wellspring creating water), their timers wouldn't resume when the terrain expired and they'd remain permanently (or until restarted by some other action such as reloading the game or casting the spell again). Fix by reapplying the relevant level state whenever any passages are created again. Closes #2728. -------------------------------------------------------------------------------- 51eefa89be | advil | 2022-09-17 14:08:41 -0400 fix: remove a spurious file (Goratrix) Thematic name, but no idea where this came from. -------------------------------------------------------------------------------- 90ed53a01c | advil | 2022-09-17 11:05:59 -0400 fix: tweak shapeshifter notes * indicate known shapeshifters on seen notes in chardumps. (Note: this still doesn't apply to shifters that change out of LOS, their known flag gets dropped in this case) * Reorder the "change" note and any following "seen" note, it makes more sense this way. The ordering here seems to be a little bit delicate, so hopefully these changes (especially the second one) doesn't have any further unexpected side effects... -------------------------------------------------------------------------------- 91d0c66ccf | hellmonk | 2022-09-16 22:52:57 -0400 reduce static discharge damage Still a bit too good with lower power cap. -------------------------------------------------------------------------------- 2a1322497e | advil | 2022-09-14 12:58:21 -0400 fix: mostly disable item actions in menu describe popups The examine changes in 0.29 made it possible to get to describe popups in basically every item-oriented menu, and by default, item actions were enabled for these popups. Aside from the regular inventory menu, these actions are more weird than useful, and some are quite buggy (e.g. (d)rop from the drop menu). In a few cases I can imagine these making sense, but the describe popup action code is not very well suited to custom item lists, so it is a lot more straightforward to simply blanket disable for most InvMenus. Still enabled for regular inventory, and stash menus (but in this case, only ground item actions show up). Resolves #2713 -------------------------------------------------------------------------------- b27577e5d9 | Kate | 2022-09-13 20:45:13 +0100 Fix Arcjolt crashing on dismissed summons -------------------------------------------------------------------------------- c8d74c9d4e | Kate | 2022-09-13 19:38:21 +0100 Show when monsters are hurt by Arcjolt -------------------------------------------------------------------------------- ecb607e51a | Kate | 2022-09-13 19:30:34 +0100 Don't let Arcjolt travel through walls/out of LOS Letting Arcjolt travel through metal walls is intended to be for theme reasons but is inconsistent with how metal walls interact with other lightning spells, and also allows damaging monsters inside vaults from safety. Also fix the spell being able to continue past the caster's LOS. -------------------------------------------------------------------------------- a018f8e90f | advil | 2022-09-12 20:46:10 -0400 fix: maybe quiet another gcc warning A silly warning deserves a silly macro solution. Resolves #2658, and half of #2673 -------------------------------------------------------------------------------- 66a3b8458b | advil | 2022-09-12 20:38:26 -0400 fix: maybe quiet a gcc warning These conditions on wchars were written in an overly involved way that was preventing gcc from detecting that `key` was defined or unused for every condition. -------------------------------------------------------------------------------- 3b1a8e4ee4 | advil | 2022-09-12 17:53:24 -0400 fix: use only annotated tags for version info The new CI script for building debs uses an action that has a bug whereby it can create a (lightweight) tag to hang files on in trunk, independent of the current branch. This, unfortunately, has played havoc with our versioning. And even more unfortunately, it does not appear that a regular pull/fetch will ever remove stale local tags, so servers need some workaround. To fix this issue and also prevent it from happening again, this commit changes the version scripts to use only annotated tags -- the release guide explicitly uses annotated tags, and I think we have been pretty consistent about it. This also seems more consistent with the intended distinction here (from the git-tag man page, "Annotated tags are meant for release while lightweight tags are meant for private or temporary object labels"). Also, no one currently around can figure out why we are using `--tags` in the version info in the first place, something which appears to go back as far as 2f656a0430f3. -------------------------------------------------------------------------------- 95531337e3 | Nicholas Feinberg | 2022-09-12 13:13:32 -0700 Fix blastsparks + hop (Bardcore) -------------------------------------------------------------------------------- 744e84de5b | advil | 2022-09-12 10:04:14 -0400 feat: `tile_display_mode` for local tiles This implements both hybrid and glyph mode for local tiles, in the dungeon view only. Visually, the implementation matches webtiles reasonably closely, including the awful square rendering in hybrid mode. Glyphs mode is probably more accurately rendered than webtiles as it uses some weird hacks to get the grid to exactly match the font size. Unfortunately extending this to show glyphs in other contexts (sidebar, popups, etc) is a fair amount more work, given the way this is all implemented. (Overall, this is a much more involved patch than the webtiles glyph implementation was, because local tiles defined out most of the necessary info.) This commit also fixes a bug in background rendering in local tiles where the rectangle offset shouldn't have used the glyph offset. -------------------------------------------------------------------------------- 5625c4ed77 | advil | 2022-09-12 10:02:13 -0400 Revert "task: add a trunk reminder for the 0.29 tournament" This reverts commit be8da3892a6db78639d8a0adbdc467c1312d330c. -------------------------------------------------------------------------------- c3f1650bb9 | Nicholas Feinberg | 2022-09-11 21:16:19 -0700 Fix: don't place zombies without attacks For example, via Kiku's Unearth Wretches. -------------------------------------------------------------------------------- c067630892 | advil | 2022-09-11 22:08:08 -0400 fix: more AK tag_upgrade fixes -------------------------------------------------------------------------------- 1eb3269233 | hellmonk3 | 2022-09-11 21:50:38 -0400 remove grunt_zot_stairs_overgrown This vault was spoilery, weird, and not very good by modern crawl standards. -------------------------------------------------------------------------------- 367992a1e3 | hellmonk3 | 2022-09-11 21:49:33 -0400 feat: New early unrand, the Hermit's pendant An amulet of faith that sets your invocations skill to 14 and evocations skill to 0 while worn. Description by Pleasingungus, tile by Sastreii. -------------------------------------------------------------------------------- fa959c11ff | hellmonk3 | 2022-09-11 21:31:25 -0400 nerf Simulacrum The power scaling was a bit too good. -------------------------------------------------------------------------------- 7436db4de4 | hellmonk3 | 2022-09-11 21:30:03 -0400 rework Ignacio spawn rate (#2719) Rather than scaling with runes just do a flat 10% per pan floor in games where he spawns. Let people actually see the lad. -------------------------------------------------------------------------------- 2fa46d2e7a | hellmonk3 | 2022-09-11 20:52:19 -0400 feat: Allow branded quickblade generation seems to be disallowed for legacy reasons; quickblades are already quite rare so it seems fine to allow eg acquiring a branded one. -------------------------------------------------------------------------------- 0feb890e1c | advil | 2022-09-11 20:49:01 -0400 fix: fully remove AK from job selection It was still possible to choose AK by doing jobs first, but then you could only pick species randomly and got converted to a monk on game start. This commit will also fix a tag_upgrade build failure. -------------------------------------------------------------------------------- 8307c4eb84 | advil | 2022-09-11 20:45:48 -0400 fix: webtiles build? e63b5e06755426 commented out `TILEP_PART_DRCHEAD` with a note, but doing this prevents webtiles from building. If this part of e63b5e06 were to be reverted, this commit should be reverted too. -------------------------------------------------------------------------------- a6dd27ae95 | advil | 2022-09-11 20:33:53 -0400 feat: show range in scorch targeter This was implicit, in that out-of-range enemies wouldn't highlight, but it's still very useful ui feedback to so out-of-range squares grayed out. This commit also refactors so that scorch directly uses the targeter when choosing targets, and there is therefore only one code path for ui and actual casting. -------------------------------------------------------------------------------- a887aabcbf | hellmonk3 | 2022-09-11 20:20:31 -0400 feat: Upgrade dk_xom_monty_hall The iguana wasn't much of a "prize" compared to the jellies. Upgrade it to a friendly goblin, with the bonus of matching xom's friendship vault lore. -------------------------------------------------------------------------------- 3b22beffe7 | robertxgray | 2022-09-11 20:17:23 -0400 Add the developer name to the metainfo -------------------------------------------------------------------------------- 921e097f49 | robertxgray | 2022-09-11 20:17:23 -0400 Build debian packages using github actions The script debian_changelog.py checks if the latest version in debian/changelog is the same as the release. If they are not the same, then an automatic entry is added: crawl (2:0.99.0-1) unstable; urgency=low * New upstream release. -- Crawl bot Mon, 01 Jan 2022 12:12:12 +0000 -------------------------------------------------------------------------------- 2701b9a906 | robertxgray | 2022-09-11 20:17:23 -0400 New XDG_NAME build variable This variable configures the XDG resource names. The default names are: - org.develz.Crawl_console (console build) - org.develz.Crawl_tiles (tiles build) -------------------------------------------------------------------------------- 6869e69685 | robertxgray | 2022-09-11 20:17:23 -0400 Configure GitHub Actions for AppImage builds -------------------------------------------------------------------------------- 8c09ba367f | robertxgray | 2022-09-11 20:17:23 -0400 Update AppImage and AppStream - AppImage: Fix missing fonts - AppImage: Prepare files for GitHub Actions - AppStream: Use reverse domain names as identifiers - AppStream: Add content rating -------------------------------------------------------------------------------- 9bf192ea13 | robertxgray | 2022-09-11 20:17:23 -0400 Fix some paths on AppImage builds GAME is used to set the name of the executable. Define SAVEDIR because the current path is used otherwise. -------------------------------------------------------------------------------- b3285335bf | robertxgray | 2022-09-11 20:17:23 -0400 Standardize Linux packages - New build target: install-xdg-data. Installs some files required by Linux packages according to the XDG specifications (freedesktop.org). Related resources stored in crawl-ref/source/xdg-data - New build target: appimage. Builds a Linux AppImage with the help of the install-xdg-data target and the linuxdeploy tool. - Debian build updated to make use of the install-xdg-data target. Common files have been removed from the debian folder. Fixed missing icon in crawl menu item if crawl-tiles is not installed. Use Debian's uses machine-readable format for copyright file. Remove menu files based on CTTE #741573. - Documentation and man page updated. Closes #464 Closes #1256 Closes #2049 -------------------------------------------------------------------------------- 9ddfead1bb | mainiacjoe | 2022-09-11 20:14:43 -0400 Permit a Temple map to actually be placed. (#2688) I suspect this TAG typo is preventing the level builder from choosing this map. -------------------------------------------------------------------------------- 4cabb3c838 | Nicholas Feinberg | 2022-09-11 16:21:10 -0700 Fix the build..? -------------------------------------------------------------------------------- 82223dbcf9 | Nicholas Feinberg | 2022-09-11 16:00:18 -0700 Add rF- and rC- badmuts to the general pool These are impactful without being crippling, and change the way that you evaluate threats. Let people enjoy these without having to get Qazlal wrath first! Getting rF- from an OOF is rough, but so are a lot of malmuts. Players will figure things out. :) -------------------------------------------------------------------------------- cc36c8f8a0 | Nicholas Feinberg | 2022-09-11 15:11:23 -0700 Remove conjure flame further MMaybe fix the tag-upgrade build? -------------------------------------------------------------------------------- 26221c613b | Nicholas Feinberg | 2022-09-11 14:02:01 -0700 Readjust Manifold Assault When I first created Manifold Assault, I intended for it to be an incentive for 'melee' characters to hybridize. In practice, it's mostly used by transmuters, since they don't have to balance the costs of getting a spell castable in armour. It's popular there, and that's fine, but the original design goal isn't being accomplished. So, lower Manifold Assault to L4 (from L5), and make it hit half as many targets when used with UC. (It's hard to send your own limbs through twisty space without breaking em!) We'll see how this does. It might be cooler for this to apply contam on cast with UC instead (per ebering). I may revise this. -------------------------------------------------------------------------------- ed78777e1f | Nicholas Feinberg | 2022-09-11 13:56:25 -0700 Fix Hexslinger abbrev (elliptic) -------------------------------------------------------------------------------- bfaf442b86 | Nicholas Feinberg | 2022-09-11 13:55:23 -0700 Actually add Arcjolt tile Oops... -------------------------------------------------------------------------------- e63b5e0675 | Nicholas Feinberg | 2022-09-11 13:55:19 -0700 Remove Abyssal Knight Dungeon Crawl once had many, many zealot backgrounds. The dev team has been steadily moving away from this, because picking a god is a big, interesting, exciting moment in each game. A zealot start has to do something really valuable to justify taking that away. Historically, abyssal knights' big thing was starting in the abyss. This was a fun little minigame, a bit like delver - the bold could wander a bit to try to pick up an extra scroll or potion, the reasonable could race for the exit, and then you could start a normal game. It was a little taste of something different, especially for newer players. However, a series of changes have steadily eroded that experience. Items no longer generate in the Abyss, and you now start on the exit. The correct move is almost always to hit > immediately. It's a nothingburger. Sad! Removing Abyssal Knight from the starting backgrounds allows us to make Lugonu much stronger. Altars to Lugonu scattered around the Abyss are meant as an incentive to worship, but the consequences of your old god's wrath are harsh enough that it's rarely right to do so, and it also feels bad - if you wanted to play a Lugonu worshipper, you'd just start AK! We can now (in subsequent commits) fix both problems. Last and certainly least, this means that adding another background to the centre column of the background picker doesn't add a new row to the display. :) Closes #2689. -------------------------------------------------------------------------------- 06a4886a65 | Nicholas Feinberg | 2022-09-11 13:54:21 -0700 Add Arcjolt tile (Sastreii) -------------------------------------------------------------------------------- 2207dc9a4c | Nicholas Feinberg | 2022-09-11 13:48:29 -0700 Allow Spellforged Servitors to cast Arcjolt -------------------------------------------------------------------------------- 2fb67d7a0d | Nicholas Feinberg | 2022-09-11 13:48:26 -0700 New spell: Arcjolt (L5 Conj/Air) Fires an electrical blast that hits everything adjacent to you, adjacent to creatures adjacent to you, etc, etc, up to the spell's range. It also goes through metal walls, for theme reason. Damage is exactly Fireball's, but ignoring half AC and higher variance. (This may be too strong - my feeling is that the targeting is more restrictive, but I could be wrong.) No big design goal, it just seems fun. -------------------------------------------------------------------------------- 5a0acc285a | Nicholas Feinberg | 2022-09-11 13:46:45 -0700 Add missing blastsparks art Oops! -------------------------------------------------------------------------------- 7e3f6f0d8d | Nicholas Feinberg | 2022-09-11 13:44:03 -0700 Rename Arcane Marksman to Hexslinger Arcane Markspersons have very long and clunky name, which also reads as weirdly gendered/anthrocentric. For the sake of the octopodes among us, rename to the sexier name of 'Hexslinger'. It's a pun! Other names considered: - Archer-Mage - Arcane Sniper - Hexbow -------------------------------------------------------------------------------- ed66197fdc | Nicholas Feinberg | 2022-09-11 13:40:02 -0700 Reduce salamander base damage Again, per 71f743befe3 but without the math. -------------------------------------------------------------------------------- db108d344f | Nicholas Feinberg | 2022-09-11 13:40:02 -0700 Reduce shock serpent retaliation damage by 25% Try to make them a little less punishing to fight. -------------------------------------------------------------------------------- f5932fce55 | Nicholas Feinberg | 2022-09-11 13:40:02 -0700 Reduce orc knight and orc warlord damage Per 71f743befe3, but without the meticulous mathmetical analysis. -------------------------------------------------------------------------------- 97a1fe776a | Nicholas Feinberg | 2022-09-11 13:40:02 -0700 Pull naga warriors back further Even after 76187f39e07, they remain an overwhelmingly dominant Snake and indeed midgame killer. Cut off a few hp and points of base damage. -------------------------------------------------------------------------------- e50850e3d0 | Nicholas Feinberg | 2022-09-11 13:40:02 -0700 Reduce boulder beetle damage somewhat They're a fast-moving, tough enemy for their depth. Reduce their damage from 32 to a more aesthetically pleasing 27 to give players a little more wiggle room when dealing with them. -------------------------------------------------------------------------------- 189654fd88 | Nicholas Feinberg | 2022-09-11 13:40:02 -0700 Reduce orc warrior damage again In 6e9d80e302b, orc warrior damage was reduced to partially compensate for the attack speed changes in 581982f5c1d5 and the weapon damage increase in d9c6a3bf672d99. This was not really a full compensation, though. Comparison for the three most common orc warrior weapons (by killcount): 0.26: Dam/Hit Delay Dam/Aut War Axe 30 12.5 24 Halberd 32 12.5 25 Glaive 34 13.5 26 0.27: Dam/Hit Delay Dam/Aut War Axe 26 10 26 Halberd 28 10 28 Glaive 30 10 30 That is, ignoring AC (which we shouldn't), damage over time was higher across the board in 0.27 onward. To compensate, knock 3 damage back off orc warrior. -------------------------------------------------------------------------------- 41f77ac28b | Nicholas Feinberg | 2022-09-11 13:40:02 -0700 Reduce two-headed ogre damage somewhat Their damage was increased along with their attack delay, but they're getting somewhat too many kills now. Let's pull that back down now, and add a pleasing symmetry with one-headed ogre attack damage while we're at it. -------------------------------------------------------------------------------- b375b1e849 | Nicholas Feinberg | 2022-09-11 13:40:02 -0700 Move hydras a little deeper In D and Lair: they're iconic, but getting too many kills. Scootch em a floor or two deeper, to give players more time to gear up and prep. -------------------------------------------------------------------------------- a70db94c74 | Nicholas Feinberg | 2022-09-11 13:39:26 -0700 New draconian tiles (Sastreii) -------------------------------------------------------------------------------- 7e7a2aba73 | Nicholas Feinberg | 2022-09-11 13:39:26 -0700 Remove the MP cost from evoke blink/invisibility Redundant with their newer drawbacks (-Blink and Drain respectively), and felt weird with the Drain-on-failure of Invis particularly. Adds more of a reason to care about +Blink even if you have the spell castable, since it now works when you're out of MP. -------------------------------------------------------------------------------- 13bd0ecfb8 | Nicholas Feinberg | 2022-09-11 13:39:26 -0700 Autoshoot when bumping with a ranged weapon Extremely annoying to play ranged characters and get randomly prompted. -------------------------------------------------------------------------------- cf644656b2 | Nicholas Feinberg | 2022-09-11 13:39:26 -0700 Give unrands their own colour Teal (per nicolae/ebering), to help players keep an eye out for really special unique properties. -------------------------------------------------------------------------------- e5bca228d6 | Nicholas Feinberg | 2022-09-11 13:39:26 -0700 Give mummies innate Faith (Lici) Mummies have never had a really fun distinct playstyle, and the loss of food made that even more obvious. Give them something new and fun to play with: innate Faith, equivalent to always wearing the corresponding amulet. -------------------------------------------------------------------------------- 95544447e1 | Nicholas Feinberg | 2022-09-11 13:39:26 -0700 Make walking tomes silenceable Consider them to be reading their spells. It seems good for them to have more weaknesses, and makes some sense in terms of consistency that spells in spellbooks do need to be verbally read to take effect. -------------------------------------------------------------------------------- 0aaa971b33 | Nicholas Feinberg | 2022-09-11 13:39:26 -0700 Show possibilities for faded altars Ecumenical (aka faded) altars are intended to increase the variety of the game, by encouraging players to take a risk (get an unknown god) in exchange for an upside (earlier god, small piety or other bonus). There are a few problems with the design, however. Proper play requires thinking about all ~25 possible gods you could get, which is both overwhelming if done seriously, and often bad enough (in the worst case) to discourage altar use entirely. It's also discouraging for those who really dislike certain gods. Instead, let's show a preview of three possible gods you might get, similar to how /polymorph now works. Players can now see a description of each god (reducing the barrier to entry for newer players), and then get one randomly. -------------------------------------------------------------------------------- b03bc503e8 | Nicholas Feinberg | 2022-09-11 13:39:26 -0700 Make batty monsters their own BEH (acrobat) So that it's possible to see when batty monsters are unaware of the player, make 'batty' and 'wandering' separate states. This is probably buggy. -------------------------------------------------------------------------------- 421d095d5f | Nicholas Feinberg | 2022-09-11 13:39:26 -0700 Reduce short sword base delay (elliptic) Early-game compensation for the damage reduction in e8845773e3cb. -------------------------------------------------------------------------------- 5f81fb4344 | Nicholas Feinberg | 2022-09-11 13:39:25 -0700 Add UC damage ratings in the @ UI By overwhelming popular demand. Would love to plop em somewhere more visible, maybe in a new tab of %. -------------------------------------------------------------------------------- 4715a6a9d8 | Nicholas Feinberg | 2022-09-11 13:39:25 -0700 Add tiles for Kindle Blastsparks (Sastreii) -------------------------------------------------------------------------------- 638e43912b | Nicholas Feinberg | 2022-09-11 13:39:25 -0700 Remove Corpse Rot Corpse Rot has been a troubled spell for quite a long time. We've gone through many iterations on it, and few have made players happy. Let's hope Cigotuvi's Dreadful Rot has a better run at it. Also rewrite Kiku gift code. -------------------------------------------------------------------------------- 522f029d39 | Nicholas Feinberg | 2022-09-11 13:39:25 -0700 Remove Conjure Flame As discussed in the preceding commits, Conjure Flame was a cool and powerful spell, but the 'ember' mechanic (necessary for balance purposes) was confusing and frustrating for players. Hopefully Kindle Blastsparks and Cigotuvi's Dreadful Rot will together fill its niche. -------------------------------------------------------------------------------- 08ca5ef3b5 | Nicholas Feinberg | 2022-09-11 13:39:25 -0700 New spell: Cigotuvi's Dreadful Rot (L2 Nec/Air/Pois) Part B of the plan to replace Conjure Flame and Corpse Rot, Cigotuvi's Dreadful Rot plops a single-tile cloud of miasma onto the caster and drains them. (Your flesh rots into miasma!) You get one turn of miasma immunity, but after that, if you're not undead, you'd better hustle out of there. Cloud duration scales with power. (The drain is because this is a very strong effect.) Any creature which is vulnerable to miasma avoids it for dear life, so it's a great way to make some space if you're in a jam. If you have some way to trick monsters into it, though - Gell's Gravitas, Lesser Beckoning, potions of attraction, orbs of mayhem... well, they're in for a bad time! It's also hilariously good against Robin specifically. The hope is that this will be more intuitive than Conjure Flame (with its delayed 'embers' that monsters stomp on), and won't have the self-buff or positioning issues of Corpse Rot. Also it hopefully won't be wildly overpowered. Let's try it! Replaces Conjure Flame in the Hedge Wizard start. Also available as a Kiku gift. -------------------------------------------------------------------------------- debd7cae40 | Nicholas Feinberg | 2022-09-11 13:39:25 -0700 New spell: Kindle Blastsparks (L3 Fire/Air/Tloc) Conjure Flame is a strong effect, but the current incarnation has proven confusing and unintuitive for players. Let's try something a little bit different. Kindle Blastsparks creates a cloud of blastsparks on the caster's tile. When any creature moves *into* that cloud (eg a monster chasing the caster), or when that cloud is hit by fire damage (fireball, wand of flame, etc), it explodes in a 3x3 blast. The blast does low damage, but it also knocks back any creature not at its center, pushing them away. This allows for a whole bunch of cute tricks. Damage currently scales with power from 2d10 to 2d18ish. If players often find it undesirable to increase power, because they'd rather blast themselves as a cheeky movement trick, then we can instead scale cloud dur or knockback chance on power. Replaces Conjure Flame in the FE start book. It's a bit unsynergistic with HW's spells (imp, meph...), so I want to do something else there. -------------------------------------------------------------------------------- c0703345a7 | Nicholas Feinberg | 2022-09-10 15:34:52 -0700 More simulacrum tiles (Sastreii) For X-shaped monsters and orb-shaped monsters. -------------------------------------------------------------------------------- 8b159a9891 | Nicholas Feinberg | 2022-09-09 22:22:48 -0700 Fix: don't mark ?poison dangerous under Q (ThMeInTeam) Or with the robe of clouds. -------------------------------------------------------------------------------- e6a4009bfd | Nicholas Feinberg | 2022-09-09 20:37:27 -0700 Tweak hand crossbow stats Increase base delay by 1 point. In general, we have 1-handed weapons take less skill than 2-handed weapons, since players need some XP to invest in Shields with, but we also have ranged weapons take a bit more skill than comparable melee weapons, since melee weapons also need XP for a ranged option (throwing, evo, invo, etc). A hand crossbow is along the same lines as a double sword or eveningstar (16 skill to mindelay), so set its base delay a little higher, requiring 18 skill. Decrease base damage by 1 point, to 16. This is mostly so people feel happier that an arbalest does more damage than a hand crossbow. (But maybe we should rename it to 'hand cannon' anyway.) -------------------------------------------------------------------------------- 90e3122c3a | advil | 2022-09-08 09:01:21 -0400 fix: add a multidrop sanity check -------------------------------------------------------------------------------- 2e61a25929 | advil | 2022-09-06 13:49:45 -0400 fix: sync webtiles hover on UseItemMenu `,` This completely overrides the superclass code, and so needs to duplicate the webtiles sync call. (Without this, `,` left the webtiles hover on a header, even though the crawl binary had the correct position.) -------------------------------------------------------------------------------- d67112afd3 | advil | 2022-09-06 13:46:10 -0400 fix: suppress initial mouse hover on menu display If the mouse cursor is over a hoverable menu item when a menu pops up, even if it isn't currently visible, a mouseenter event is generated. This can lead to fairly unintuitive initial selections if the mouse is in the wrong place. This commit suppresses hover entirely on initial display. It might be nice to do this in a slightly more nuanced way, but I think this commit is a net improvement. -------------------------------------------------------------------------------- 86a8295270 | Nicholas Feinberg | 2022-09-05 15:21:11 -0700 Maybe fix the famous serpent's lash mimic bug Check for mimics on entering a space, not at end of turn. Is this right? Who knows. -------------------------------------------------------------------------------- 784eafce7f | Nicholas Feinberg | 2022-09-04 21:50:15 -0700 Clarify effects of Strength (acrobat) -------------------------------------------------------------------------------- b2d611f6b1 | advil | 2022-09-02 09:08:51 -0400 fix: remove an unnecessary game links optimization As a bonus, this change makes it a lot easier to customize game links. -------------------------------------------------------------------------------- 1cef19eb02 | Kate | 2022-09-01 21:33:25 +0100 Fix Natasha respawning as neutral when dying while frenzied -------------------------------------------------------------------------------- 86fc33db47 | Kate | 2022-09-01 21:33:18 +0100 Fix frenzied and non-frenzied slime creatures merging -------------------------------------------------------------------------------- e5163829ff | advil | 2022-09-01 14:09:59 -0400 fix: relocate an item use check I thought I was being clever to centralize this check, but without some more refactoring it needs to be done in operation-specific code. This commit prevents crashes when wielding/wearing floor items with a full inventory (jewellery was already ok). -------------------------------------------------------------------------------- 5a63ccc183 | advil | 2022-09-01 00:29:56 -0400 fix: get equip menu mode toggling to fully work This was missing the part that actually let this work, sigh. This implementation is kind of brute force, in order to get something at all to work. -------------------------------------------------------------------------------- c6058ea1ff | advil | 2022-08-31 23:42:59 -0400 fix: item type changing for read/drink menu This was somewhat embarassingly broken as initially implemented. This commit is a quick pass to get it to work, but this would need some refining. -------------------------------------------------------------------------------- ec41be8ddc | advil | 2022-08-31 20:54:24 -0400 fix: some empty menu crashes -------------------------------------------------------------------------------- bbf338a72c | advil | 2022-08-30 08:38:05 -0400 fix: explicitly handle a webtiles error case Occasional exceptions like: 2022-08-30 05:12:17,081 WARN: #5978 Error while handling JSON message (''{"has_focus":true,"generation_id":null,"widget_id"'...')! Traceback (most recent call last): File "/chroot/crawl-master/webserver/webtiles/ws_handler.py", line 1104, in on_message self.process.handle_input(message) File "/chroot/crawl-master/webserver/webtiles/process_handler.py", line 923, in handle_input self.conn.send_message(utf8(msg)) File "/chroot/crawl-master/webserver/webtiles/util.py", line 89, in wrapped return f(*args, **kwargs) File "/chroot/crawl-master/webserver/webtiles/connection.py", line 113, in send_message self.socket.sendto(utf8(data), self.crawl_socketpath) FileNotFoundError: [Errno 2] No such file or directory I'm not sure I exactly understand what is causing this (it seems to be the same connection repeatedly), but this commit causes the socket to explicitly close when it does happen. -------------------------------------------------------------------------------- f629c1b73e | robertxgray | 2022-08-30 01:37:06 +0200 Fix missing docs in Android build -------------------------------------------------------------------------------- 806c11bf1d | Nicholas Feinberg | 2022-08-29 07:30:52 -0700 Fix Artificer manual description (#2689) They don't start with a short sword anymore! -------------------------------------------------------------------------------- b3c18b1f4e | Nicholas Feinberg | 2022-08-29 07:30:52 -0700 Fix: make rC+++ monsters immune to Refrig again Broken in aed3a0c8d8a132d27718dec265e5da983d5dda97 . I forgot how monster resists worked. -------------------------------------------------------------------------------- c6d0f036a7 | Kate | 2022-08-28 23:20:42 +0100 Fix monsters not waking up when resisting mass enchantments Monsters that are completely immune to any given mass enchantment still won't necessarily be alerted by them, but any monster that resists Cause Fear, Anguish or Discord will now properly wake up. -------------------------------------------------------------------------------- 20e1baf61b | robertxgray | 2022-08-28 22:55:36 +0200 Update Android build to 0.29 - Remove ammunition from the small layout. - Add zot.cc to the native source files list. -------------------------------------------------------------------------------- 0dbf925e60 | robertxgray | 2022-08-28 21:42:59 +0200 Merge branch 'master-upstream' -------------------------------------------------------------------------------- cf5b79f35d | robertxgray | 2022-08-28 21:31:30 +0200 Minor Android changes - Fix some graphical errors when rotating and/or resuming the app. - Move staircase keys in numeric keyboard to match the upper keyboard. - Update gradle. -------------------------------------------------------------------------------- 42789b21ef | Nicholas Feinberg | 2022-08-27 22:28:52 -0700 Restrict lemuel geyser map depths To D:11-. Nasty autoexplore trap earlier. Still a little bit later, so maybe we should do something more with these. -------------------------------------------------------------------------------- 0dc136218d | robertxgray | 2022-08-27 22:57:01 +0200 Toggle tab icons is Android exclusive This function is unlikely to be useful in other platforms and may confuse users swapping between layouts. -------------------------------------------------------------------------------- d07543615f | robertxgray | 2022-08-27 22:56:46 +0200 Rename option: tile_window_minimum => tile_window_limit_size I think the old name was a bit confusing. -------------------------------------------------------------------------------- fd59ed72b1 | robertxgray | 2022-08-27 22:56:35 +0200 Responsive layout The local tiles interface is now able to change between the normal and small layouts as a response to a resize event. Android devices continue using the small layout by default. Some tablets and laptops may be big enough for the normal layout, but more testing is required. Other devices use the small layout only when the available size is too small for the normal layout. -------------------------------------------------------------------------------- 011bda1208 | Kate | 2022-08-27 17:15:36 +0100 Fix some unrand effects not scaling with time taken -------------------------------------------------------------------------------- 28f7cfb6c4 | Kate | 2022-08-27 17:15:36 +0100 Fix Wereblood shout chance not scaling with time taken -------------------------------------------------------------------------------- 372c29fc68 | Kate | 2022-08-27 17:15:36 +0100 Fix spacing -------------------------------------------------------------------------------- 86255a743f | Nicholas Feinberg | 2022-08-27 09:14:35 -0700 Fix shield delay description They were incorrectly claiming to act like body armour wrt ranged weapon attack speed. -------------------------------------------------------------------------------- be8da3892a | gammafunk | 2022-08-26 15:20:46 -0500 task: add a trunk reminder for the 0.29 tournament -------------------------------------------------------------------------------- 695f716631 | advil | 2022-08-26 14:20:30 -0400 fix: one more blocking annotation It's basically expected that this call will trigger a slow callback alert; this keeps it from being attributed to something else. -------------------------------------------------------------------------------- cfff12708b | advil | 2022-08-26 14:06:34 -0400 fix: unbreak slow callback logging too quick cut & paste... -------------------------------------------------------------------------------- 743cabc681 | advil | 2022-08-26 10:40:00 -0400 fix: prevent massive strings in py27 I know I said that py27 is deprecated, but it's probably better not to do it by making players lag. What was happening here is that the annotate function gets called a lot and appends to a string, but without the context manager in play, the string was never getting cleared, amounting to a fairly rapid memory leak. At the rate this append happens, this code was easily producing a string that hit memory limits, and so I'm pretty sure once this happened each append would trigger a non-trivial swap (and block). This commit refactors so that this annotate call is a (nearly) noop in py27, and also adds in a truncation sanity check (since this error case could still happen if this function isn't called right). Unfortunately I haven't figured out a more clever / elegant way to get username info into the slow callback messaging. I've also simply removed the problem call, since it's better not to make send_message heavy, and I believe the urgency of seeing usernames there is removed by 5d08c370806fe (on CAO I'm currently never seeing blocking in this function any more, which is what should be expected from now on). -------------------------------------------------------------------------------- cf6e50daae | advil | 2022-08-26 09:59:40 -0400 docs: separate changelog for the webtiles server I've ended up writing out most of these in github issues at each release, so it seems useful to reorganize this info into an actual changelog that is stored in the repository. The main audience for this changelog is server admins, and devs who don't normally work on the server, so it is much more technically focused than the game changelog. This commit goes back through my notes from these issues to fill in a few past versions (I think basically to when I and aidanh started actively working on the server, before this it was relatively dormant except for bugfixes back to the original implementation). I expect I've missed details for the old versions, though. The 0.29.0 notes are more guaranteed to be complete. (Also, I've taken this opportunity to impose some of my own aesthetic changelog preferences here.) -------------------------------------------------------------------------------- 142975f185 | Nicholas Feinberg | 2022-08-24 22:29:05 -0700 Fix: ozo's fridge targeter + Hep (CarefulOdds) Don't claim it'll damage Hep ancestors, Fed plants, etc. -------------------------------------------------------------------------------- 557434ed05 | Nicholas Feinberg | 2022-08-24 22:23:32 -0700 Cap Static Discharge power at 50 (hellmonk) 100 power is a lot for a level 2 spell. -------------------------------------------------------------------------------- 09854fe43d | hellmonk | 2022-08-24 22:11:15 -0400 feat: Adjust the silence spell To make it a bit more attractive to characters with low spellpower, increase the fixed portion of the duration and decrease the power-dependent portion. Also, remove the casting noise (this doesn't do anything). -------------------------------------------------------------------------------- 93aa2d5b49 | advil | 2022-08-24 21:49:39 -0400 fix: mark more potential blocking functions in webtiles -------------------------------------------------------------------------------- acc37e2db0 | advil | 2022-08-24 13:04:03 -0400 fix: don't crash on ' in pickup sigh -------------------------------------------------------------------------------- 5e824e72be | advil | 2022-08-24 13:04:03 -0400 fix: fix a webtiles log message -------------------------------------------------------------------------------- e60ba3568b | Nicholas Feinberg | 2022-08-23 20:18:39 -0700 Revert "Switch numpad 5 back to 'wait'" Reverting and reverting in the widening gyre. The committer cannot hear the player; the centre (of the numpad) cannot hold... chaos reigns. This reverts commit 4c767a20b829d4591a964c99a805ecd90d16041d. -------------------------------------------------------------------------------- 64df0e423e | Nicholas Feinberg | 2022-08-23 20:17:40 -0700 Fix: no attacks of opportunity in Sanctuary (#2685) Closes #2685. -------------------------------------------------------------------------------- 5d08c37080 | advil | 2022-08-23 17:24:19 -0400 fix: make webtiles UDS socket connection fully nonblocking On linux (or at least CAO), if the socket buffer gets filled, the server appears to just sleep for the timeout length, and then close the socket. Since the timeout length is 10s, this badly lags the whole server, often causing more timeouts. I'm not sure why this is happening -- it is not the behavior that I would expect (rather, I'd expect it to block until the crawl binary catches up on its input), but in any case, it is bad. There is already code that handles just dropping input if the buffer fills, so setting this to simple non-blocking at least works on CAO in my testing. -------------------------------------------------------------------------------- 8e1c26396d | advil | 2022-08-23 16:17:40 -0400 fix: more webtiles logging -------------------------------------------------------------------------------- e059d3dbb2 | advil | 2022-08-23 14:43:17 -0400 fix: mark some more potential blocking funs (webtiles) -------------------------------------------------------------------------------- f9c0e7fdb7 | advil | 2022-08-23 14:20:41 -0400 fix: reorder CK_NUMPAD_5 binding canonical binding needs to be last -------------------------------------------------------------------------------- afde610a49 | Nicholas Feinberg | 2022-08-23 10:52:58 -0700 Fix a CREDIT per request -------------------------------------------------------------------------------- 9c555d0772 | advil | 2022-08-23 13:49:48 -0400 fix: eliminate some unnecessary disk i/o This extra stat may or may not matter, but this function is definitely a hotspot on cao. -------------------------------------------------------------------------------- 4cc3fdd212 | advil | 2022-08-23 12:24:20 -0400 feat: logging options for asyncio slow callbacks The default debug mode for logging these is fairly useless (for our code at least, it just reports the Tornado code as the problem), and is not ideal for production either. This commit adapts code from the aiodebug package to do lightweight logging to help find slow callbacks. Unfortunately I don't think it is possible to detect hotspots, or at least doing so requires much more advanced techniques than I know about, so to look for blocking code you need to explicitly decorate relevant functions or code. I've done some likely candidates in this commit. This decorator is extremely lightweight, though it's still possible I may need to reverse this part of the commit later. -------------------------------------------------------------------------------- 6d867f7e1d | advil | 2022-08-23 12:24:19 -0400 feat: load logging for webtiles This is mainly for production debugging, and is spammy, so is disabled by default. It responds to HUP. -------------------------------------------------------------------------------- dcc30181a8 | Nicholas Feinberg | 2022-08-23 07:09:26 -0700 Consider rPois- enemies affected by ?poison (dilly) oops -------------------------------------------------------------------------------- d8047c6341 | Nicholas Feinberg | 2022-08-22 21:09:40 -0700 Fix: bring the eye of draining screen back Oops! -------------------------------------------------------------------------------- 3885252ca9 | Nicholas Feinberg | 2022-08-22 20:48:13 -0700 New splash screen by PhilosopherOpposite Licensed under CC0. Source: https://www.reddit.com/r/dcss/comments/wu6f2o/comment/ilcg25z/ -------------------------------------------------------------------------------- 310bbde435 | Nicholas Feinberg | 2022-08-22 20:36:05 -0700 Fix: don't let lochaber axe go through grates (acrobat) -------------------------------------------------------------------------------- 4c767a20b8 | Nicholas Feinberg | 2022-08-22 20:27:39 -0700 Switch numpad 5 back to 'wait' This is symmetric with the other numpad keys. Just as they spend one turn moving in some direction, '5' spends one turn moving in no direction. Partially reverts 0d6ea506dcc. -------------------------------------------------------------------------------- cc983562f6 | Nicholas Feinberg | 2022-08-22 20:25:50 -0700 Fix Ozocubu's Refrigeration usefulness check (dilly) If enemies were weaker than allies, it'd claim there were no targets in range. -------------------------------------------------------------------------------- 94fe547ab8 | advil | 2022-08-22 11:16:49 -0400 fix: numpad keys at the `G` prompt (wheals) These keys were working in some of the subprompts, but not the main prompt. -------------------------------------------------------------------------------- 7c9e10e132 | advil | 2022-08-21 18:57:36 -0400 fix: adjust some numpad key behavior This should enable NP enter as well as numpad scrolling in a bunch of cases, including the main menu. -------------------------------------------------------------------------------- 3a90980b9d | Nicholas Feinberg | 2022-08-21 10:16:49 -0700 Fix Oka throwing weapon gift default force_more (Lici) Broken in 9ffc8e8dbe0b832c. -------------------------------------------------------------------------------- a7cffc901d | Nicholas Feinberg | 2022-08-19 21:34:51 -0700 Fix: give octopodes storm tentacles (dilly) -------------------------------------------------------------------------------- c9032a9cac | advil | 2022-08-19 11:36:49 -0400 fix: unbreak change email/pw This has apparently been broken since 45d3ea808a7ee. Possibly most webtiles servers haven't been restarted since then? Anyways, I only got a report about this today. -------------------------------------------------------------------------------- f48d83f5e2 | advil | 2022-08-18 18:24:55 -0400 fix: add a try...except block in the terminal handler I'm seeing OSErrors on disconnect on this call on CAO in py3. I'm not entirely sure why this isn't happening on my test device, but I'm pretty sure it's simply that a read ends up timed badly with respect to the crawl process ending. Also looks like CBR2 is doing this, so it's probably a linux thing. So, treat it like an error flag. -------------------------------------------------------------------------------- 69b7b797bf | Nicholas Feinberg | 2022-08-18 14:43:18 -0700 Fix: changelog but but (Ge0ff) And remove Lair:6 again. -------------------------------------------------------------------------------- 844d9cd41c | advil | 2022-08-18 16:49:09 -0400 docs: update changelog * reorder sections alphabetically * mention a new local tiles option -------------------------------------------------------------------------------- 1d49662b45 | advil | 2022-08-18 12:11:56 -0400 fix: don't show (g)oto for cases where travel will fail Use a previously static travel check. I'm really surprised I couldn't find an already-existing public function along these lines, so maybe I missed something. (Though, the usual check for a visible monster and then fedhas passthrough + maybe other stuff is done manually in a really large number of cases, so maybe not.) -------------------------------------------------------------------------------- e58dc06b8e | advil | 2022-08-18 12:11:56 -0400 fix: exit conditions for full_describe_square Mentioned in https://crawl.develz.org/mantis/view.php?id=12687 -------------------------------------------------------------------------------- 47a6bb87d6 | Nicholas Feinberg | 2022-08-17 22:04:29 -0700 Fix: remove those those (FizzleBang) -------------------------------------------------------------------------------- 5fe6d566dd | advil | 2022-08-17 22:17:31 -0400 fix: make frog hop targeting exactly match fuzzing Previously, targeting was affected weirdly by statues (see mantis 12697), because it inherited some incorrect logic from explosions. It may have been possible to fix this simply, by changing a param in the beam call, but I have done something a bit more ambitious: this commit uses the exact same targeter code for both targeting and the fuzzing itself. Along the way it adds some more generally useful infrastructure for doing this kind of thing, in particular, a subclass of rectangle_iterator designed for iterating over affected squares of a targeter. (Also, replace a static that annoyed me in targeting code with an actual copy constructor on FixedArray.) -------------------------------------------------------------------------------- 509654366e | advil | 2022-08-17 19:37:15 -0400 fix: send signed Xom piety to webtiles This was maxed against 0 and then cast to an unsigned int on top of that making it very hard to know if you are Xom's special toy on webtiles. Followup to a1f3fc70dd8b21 which at least sent the value to webtiles, but missed the sign issue. Resolves https://crawl.develz.org/mantis/view.php?id=12565 and probably some closed stuff, including #2186. -------------------------------------------------------------------------------- 24050441d8 | advil | 2022-08-17 19:21:31 -0400 fix: don't tell players they are already flying Resolves https://crawl.develz.org/mantis/view.php?id=12700 -------------------------------------------------------------------------------- bc57f8fbdb | advil | 2022-08-17 15:56:06 -0400 fix: let CMD_MENU_EXAMINE on right click work in webtiles I noticed while updating the changelog that I had missed this. Hopefully not too much of a feature to be adding this late... -------------------------------------------------------------------------------- ad17d311a4 | advil | 2022-08-17 15:35:15 -0400 fix: WJC extra spacing As implemented, webtiles needs the binary to be sending preformatted text for any extra screens, but getLongDescription unwraps by default. (The diagrams were saved because indentation also indicates preformatting.) Also, adjust spacing of the text w.r.t. the diagrams, and fix some bad linebreaking. Resolves #2648 -------------------------------------------------------------------------------- 5abcae952a | advil | 2022-08-17 15:01:11 -0400 docs: changelog tweaks Mostly misc UI things. -------------------------------------------------------------------------------- 6eeae00818 | advil | 2022-08-17 14:28:44 -0400 build: bump CI actions/cache version -------------------------------------------------------------------------------- 31cfa1876a | advil | 2022-08-17 14:28:44 -0400 build: use pkg-config for rltiles cross-compiling on mac When building a universal binary or cross-compiling, this tool needs to avoid being linked to a cross-compiled libpng dep for the other architecture. Following the approach used for windows cross-compiling, we just force the issue with pkg-config. This adds some extra deps to the mac release build, but most people doing that will have them already satisfied or easily be able to add them via homebrew or macports. -------------------------------------------------------------------------------- 1249214d54 | advil | 2022-08-17 14:28:44 -0400 build: fix use of DEPCXX when cross-compiling on mac This code from old universal binaries was breaking current universal binaries, by passing the wrong `-target` to rltiles via DEPCXX. This was masked on my M1 test machine because the x86 `tilegen.elf` just ran under rosetta. -------------------------------------------------------------------------------- 7a48c89a40 | advil | 2022-08-17 14:28:44 -0400 build: try universal builds again Runners that support cross-compiling are now available, so let's try that out in CI. It is fairly excruciatingly slow with an empty cache, so it may end up being necessary to disable this by default just for the sake of CI not taking forever. But maybe with caching it'll be ok. -------------------------------------------------------------------------------- 4018c0d16e | Nicholas Feinberg | 2022-08-17 10:14:13 -0700 Clarify TLA mechanics (FizzBang) -------------------------------------------------------------------------------- e7f5c69dce | Nicholas Feinberg | 2022-08-17 10:07:12 -0700 Make enemies more reluctant to enter poison clouds They underestimated them pretty badly, which made scrolls of poison much more lethal than was intended. -------------------------------------------------------------------------------- 6990b1bffc | patrick | 2022-08-16 17:09:53 -0400 Fix a typo in the Condemnation description It is important to have consistent names for your archangels. One must be conscientious of the lore. -------------------------------------------------------------------------------- ee5d04aabb | Nicholas Feinberg | 2022-08-16 12:44:23 -0700 Halve Okawaru throwing gifts By popular demand. It's been a bit excessive ever since other ammo was removed. Doing this via quantity, rather than via gift timer, to avoid messing with the piety curve. Let's reconsider that later. -------------------------------------------------------------------------------- 9ffc8e8dbe | Nicholas Feinberg | 2022-08-16 12:44:23 -0700 Update Oka gift message (Bamboomancer) Plus some comments. -------------------------------------------------------------------------------- 47afbbedbb | advil | 2022-08-16 15:15:26 -0400 lint: unbrace -------------------------------------------------------------------------------- 619dfb4ed5 | advil | 2022-08-16 13:40:13 -0400 fix: a very old off-by-one error in `join_the_dots` I've convinced myself that this is not intentional, good to fix, and safe to fix. We'll see -- this pathfinding method is heavily used. The issue appears to originate from 883396a6ffc, and is that `cur.insert(cur.begin() + random2(cur.size()), *ai);` cannot insert at the end of `cur`. Since `cur` starts empty in the relevant loop, and at most three things can be inserted, this insertion or the resulting behavior is completely deterministic in a number of circumstances and at least always deterministic in what the third element is if there are three. The most visible one I am aware of was when pathfinding near a masked region (a vault), if the path gets pushed N or S by a mask, and needs to eventually get the other direction, emergent behavior can (must?) cause the path to continue deterministically N or S until it hits something (e.g. the map boundary), and then make a loop back, also moving straight. This often looks quite weird, especially if there is a long distance to the map boundary. Example (I was able to replicate this exact case using the seed and spent some time investigating it): https://www.reddit.com/r/dcss/comments/wl9yrm/odd_shallow_water_formation_should _i_be_looking/ This commit also includes some useful debug code that I wouldn't want to write again, and tries to comment the pathfinding part of this algorithm to the best of my understanding (it's odd). I've also isolated the rng here, to try to control the impact of calling jtd and random draws before and after for any future changes to this algorith (since it had a very unpredictable effect due to the varying number of draws). This may or may not be futile. -------------------------------------------------------------------------------- 7c58e119a4 | Alex Jurkiewicz | 2022-08-15 16:25:01 -0700 Remove unused variable ui.cc:2174:9: warning: variable 'ew' set but not used [-Wunused-but-set-variable] int ew = 0; ^ -------------------------------------------------------------------------------- 17b7e71a25 | Nikolai Lavsky | 2022-08-15 16:24:01 -0700 fix: don't offer Meteorae potion petitions with invisibility Since Meteorae can become invisible only via the shadow form, there is no point to offer them petitions with the invisibility potion. -------------------------------------------------------------------------------- fc2ad454c0 | Nicholas Feinberg | 2022-08-15 16:23:21 -0700 Disable opportunity attacks when swapping Since the enemy can't follow you directly anyway. Probably this should also apply to moving out of a fedhas plant. -------------------------------------------------------------------------------- 9f74c4bd0f | Nicholas Feinberg | 2022-08-15 16:23:21 -0700 Turn sandblast into speedblast Player feedback feels very strongly that 2x delay is too high. By popular demand, let's try it at 1.5x delay instead. -------------------------------------------------------------------------------- 569b05d6ff | Rytis Petronis | 2022-08-14 23:08:34 -0700 Add sentei_temple_godly_chess chessboard temple for 17 gods [ Committer's note: Closes #2636. Taught the gods a bit more opening theory. ] -------------------------------------------------------------------------------- 87b1fcd763 | Nicholas Feinberg | 2022-08-14 18:37:39 -0700 Put meteorans and palentongae in jail Add them to a silly arrival vault, and remove dwarves again (rip). -------------------------------------------------------------------------------- c98ce4fa87 | Nicholas Feinberg | 2022-08-14 18:35:08 -0700 New player species tiles (Sastreii) Octopode, meteoran and palentonga. Vault only. -------------------------------------------------------------------------------- 074fecc49e | Nicholas Feinberg | 2022-08-14 18:25:40 -0700 Add a tiles section to the changelog -------------------------------------------------------------------------------- fc20370e89 | Nicholas Feinberg | 2022-08-14 13:51:49 -0700 Fix changelog formatting -------------------------------------------------------------------------------- ce01778f00 | Nicholas Feinberg | 2022-08-14 13:50:11 -0700 Remove Deep Dwarves (from the changelog) (Goratrix) -------------------------------------------------------------------------------- d913b07440 | Nicholas Feinberg | 2022-08-14 11:24:53 -0700 Assorted changelog fixes and tweaks -------------------------------------------------------------------------------- b5b6a5fa4f | Nicholas Feinberg | 2022-08-14 11:24:53 -0700 Cut Artificer iceblast starting charges (acrobat) Nine /iceblast on d:1 was a bit much. Take it down to five. -------------------------------------------------------------------------------- e50532568f | Edgar A. Bering IV | 2022-08-14 10:50:28 -0700 Revert "Simplify Drain Life logic" This reverts commit 5bf4a2a1db00f9f780ff1542a8ce14cca4721bce. The commit message says that players don't cast Drain Life anymore but Yredelemnul's Drain Life ability still exists and uses SPELL_DRAIN_LIFE under the hood. -------------------------------------------------------------------------------- cbed440bb6 | Nicholas Feinberg | 2022-08-14 10:29:54 -0700 Docs: changelog through 0.29-a0-1033 -------------------------------------------------------------------------------- b6c65ffae6 | Nicholas Feinberg | 2022-08-13 18:10:34 -0700 Rephrase -Scroll/-Potion mutation desc (#2629) Avoid use of the term 'threatened' where it would be ambiguous. -------------------------------------------------------------------------------- 2b1b757b24 | Nicholas Feinberg | 2022-08-13 18:03:08 -0700 Fix: don't "fizzle" on v-v (#2649) This code is a nightmare. Fixes #2649. -------------------------------------------------------------------------------- 489732b8f0 | Nicholas Feinberg | 2022-08-13 15:01:49 -0700 Don't consider all items to be in sets (Plaidstone) oops -------------------------------------------------------------------------------- f5f8719cae | gammafunk | 2022-08-13 16:10:09 -0500 fix: Correct tagging in an arrival vault (acrobat) For kb_arrival_jail, this vault was only partially updated for species removals and additions. It now has cells with no corresponding monster that are also not appropriately tagged for no_tele_into and no_item_gen. Fix this by putting in additional species monsters in the empty cells. Some of the newer species monsters don't have appropriate tiles for use as decorative monsters, but we'll hopefully be getting those soon. Instead of resizing the vault only to revert that change later, fill the empty cells with random species monsters that we can use. Also reglyph the vault to use glyphs with no default definition. -------------------------------------------------------------------------------- 3196055cea | Nicholas Feinberg | 2022-08-13 13:59:36 -0700 Remove starting item spoilers Don't allow players to determine which items from a given set will spawn in a game by checking the 'unknown items' list after picking an artificer, delver or wanderer. -------------------------------------------------------------------------------- de8b1eb099 | Nicholas Feinberg | 2022-08-13 12:37:00 -0700 Tweak Ozocubu's Refrigeration damage further To try to make the positional aspect of the spell's damage more noticable, make the adjacency penalty for damage 2/3rds / 1/3rd for 1 / 2 adjacent creatures (was 3/4ths / 1/2). -------------------------------------------------------------------------------- cd8c55af63 | advil | 2022-08-11 17:02:10 -0400 fix: correctly initialize seed info for ancient games For games prior to `TAG_MINOR_SEEDS`, seed info was not getting set at all. For games prior to `TAG_MINOR_GAMESEEDS`, they were incorrectly getting the default value for deterministic_pregen (true). -------------------------------------------------------------------------------- 659819d403 | advil | 2022-08-11 14:26:14 -0400 fix: ancient save compat The fixup in 83a48905f1 can lead to crashes on very old saves (testing with a 0.11 save) because these props don't exist. Creating empty versions seems to make things ok. -------------------------------------------------------------------------------- cb49e86079 | advil | 2022-08-11 12:23:01 -0400 fix: fix exiting popup version of the yesno prompt The popup version was exiting too vigorously, because of changes in how keyhandling work. This commit brings its behavior more in line with the message prompt version, where incorrect keys (I have restricted this to just alpha keys) will now show an error message instead of exiting. -------------------------------------------------------------------------------- ec03ce3624 | advil | 2022-08-11 11:59:32 -0400 fix: add a couple of !d checks Resolves #985, and one was also missing from the describe popup drop call. (For Reasons, `drop_item` itself does not perform this check, in contrast to e.g. the wield call.) -------------------------------------------------------------------------------- 6ae1a4a2c7 | advil | 2022-08-10 14:08:46 -0400 fix: handle color in "Found..." messages correctly This had two parts. First: the use of a closing tag in message.cc is simply incorrect, on the current state of things -- colour strings are valid without closing tags, though closing tags must match if present, so wrapping an open and a closing tag around an arbitrary colour string therefore does not guarantee a valid colour string (bug introduced in ae15d2e64f). This at long last resolves #1224. Second: using `formatted_mpr` in the travel.cc for some "Found..." messages is incompatible with consistent coloring given the current state of things, because it eliminates any sense of a default color. So even with the first fix, messages with sub-coloring were not affected correctly by a `message_colour` rc line (e.g. when an un-id'd scroll was in the same message as something else). N.b. if `formatted_string` was refactored to use a more stack-like representation internally, as in #1249, then the second fix at least wouldn't be necessary. However, that PR has been languishing for a long time, and is a bit overkill for this bug in any case, given that the use of formatted_mpr is extremely rare (maybe should be eliminated). -------------------------------------------------------------------------------- 3e17be3ea5 | advil | 2022-08-10 11:29:46 -0400 fix: remove an `mpr` overload in favor of `formatted_mpr` These are redundant, and the `mpr` overload is used exactly once; I think the `mpr` overload was only added (in dbf363a7764) because it's easy to miss the existence of `formatted_mpr` (which is in a different header). I have also prevented the implicit cast that led to the issue in 6ad10583fd2. The alternative, removing `formatted_mpr` and leaving only the overload, is maybe simpler as an API, but `formatted_mpr` has a bunch more params than regular `mpr`, and also I think it is worth someone knowing this conversion is happening and handling it explicitly. This commit reverts dbf363a776. -------------------------------------------------------------------------------- eaf7ee7e1e | advil | 2022-08-10 11:02:37 -0400 fix: complicate to_colour_string defaults Yet another adjustment to 29c30a7bfa8. That commit was really tailored at dealing with passing information to webtiles as flat text. However, to_colour_string is used internally in all sorts of places in ways that are subtly affected by this change. Rather than try to rework those, I'm semi-reverting 29c30a7bfa8 so that the default behavior is the same as what it was prior to that commit, and mostly only webtiles uses of it explicitly set a default color. -------------------------------------------------------------------------------- 4f9e239c0e | advil | 2022-08-09 20:47:27 -0400 fix: simplify some duplicated code -------------------------------------------------------------------------------- 84f7d21838 | advil | 2022-08-09 20:28:22 -0400 fix: various skill menu fixes Mostly for the experience menu (see #2597), which was extremely broken in autotraining mode. 1. In autotraining mode, use you.training for the !xp defaults (rather than every single skill) 2. Let any visible skill be selectable; previously, you could get a skill to show up under SKM_SHOW_DEFAULT and when toggled back to -, it would become unselectable (conspiring with 3 below) but still visible. This was doable in either manual mode or !xp mode. 3. Don't define SKM_HELP to coincide with the default value for `MenuItem::m_item_id`: this led by weird side effects to unselectable menu items (via 2) entering help mode. (Which to top it off, is not otherwise enabled in !xp mode and is somewhat buggy.) 4. Correctly implement selection cycling for numeric hotkeys -------------------------------------------------------------------------------- 6b6670bd90 | advil | 2022-08-09 12:20:35 -0400 fix: click handling in `InvMenu`s (Goratrix) Yet another case where there are misc keys hardcoded that shouldn't be (unfortunately this commit does not fix the overall problem). Also, fixed some downcasting to an unsigned char for no good reason. -------------------------------------------------------------------------------- 091d24779b | advil | 2022-08-09 11:47:21 -0400 fix: clean up UseItemMenu mode code Make this implementation slightly less brute force. Also, add keyhelp, and fix a local tiles visual bug in this menu. -------------------------------------------------------------------------------- 236c7fd91e | Nicholas Feinberg | 2022-08-08 21:26:42 -0700 Tweak weapon brand display (acrobat) Do show venom brand in the damage rating, don't show dispersal. -------------------------------------------------------------------------------- 1598f19b23 | advil | 2022-08-08 22:42:34 -0400 fix: restore some fire inscription behavior This code is all a bit messy, but this commit more or less brings things back to what the manual says should happen. (E.g. you can inscribe your silver javelins with =f to prevent autoquivering.) Resolves #2418 -------------------------------------------------------------------------------- a8c0faee3b | advil | 2022-08-08 17:41:17 -0400 fix: maybe fix AltGr in local tiles See #2623. I'm pretty sure the comment there that cf85d11 was responsible is right, and this fix targets that issue. But, I don't have a windows machine on hand to test. Also, alt handling got rewritten somewhat since then so I don't know if the new code breaks it further. What I can verify at least is that this all works correctly with mac alt keys. -------------------------------------------------------------------------------- 0638b6a9f9 | advil | 2022-08-08 16:56:37 -0400 fix: don't generate empty extra religion screens in webtiles More generally, don't insert a default in colour strings unless the first op is a text op. This bug is continued fallout from 29c30a7. I think this fix probably subsumes edc2efc2671c but not f9470816a (since blank colour strings will still get a default tag). -------------------------------------------------------------------------------- 5fcc5c1eac | advil | 2022-08-08 16:02:04 -0400 fix: implement local tiles menu clicking as clicking Previously, clicking menu items was implemented via a key event using the menu's hotkey. This implements a proper clicking interface. Because CK_MOUSE_CLICK is sent by ui code on arbitrary clicks regardless of location, I used the less common CK_MOUSE_B1 for clicks specifically on a (selectable) menu item. Along the way I also implemented right click to examine. Resolves #2639 -------------------------------------------------------------------------------- 8251ee3229 | advil | 2022-08-08 15:12:16 -0400 fix: numpad movement in local tiles Partial revert of dbb8aaeb5fe9d6. I don't think I can entirely prevent this from being returned in some circumstances, so I've just given up and dealt with it in the menu code. What was happening is that two quick events came in succession, the second suppressing the first, but the `break` here sent processing back into a loop that needed another key to break it. Resolves #2644 -------------------------------------------------------------------------------- 73cb963dcd | Nicholas Feinberg | 2022-08-08 10:17:51 -0700 Rework Gong description (Lici) Avoid implying spirit shield? -------------------------------------------------------------------------------- 60c99734e7 | Nicholas Feinberg | 2022-08-07 13:43:14 -0700 Fix messages for unseen dream sheep (CarefulOdds) You could be told about dream sheep sparkling even when you couldn't actually see them. This is incredibly niche! -------------------------------------------------------------------------------- 949cc1d0fb | Nicholas Feinberg | 2022-08-06 13:48:58 -0700 Swap out AM ?vuln for ?poison Scrolls of vulnerability were intended to provide an early game tool to help Arcane Markspersons hex effectively, but early game enemies have such low Will that vulnerability has little effect on them. Swap it out for the newish Scroll of Poison, which should help them fight foes at range. -------------------------------------------------------------------------------- fab9b68f5b | Nicholas Feinberg | 2022-08-06 13:36:37 -0700 A tisket, a tasket, new tiles from (Sastreii) Finisher, Jorgrun, and Octopode/Felid lichform. -------------------------------------------------------------------------------- 0dd7720b37 | Nicholas Feinberg | 2022-08-05 14:44:41 -0700 Fix a Zenata monspeak typo (ebird) -------------------------------------------------------------------------------- 6e1c3f9eef | Nicholas Feinberg | 2022-08-05 12:11:29 -0700 Update more things for deep abyss -------------------------------------------------------------------------------- 417cb75212 | Nicholas Feinberg | 2022-08-05 12:11:29 -0700 Fix deep abyss spawns Don't exclude them from XP tracking, oops. Also simplify and refactor logic generally. -------------------------------------------------------------------------------- 08a8388b2b | Nicholas Feinberg | 2022-08-05 12:11:29 -0700 Don't force alligators to always be patrolling Added in 7d59d745cd3 (2010). The plan seems to have been to make alligators 'semi-neutral' - they'd only attack if you came within four spaces of them. As best I can tell, the latter part of this plan was never implemented. -------------------------------------------------------------------------------- 3a827bf7a4 | Nicholas Feinberg | 2022-08-05 12:11:29 -0700 Deduplicate some abyss spawn logic -------------------------------------------------------------------------------- 36053be5b9 | Nicholas Feinberg | 2022-08-05 12:11:29 -0700 Decrease deep abyss exit spawn rate (Oneirical) A bit too easy to dip in and out of Abyss:6-7 as desired. -------------------------------------------------------------------------------- 458353e8b9 | Nicholas Feinberg | 2022-08-05 12:11:29 -0700 Display current attack delay in weapon description Oops, forgot to commit this after writing it up some days ago. -------------------------------------------------------------------------------- f35a41adde | Nicholas Feinberg | 2022-08-05 12:11:29 -0700 Shift Frozen Ramparts damage later (acrobat) Adding +6 damage to it when making it check AC made it quite a bit too strong at low level. Reduce the base damage to 1 and increase damage gained from spellpower by 50%. -------------------------------------------------------------------------------- 1987434951 | advil | 2022-08-04 16:29:42 -0400 fix: don't start resting if `can_rest_here` is false bdabc8c6d3d1 ran afoul of one of the weird pitfalls of this code, that rest/wait fail messaging is handled in a different place than rest/wait start messaging. Possibly this can/should be cleaned up, but I don't immediately know what else it would break, so I've just updated the relevant check in _start_running to be exactly parallel. Also commented the point in the code where this trap can be found. -------------------------------------------------------------------------------- f6f7e2dfe7 | riverfiend | 2022-08-03 22:44:34 -0400 fix: Changes to god wrath (#2606) Give Makh 2 more greater servants as suggested in code comments. Remove unnecessary slow duration checks in Chei, Trog wrath. Remove jellies from Jiyva wrath spawns. Fuzz minor minion numbers for Lugonu wrath summons. Modify Zin mutation removal logic to be more understandable. Make Zin wrath fall through to other effects if all player mutations are bad. Update wrath descriptions for Chei, Yred, and Ely. See original pull request for full explanation of the old wrath behaviors. -------------------------------------------------------------------------------- 82fb55b1ac | nlavsky | 2022-08-03 22:17:43 -0400 fix: no hostile Necrotise skeletons (#2630) For consistency with other ally-creating spells under Okawaru or Sacrifice Love, this commit blocks the Animate Skeleton part of the Necrotise spell. -------------------------------------------------------------------------------- 8a7feb118f | gammafunk | 2022-08-03 15:24:36 -0500 feat: Adjust Ice Cave simulacra Entropy weaver simulacra are great at killing players, but are far nastier in melee than their originating monster due to their relatively high HD and how af_cold works. Players tend to not expect this, given that entropy weaver melee at its normal placement depth is only dangerous when the player has poor AC (e.g. when highly corroded). We can use hydra simulacra with the appropriate numbers of heads to have a similar effect, but one that somewhat better telegraphs the level of danger. This commit uses 3-headed hydra simulacra in the top-end "cruel" set for easy ice caves, 7-headed hydra simulacra in that same set for hard ice caves, and removes entropy weaver simulacra from the simulacra lists. For ice_cave_hellmonk_azure_passage, now that jellies and eyes can be simulacra, we replace entropy weaver simulacra and other less-in theme simulacra with slime creature and great orb of eye simulacra. The non-jelly/eye we still use are shapeshifter and glowing shapeshifter simulacra. These changes are a nerf to ice caves, but ice caves could stand a mild nerf, especially for easy ice caves. -------------------------------------------------------------------------------- c5c9f59d18 | Kate | 2022-08-02 21:58:16 +0100 Fix compiler warnings And rebrace. -------------------------------------------------------------------------------- 4a18f31a58 | Nicholas Feinberg | 2022-08-01 18:38:10 -0700 Give palentongas +2 strength Make them a little better at using heavy armour, etc. -------------------------------------------------------------------------------- 3e1970ce6f | Nicholas Feinberg | 2022-08-01 18:38:06 -0700 Slash Palentonga roll attack noise When I designed Palentongas, I added 12 noise to them so that it wouldn't always be correct to use roll attacks. Now that we've had a while to play with them, I suspect this was the wrong call. Roll attacks are Palentonga's cool thing - players should want to use them very heavily, and we should design the UI to support that. Reduce noise to one-third, 4 noise. This is mostly there as a justification for preventing roll-sleep-stabs, but isn't really noisier than the melee combat itself. -------------------------------------------------------------------------------- e9813d02cc | Nicholas Feinberg | 2022-08-01 18:14:16 -0700 Simplify Airstrike (CarefulOdds) Make it a simple dice roll, rather than the sum of a flat value (based on empty space nearby) and a random2avg call. This increases average damage by 0.5 per cast, and increases max damage considerably in open space. Gastronok now does 2d34 if you're in totally empty space, which might be a bit much? -------------------------------------------------------------------------------- 68da1b8662 | Nicholas Feinberg | 2022-08-01 17:56:01 -0700 Don't count conjured 'mons' for Fridge (acrobat) Probably an orb of destruction can't insulate you from freezing... I guess? -------------------------------------------------------------------------------- 78424f4fe2 | Nicholas Feinberg | 2022-08-01 17:56:01 -0700 Don't spawn ponderous gloves (ebonnov, CarefulOdds) It's only supposed to be on body armour! Excepting one unrand, ha. The tradeoff is too awful otherwise. -------------------------------------------------------------------------------- f828392251 | Nicholas Feinberg | 2022-08-01 17:56:01 -0700 Don't show invisible monsters in the Refrig targeter Oops! Also don't leak info about monsters outside LOS but adjacent to monsters you do see. -------------------------------------------------------------------------------- 9d01ccc615 | Nicholas Feinberg | 2022-08-01 17:56:01 -0700 Don't spam messages in local tiles When there are invisible monsters nearby. Broken by bdabc8c6d3d15eae00cd2e427f43c04c37675bc5 . -------------------------------------------------------------------------------- df0a18e73c | advil | 2022-08-01 15:39:38 -0400 feat: mode cycling for use item menus This lets you cycle between wield/wear/puton, and read/quaff (depending on starting mode). It's a pretty rough and ready implementation, but recent menu changes made it possible to implement this way. The cycle keys are the usual ones (arrow keys, !), but it's currently not hinted -- e.g. the feature is secret for now. Ideally, a similar change would happen for the remove menus before this becomes fully baked, but that's a bit more work, since those are regular `InvMenu`s. -------------------------------------------------------------------------------- af557a844c | advil | 2022-08-01 15:37:00 -0400 feat: differentiate passable/impassable water in console Previously, both of these used the same glyph by default, ≈, and relied on color to differentiate. This has accessibility issues, and also is annoying in builder debugging / scripting contexts (where e.g. dump_map doesn't output color). This commit switches shallow water to use a regular tilde. Colors stay the same, but it's possible they could use further tweaking after this change. -------------------------------------------------------------------------------- 8b785cd64e | advil | 2022-08-01 12:59:05 -0400 fix: limit vaults builder tag effects to vaults This is a followup to c37658a0fea4; the effect here isn't really a false positive, in that it can impact seed stability on local games when the binary isn't restarted. The situation is that Vaults layouts, in order to place vaults used elsewhere, typically need to ensure they are non-opaque to the builder. The means by which it does this (tags like transparent and passable), then become part of the vault's state, and persist to any later reuse. 2170ac5abdc97a already limited the effect of `passable` to uses when placing a vault in Vaults, but the v_rooms.lua code (for reasons that are not entirely clear to me) used the `transparent` tag to a similar effect. Changing this to `passable` has the same effect and prevents the seed stability issues (at least, in my testing). It would be nice if there were a better way of resetting vault tags to the des cache state without restarting the binary? This commit also fixes what seems to have been a logic error in the interaction between passable and opaque, from 2170ac5abdc97a, where the passable tag would not result in MMT_PASSABLE outside vaults, but would also prevent MMT_OPAQUE where appropriate. (This was probably creating a whole bunch of unnecessary vetoes for affected vaults..) -------------------------------------------------------------------------------- 79d4c32e18 | Nicholas Feinberg | 2022-08-01 07:43:13 -0700 Simplify weapon attack descriptions (#2326) When a monster is wielding a weapon, merge that weapon's damage and plusses into the damage shown into xv. Still can't quite show brands, but better something than nothing. Before: "can hit for up to 16 with its +5 giant club of flaming..." After: "can hit for up to 45 + Flame with its weapon..." -------------------------------------------------------------------------------- aed3a0c8d8 | Nicholas Feinberg | 2022-07-31 21:55:21 -0700 Experimental: redesign Ozocubu's Refrigeration In DCSS, spells are most exciting when they're context sensitive. You cast Fireball or Freezing Cloud when the terrain and enemy positions suit it. It's fine to have strong spells, but it's not very fun to have one spell which is so universally good that you can repeatedly cast it to clear the great majority of fights. Ozo's Fridge fell in this category. Let's experiment with making it a bit more situation-dependent. This commit increases its damage by ~10% and removes the -Potion gimmick, but reduces damage against creatures that are adjacent to others (including the player). The current formula reduces damage by 25% if there's one creature adjacent and by 50% if there are two or more, but this should be considered very much a first draft. Concerns I've seen about this design: 1. It'll cause players to lure enemies so you can fight one-on-one. This is generally wise, but I don't think a screen-wide AOE particularly pushes players to do this, even if it's worse against clumps of enemies. 2. It'll be hard for players to tell what's happening. I've done some work on the targeter to try to show how much enemies are affected, and probably some work could be done on printed messages if necessary. -------------------------------------------------------------------------------- 9e354a60c6 | Nicholas Feinberg | 2022-07-31 21:55:21 -0700 Make Refrigeration and Ramparts check AC and do more damage One of the trickier things to teach new players is that AC works against elemental attacks. Fireball, bolt of cold, etc - AC will help! It's a simple, consistent mechanic that has big implications across play. This becomes much trickier, and more confusing, when an arbitrary subset of spells do *not* check AC. What, ultimately, is the difference between a flash freeze, a freezing cloud, and a Refrigeration? Why should the latter ignore AC while the former two don't? Can't all that thick armour insulate you from the cold? If a spell doesn't have a lot else going on in terms of mechanical distinctiveness, we can have it ignore AC as its one big Thing. That's how Freeze works, and that's fine. But adding it into spells that have many other mechanical distinctions is both unnecessary and confusing. Let's not. Freezing Ramparts and Ozocubu's Refrigeration both now check AC and do more damage (+6 for Framparts, +10 for Refrigeration), based on a vague average of AC in relevant parts of the game. -------------------------------------------------------------------------------- 733a6eaeeb | Nicholas Feinberg | 2022-07-31 21:55:21 -0700 Simplify LOS attack effect logic Simplify and unify code for damaging players and monsters with Drain Life, Ozocubu's Refrigeration, and the Singing Sword. Remove the fairly redundant message announcing everything you hit. -------------------------------------------------------------------------------- 5bf4a2a1db | Nicholas Feinberg | 2022-07-31 21:55:21 -0700 Simplify Drain Life logic Now that players can no longer cast it, no need to special-case summons. -------------------------------------------------------------------------------- 572474d683 | advil | 2022-07-31 18:56:10 -0400 fix: maybe fix a gcc warning -------------------------------------------------------------------------------- 7483850d73 | advil | 2022-07-31 17:52:02 -0400 feat: generalize `F` to fire any targeted item This gives a quicker way of accessing e.g. the targeter for scroll of fear than quivering it. Behavior on launchers and ammo remains the same as before, and you can still use `*` to toss any item. There's a lot of special cases to deal with here in terms of preconditions, so it may be that there are more cases where this menu should be prevented altogether. Also, fix a bug where untargeted firing of disabled items would show the targeter prompt; now it just messages right away. (This is pretty niche, previously you would have to do something like quiver a potion of magic to see this.) -------------------------------------------------------------------------------- 2d25de79ac | advil | 2022-07-31 13:38:16 -0400 feat: readable keycodes for some non-ascii keys This is a fairly inelegant approach that gets the job done for now; it lets "F1" (etc) for function keys, "NPx" for numpad key x, as well as "Down", "PgDn", etc for navigation keys, work as keycodes. These can appear in contexts where a \{} keycode is valid, as well as directly in the [] brackets in a `bindkey` rc line. -------------------------------------------------------------------------------- c1b7fc97e0 | advil | 2022-07-31 11:13:23 -0400 fix: a few more CK_NUMPAD_ENTER bindings Map mode, more, doll editor, text input. -------------------------------------------------------------------------------- afa891f487 | gammafunk | 2022-07-31 09:24:58 -0500 fix: Correct grammar (Solitudinal) For the description of the lunar statue from Lehudib's WizLab and the Zot statue from the Ten Rune Challenge Sprint. Closes #2637. -------------------------------------------------------------------------------- ac7da5f7f0 | advil | 2022-07-30 18:32:34 -0400 fix: update hover on local tiles click If you hover with a mouse, then use arrows to move the hover away, then click without moving the mouse at all, the currently hovered item (not under the mouse) gets activated. This commit updates the hover on mousedown, so that when the click is processed (on mouse up), the item under the mouse is what does get clicked. -------------------------------------------------------------------------------- 43c84944fd | Nicholas Feinberg | 2022-07-30 12:59:58 -0700 Marble at these new tiles (Sastreii) New Tukima's Wizlab marble wall tiles. -------------------------------------------------------------------------------- dbb8aaeb5f | advil | 2022-07-30 15:37:00 -0400 fix: suppress more instances of CK_NO_KEY in local tiles 0d6ea506dcc got one way of producing this keycode, but not the only one. It would be better to fully suppress this in `wait_event`, but I think that would require more of a refactor. -------------------------------------------------------------------------------- 619506e67d | Nicholas Feinberg | 2022-07-30 11:12:11 -0700 Add icons for Brilliance and Resistance (Sastreii) -------------------------------------------------------------------------------- 8769cd89f2 | Nicholas Feinberg | 2022-07-30 11:12:11 -0700 Scale up some art [pun?] (Sastreii) New tiles for Faerie Dragon Scales and basilisks. -------------------------------------------------------------------------------- a52d00042f | advil | 2022-07-30 13:27:47 -0400 fix: accept more keybinds (again) in webtiles 8027019649d8 was too restrictive in its raw key arrow key check; we want to also accept raw arrow keys in new macro definitions. This approach is somewhat hacky (possibly the server should explicitly indicate this mode similar to raw key input mode) but it works. -------------------------------------------------------------------------------- f9470816a2 | advil | 2022-07-30 13:03:10 -0400 fix: correct formatted_string::trim implementation The first pass at this function only trimmed whitespace outside of color tags, which was previously reasonable for the main use cases. However, 29c30a7bfa8 broke that assumption, leading to dead space in some popups. This commit is a full formatted_string::trim implementation that trims whitespace regardless of color tags. -------------------------------------------------------------------------------- edc2efc267 | advil | 2022-07-30 13:03:10 -0400 fix: remove empty spans in newgame buttons Because these are using a css flex layout with equal sizes, empty spans generated from a color string have a weird effect on these buttons. Since 29c30a7bfa80, the strings used for these buttons are guaranteed to have an empty span. Possibly the approach in that commit should be revisited, and I'm unclear on why the button spans are formatted this way, but for now, fix the local problem in the newgame buttons by removing empty spans. -------------------------------------------------------------------------------- 4c7e25f38b | gammafunk | 2022-07-30 11:43:31 -0500 doc: Update a comment Despite what some people claim, hammers and maces are not equivalent! -------------------------------------------------------------------------------- b5fe8ed81c | advil | 2022-07-30 10:42:59 -0400 fix: skill menu alignment issue (Goratrix) -------------------------------------------------------------------------------- 10f4acb857 | advil | 2022-07-30 10:15:17 -0400 fix: fix describe menu issues (xv, ctrl-x) I had completely missed that this exists and uses InvMenu for some reason, and so it needs custom examine code. There was also an issue where (because of inheriting from InvMenu) it needs to override some overridden key bindings. Resolves #2638 -------------------------------------------------------------------------------- c8bbfd0a37 | advil | 2022-07-29 18:02:18 -0400 fix: restore targeting CK_NUMPAD_ENTER binding (Nefhilion) Possibly this should be handled via numpad_to_regular? But right now this is all manual, and probably got deleted by accident. -------------------------------------------------------------------------------- fab03dca74 | advil | 2022-07-29 17:51:09 -0400 fix: use correct index when describing memorized spells -------------------------------------------------------------------------------- 5fb1e05c50 | Nicholas Feinberg | 2022-07-29 14:20:38 -0700 Occasionally generate hand crossbows Oops! Objstat says this increases hand crossbow drops in a 3-rune game by 30-40% or so, but the baseline is quite low. -------------------------------------------------------------------------------- d064c1aaf2 | Nicholas Feinberg | 2022-07-29 11:17:27 -0700 Confirm that #2634 is fixed Closes #2634. -------------------------------------------------------------------------------- 6693796725 | Nicholas Feinberg | 2022-07-29 11:11:52 -0700 Maybe fix a local tiles newgame crash -------------------------------------------------------------------------------- 1ab02bc704 | advil | 2022-07-29 13:50:17 -0400 fix: add some missing `static`s -------------------------------------------------------------------------------- 33dda2a4a5 | advil | 2022-07-29 13:37:46 -0400 feat: scroll by item type hotkeys in InvMenu Long-requested feature, now finally easy to implement. This commit also fixes a number of hover syncing bugs with webtiles that came up while testing it. -------------------------------------------------------------------------------- 29c30a7bfa | advil | 2022-07-29 13:37:46 -0400 fix: explicit default foreground for to_colour_string When the crawl binary renders colour strings, it uses lightgray as the default foreground color. However, this is not explicitly part of the string, so the webtiles color parsing code was not inserting a lightgray span, leading to artifacts. This commit ensures that this default is present in all autogenerated colour strings; it may or may not have some side effects I haven't noticed. (N.b. trying to change this on the webtiles side breaks a *lot* of formatting, unfortunately.) -------------------------------------------------------------------------------- e6dd553d16 | advil | 2022-07-29 13:37:46 -0400 fix: improve cast/view spell menu minorly These still shouldn't be distinct, but for now, this generalizes the toggle keys to commands, and adds a hint to the more indicating which type of menu you are in. -------------------------------------------------------------------------------- 70d6ccd9e9 | advil | 2022-07-29 13:37:46 -0400 fix: generalize some ToggleableMenu code to menu commands This moves `?` to help generally, adds a way to set toggle keys from commands, and then uses CMD_MENU_HELP for the toggle for relevant menus on the basis that this is essentially the help mode for these menus (thanks Kate). -------------------------------------------------------------------------------- 8027019649 | advil | 2022-07-29 13:37:46 -0400 fix: explicit handling for macro raw input mode This seems to have only been working accidentally, by passing everything to the server. But this relied on the server sending back hover info, which seems to be broken by recent changes [I am not sure this was intentional]. Anyways, it's better to just manually implement this so that the client knows it is in manual input mode and can act accordingly, rather than having everything work by side effect. -------------------------------------------------------------------------------- e1bd305f2e | advil | 2022-07-29 13:37:46 -0400 fix: backtrack on a new binding I want to reserve tab/shift-tab for a hypothetical future where keyhelps are widgets, not text. -------------------------------------------------------------------------------- 39874f90f9 | advil | 2022-07-29 13:37:46 -0400 fix: disable examine in KnownMenu Also, make esc abort reset mode rather than close the menu, and provide a hint that ctrl-d + * will reset everything. -------------------------------------------------------------------------------- e010e3413a | advil | 2022-07-29 13:37:46 -0400 fix: don't crash when examining floor items in UseItemMenu Needed to be implemented. Also, prevent a crash when examining unarmed. -------------------------------------------------------------------------------- 9f78f2f222 | advil | 2022-07-29 13:37:46 -0400 fix: yet more memorize menu tweaks * reset hover when switching to/from the hidden spell pane * enable CMD_MENU_EXAMINE bindings (which allows using the examine key on the hidden spell pane) * Remove MF_ANYPRINTABLE, I find that this leads to too many accidental menu exits when using the hide/show features -------------------------------------------------------------------------------- 2c367d4636 | advil | 2022-07-29 13:37:46 -0400 fix: remove legacy ' binding in webtiles This is repurposed to be CMD_MENU_EXAMINE, so pass it to the server. -------------------------------------------------------------------------------- 5930f321ed | advil | 2022-07-29 13:37:46 -0400 fix: don't read keybinds on first rc pass This lets the webtiles menu command check work correctly (we apparentlly cannot rely on `tiles.is_controlled_from_web()` during the first rc pass). Possibly this change should be webtiles-only? But I don't think it will have negative impacts.. -------------------------------------------------------------------------------- fc0b34fa67 | advil | 2022-07-29 13:37:46 -0400 fix: derive keyhelps from command binding This is all fairly painful, brittle code, but this commit at least reduces some hardcoded key assumptions... -------------------------------------------------------------------------------- d8e63177a4 | advil | 2022-07-29 13:37:46 -0400 fix: memorize menu hover issues * don't snap to hover on the server side when receiving scroll information from the client side; this leads to the two being out of sync, and lettering potentially being calculated incorrectly. * don't hover letter-selected singleselect items - most singleselect menus exit (so this doesn't matter), and the memorize menu relied on the previous behavior. (Hopefully no impact outside this menu..) -------------------------------------------------------------------------------- 8c06e03c53 | advil | 2022-07-29 13:37:46 -0400 fix: webtiles mouse hover when menu size decreases Two webtiles bugs: * the visible item range wasn't correctly recalculated when a menu size changed without scrolling * the hover event handlers were getting wiped out when a menu size decreases; particularly noticeable in the spell menu. I'm still not 100% sure why this was happening, but it seems most likely to be a side effect of the `clear()` call on the container? -------------------------------------------------------------------------------- dca162d7b1 | advil | 2022-07-29 13:37:46 -0400 fix: correctly sanitize mouse hover in memorize menu With menu_arrow_control=false, hover can still be set by the mouse, but `set_hover` does not apply the sanitizing `min` check (because it doesn't change it at all). This commit adds a corresponding check for this case in `update_menu`, which should be called whenever `items.size()` may have changed. -------------------------------------------------------------------------------- 83eecf6fab | advil | 2022-07-29 13:37:46 -0400 fix: various issues with the `F` menu Previous commits broke some of the keybinds for this menu, which needed attention anyways. The "throw any item" menu was different from the * menu only if you had a wielded launcher at this point, so it was a little silly to have both. Also, fix a bunch of the messaging, generalize some of the validity checks. -------------------------------------------------------------------------------- b7493b8c6f | advil | 2022-07-29 13:37:46 -0400 feat: add CMD_MENU_EXAMINE and support code The Menu superclass had some support for the concept of describing a menu item, via ACT_EXAMINE and all the cycling stuff, and nearly every Menu subclass uses it somehow, but for whatever reason handling was left to manual subclass code. This commit generalizes the standard pattern into the superclass, hopefully making it more straightforward to write code that does whatever description popup is needed. Along the way, this change makes it possible to add a distinct "examine selected menu item" command, which I have bound to `\\` and `'`. The latter replaces a rather ancient compatibility binding, we'll see if this bothers people. Some misc refactoring that happened as part of this: * clean up acquirement menu a bit * enable hover in mutation menu, various deck menus * improve some shop menu behaviors, stash search menu behaviors * fix a weird casting preselect bug -------------------------------------------------------------------------------- 9571f3400c | advil | 2022-07-29 13:37:46 -0400 docs: comment Menu class hierarchy I'm tired of trying to keep all this in my head and inevitably forgetting StackFiveMenu or whatever. No doubt this comment will go stale at some point, and there are ways of programmatically generating this, but I think it's still better to have as just a text comment in an easy place than not. Also, remove a reference to a nonexistent class. -------------------------------------------------------------------------------- 3c416a43b8 | advil | 2022-07-29 13:37:46 -0400 refactor: improvements to UseItemMenu This is mostly pulling code into UseItemMenu, though I did not succeed yet in eliminating the outer loop. * Restructure API around operation_types, instead of object selectors, and use this to set title prompts inside the menu * Move non-terminating key handling into process_key * other misc tweaks -------------------------------------------------------------------------------- 5e10d65620 | advil | 2022-07-29 13:37:46 -0400 fix: name some magical menu constants Also, rewrite the key function that uses these, as it was pretty confused (I think, not in ways that mattered). -------------------------------------------------------------------------------- d406f26c7b | advil | 2022-07-29 13:37:46 -0400 refactor: abstract more menu actions to commands Abstract various selection commands to CMD_MENU_... actions, and refactor Menu::process_key accordingly. Hopefully won't break subclasses in ways that my testing has so far missed, as this is a relatively major change in how input is handled across all menus. This commit should by itself not result in much behavior change (a few minor bugfixes and one exception below). Notes: * This adds a new keymap context specifically for multiselect menus, as a way of having keybinds that target just that case. It's maybe a bit heavy handed, but works surprisingly well. * Behavior change: enter in a multiselect menu with no selection does not exit. I will probably adjust this some more. * Remove multiselect count in menu title, as it was redundant with footer. * Remove MF_PRESELECT, as it wasn't needed for anything (despite a few bits of code that say what they're doing is "preselecting"). -------------------------------------------------------------------------------- 9e8725f314 | advil | 2022-07-29 13:37:46 -0400 refactor: updates to webtiles keyhandling This is my latest take on how to do webtiles keyhandling in a way that points towards a more modern approach, while supporting old game versions. Followup to 7b1be97da7. * For versions following this commit, convert numpad and function key handling to use modern `code` values rather than keycodes. This has widespread browser support in 2022 and should be more robust than the previous keycode-based approach. * Remove keycode overrides from game.js, with a new division of labor and clearer handling for legacy keycodes. Now all the client needs to do to use updated keyhandling is enable `code` mappings. * Support for some new internal keycodes: ctrl+shift bindings; modified space, del, enter, bksp, esc; numpad =/enter, F keys through F19, fix delete handling (this is the only one that works on older versions). Still to be done: fix alt handling, convert modifier handling to use `code`. This commit attempts to support all versions and all possible cache states for non-versioned code (which on some servers may require a server restart to refresh). We'll see if that actually works. -------------------------------------------------------------------------------- e3431fa5fd | advil | 2022-07-29 13:37:46 -0400 feat: a few more mac-oriented console keys Plus, some comments. -------------------------------------------------------------------------------- df642b0ec9 | advil | 2022-07-29 13:37:46 -0400 fix: tweaks for ncurses keycode handling * Add and update various comments * Fix (I hope) the keycode for numpad / in application mode, this seems to have simply been wrong (but only tested on mac...) * Add a mapping for keypad = * add rxvt-style handling of function keys for mac Terminal.app defaults, working around what seems to be buggy terminal behavior * add human-readable names for F keys through F24 for ncurses. I didn't add keycodes because this is annoying to do for stupid reasons. Probably not widely supported, but they work on iTerm2! * some misc menu fixes that got rolled in -------------------------------------------------------------------------------- 0d6ea506dc | advil | 2022-07-29 13:37:46 -0400 refactor: Revamp SDL keycode handling Main changes: * Finally, convert to internal keycodes for SDL keycodes where we have internal keycodes. This lets a bunch of keycodes be unconditionally defined, and means that all build targets will use the same keycodes for these keys/key combos (though they vary in what is available). It does mean that SDL keycodes will change, breaking existing macro files, but also that the same macro defs will (largely) work across all build targets. Also, some combos will no longer work (see below). * Expand the set of internal keycodes: Support ctrl+shift for arrow (etc) keys; explicitly support modifiers for enter, bksp, esc, del; a few missing numpad cases. * Revamp how alt is handled. Well, it uses the original principle (just shifting the key space by -3000), but is now applied more systematically to all non-ascii keys. For ascii keys, alt is still not intercepted because these days this is used to input unicode chars on many OSs. I've fixed some mac issues with this. * Implement option modifier support for macs. This uses the same hacky keycode shifting as alt, just with a bigger number (-20000). * Refactor the SDL keycode translation code so that it makes more sense. * Fix some macro menu bugs, show naming for basically all keys correctly now. (Some UTF issues still maybe?) * Fix some lingering issues with numpad key suppression (before, it was returning a textinput CK_NO_KEY event as well as the key event.) What is missing or iffy: * The previous code had incomprehensible, hacky, modifier handling code that (sort of) worked on absolutely every key. I've moved away from this, where the practical impact is the ctrl works on a lot less stuff. In particular, ctrl + fn keys is not implemented. If people were using this, I can probably bring it back. Also, ctrl with whatever random SDL keycodes you have will not work, because this was a really bad idea. Shift is also fairly variable, though I'm not sure it's more-so. * Numpad with ctrl and shift is a bit weird. Previously, on SDL numpad keys were just mapped to arrow keys. Since we have numpad numbers, I mapped to those and added bindings. But, to get movement commands to work, ctrl/shift on the numpad turn the key into its corresponding arrow key. Also, in menu code numpad keys act like arrow keys. It's all a bit messy. * Haven't checked if some of the new keycodes can be added to webtiles Resolves #1228 -------------------------------------------------------------------------------- 4075c45985 | advil | 2022-07-29 13:37:46 -0400 fix: handle uppercase prompt menu defaults (Fix the macro menu "really clear" prompt, maybe others) -------------------------------------------------------------------------------- 2a601844f1 | advil | 2022-07-29 13:37:46 -0400 refactor: generalize some numpad handling For popups, menus, etc we want numpad special keys to be handled uniformly with their regular counterpoints basically all the time. Before there was a lot of ugly special casing for this that often has had mistakes, missing mappings, etc. This commit generalizes the mappings so that they are translated behind the scenes on all menus except the macro menus, as well as scrollers. Keymaps do still allow changing the numpad keys specifically. Some waffling on what to do with numbers. Previously, most menus did no translation at all for them (rendering them inert), and for these menus, they get translated to numbers now. (Most keyboards with a numlock should be able to turn this off and get navigation keys still.) The skill menu had some (incorrectly implemented?) hardcoding to let 2/4/6/8 act as direction keys, and I've left this (/fixed this to be) active. Possibly this should be done uniformly? Not sure what players will expect. (Also, some misc unrelated comments) -------------------------------------------------------------------------------- 2d6fbdf044 | advil | 2022-07-29 13:37:46 -0400 refactor: make menu quantity selection non-default This was a default possibility, I assume, from back in the days where Menus were used almost entirely for items, and managing stacks mattered for more things (e.g. weight). Nowadays I'm aware of only two menus that even need this (drop and pickup), and even here this is not an option that users have much of a reason to use. Swap the meaning of the flag and the corresponding defaults so that menus have to enable this rather than disable it; in principle this also simplifies using digits for other things in some Menus. -------------------------------------------------------------------------------- 2ec3508d20 | advil | 2022-07-29 13:37:46 -0400 fix: improve overriding options for Menu subclasses Avoid hacky pre_process with a cleaner set of things to override (mainly used for help right now), implement handling for `-`. Numpad handling is very ad hoc here still, maybe menus should always collapse numpad equivalents to their regular keys in a systematic way? -------------------------------------------------------------------------------- 0719e5db6c | advil | 2022-07-29 13:37:46 -0400 fix: tweak what bindkeys are allowed * blanket disallow rebinding esc and mouse commands in popups/menus * mark CK_MOUSE_MOVE as synthetic * ignore menu key rebinds in webtiles specifically. Most of these "work" but (rightly?) don't send UI state back to the webtiles client, so they result in inconsistent client/server UI state, and are basically just a recipe for bug reports as-is. I'm not sure how to do this without implementing the abstract commands on the client side and transmitting keybinds, which seems extremely involved. -------------------------------------------------------------------------------- 2f41a18165 | advil | 2022-07-29 13:37:46 -0400 feat: CMD_MENU_... for menu navigation bindings This is part of my attempt to somehow get some order out of the keybindings used across different menus, by putting a layer of abstraction between individual keys and menu actions. This is only a partial implementation that focuses on navigation: by design there's quite a bit of falling back on the old process_key, partly because I'm undecided about how to handle some of the general cases, and also because there are many, many, menu-specific bindings that don't seem like they should obviously be implemented in a general way. Some key missing things: * Most aspects of this in webtiles -- I'm completely undecided about how or even if to handle this. Many of the keybinds covered in this commit have full javascript parallel implementations for snappier UI. * Many more menu special cases * select/activate actions * user rebinding. Right now this is completely disabled, because I think there's certain things we would not want to allow at all (e.g. bindings for mouse buttons, CMD_MENU_EXIT, stuff like this). Of course, this is advanced rc stuff, so it call fall under caveat emptor? -------------------------------------------------------------------------------- 0a7a3d12f8 | Nicholas Feinberg | 2022-07-27 21:55:23 -0700 Maybe fix a revival untransform crash (Oneirical) Very scary to do almost anything while dead. -------------------------------------------------------------------------------- fe0b616f53 | Nicholas Feinberg | 2022-07-27 17:27:53 -0700 Fix Meteoran manual positioning (FizzleBang) -------------------------------------------------------------------------------- 6e406bff71 | Nicholas Feinberg | 2022-07-26 18:05:04 -0700 Give a +1 to the AM starting sling It's still slightly weaker than the Hu starting shortbow, but perhaps a little less sad. -------------------------------------------------------------------------------- 9a622b1e81 | Nicholas Feinberg | 2022-07-26 17:45:31 -0700 More Abyssal tiles (Sastreii) A tweak to Louise and a rework of the Mad Acolyte of Lugonu. -------------------------------------------------------------------------------- 44044ebd20 | Nicholas Feinberg | 2022-07-26 17:45:31 -0700 Maybe fix a Golubria + floor ID bug (But I couldn't repro the problem.) -------------------------------------------------------------------------------- 5d2155ec51 | gammafunk | 2022-07-26 10:27:05 -0500 fix: Remove an unecessary subvault (Goratrix) The vault grunt_ashenzari_visionary_trees is one of two fallback vaults placed when information about Lair branches isn't available. However we don't need two distinct vaults for this case, as fallback never happens in an actual game. Remove the trees vault, leaving grunt_ashenzari_visionary_lava as the fallback, and add allow_dup to the latter so it can be used twice. -------------------------------------------------------------------------------- d064cfad1c | Nicholas Feinberg | 2022-07-25 23:06:30 -0700 Fix: don't double sandblast delay on miscasts This was not intended, and is (IMO) a bug. -------------------------------------------------------------------------------- 52dc46e822 | Nicholas Feinberg | 2022-07-25 23:03:52 -0700 Buff sandblast accuracy To make missing with an extra-slow spell less painful. This has a pretty small effect in the cases I tested, but maybe it helps. -------------------------------------------------------------------------------- f6505d1e93 | Nicholas Feinberg | 2022-07-25 23:01:35 -0700 Increase sticky flame damage by 25% vs monsters Sticky Flame has taken some hits in recent versions, not least due to attacks of opportunities weakening kiting. Now that it's not in the Fire Elementalist start, it can afford to be a bit stronger. This doesn't affect the displayed damage, which only shows the initial impact. TODO: clean up and unify this. This does not affect sticky flame damage on players. -------------------------------------------------------------------------------- 416d80c6de | Nicholas Feinberg | 2022-07-25 23:01:35 -0700 Increase Flame Wave damage Continuing the saga of dde70e7af44 and daab1c2f9be. Average damage per round (pre-AC): 0 power 100 power Original 5 25 Post-nerf 4 14 Post-buff 4 17 Current 4 21 We're gonna find the perfect number. It's in there somewhere. -------------------------------------------------------------------------------- 98872c3ec8 | Nicholas Feinberg | 2022-07-25 23:01:35 -0700 Increase Irradiate contamination Irradiate is widely considered an extremely strong spell, 'trivializing' many encounters and much stronger than other spells of its level. The 'contamination' limit, intended to balance it by limited access to other contamination-causing effects, has become less relevant as those other sources (Haste, Invisibility spell, Controlled Blink...) have left the game. It's not a bad thing for Crawl to have strong spells, but we want players to be making exciting strategic choices, and to be excited to upgrade from lower level spells to higher ones. We've recently reduced the spell's max damage, but this hasn't really made any signifcant impact on its power. So, let's dial it back a little, from 3-4 'safe' uses before hitting yellow contamination to 2-3. I expect it will still be quite powerful, but perhaps somewhat more situational. This commit also changes the threshold at which contamination goes from dark grey (trace) to light grey (you're near yellow contamination), such that being in light grey still warns you that one more Irradiate could put you into yellow. This affects pretty few other effects now - evokable invisibility was the only other one that had the same logic, and you really don't want to use that in grey contam regardless. Currently: 1000-1500 contam (light grey is 3.5k, yellow is 5k) Best case: 4 safe casts at 1k contam each (5th puts you at yellow contam guaranteed, ignoring contam reduction over time). Worst case: 3 safe casts at 1.5k contam each (5th is guaranteed yellow). New: 1250-2000 contam (light grey is 3k, yellow is 5k) Best case: 3 safe casts at 1.25k contam each (4th is yellow guaranteed, ignoring contam reduction over time) Worst case: 2 safe casts at 2k ea (3rd is yellow guaranteed). -------------------------------------------------------------------------------- 906f1d757c | Kate | 2022-07-25 21:30:03 +0100 Make unidentified ?butterflies fizzle under Okawaru As with scrolls of summoning - instead of summoning hostiles have the scroll just fizzle if read-identified under Okawaru or with Sacrifice Love. -------------------------------------------------------------------------------- 4287b5424a | Kate | 2022-07-25 21:29:59 +0100 Update some halo descriptions To make it clearer that the accuracy bonus doesn't apply against the owner of the halo. Also correct an inaccurate comment. -------------------------------------------------------------------------------- a87ceb1aab | gammafunk | 2022-07-25 15:06:40 -0500 fix: Remove unreachable items from a vault (dilly) The vault grunt_ashenzari_visionary didn't have tagging to prevent level items from generating inside its unreachable areas. Its `no_tele_into` tagging was also a bit suspicious in that it only masked certain squares. Add no_item_gen and no_tele_into to the subvault tags to prevent any problems. Also rework the terrain and monster placement inside these vaults. Although weights were chosen to make monster closets unlikely, they didn't fully prevent them, and the simple SUBST used meant that solid features had to be very sparse. Make a grid of wall location glyphs for the non-Shoals subvaults, placing walls only on these locations and thinning out the walls as appropriate to give the sight sense open areas versus walled areas. This also allows us to use trees in the Swamp subvault. Adjust monster placement use place: tags so we don't have hard-coded lists of decorative monsters that easily go stale. -------------------------------------------------------------------------------- 88e6f02907 | Neil Moore | 2022-07-24 23:39:04 -0400 Add a missing word [skip ci] -------------------------------------------------------------------------------- 35202b1573 | Nicholas Feinberg | 2022-07-24 20:07:42 -0700 Maybe fix ?id uselessness (Lightli) Broken by the addition of scrolls of butterflies. -------------------------------------------------------------------------------- 30c7767f5c | Nicholas Feinberg | 2022-07-24 11:22:09 -0700 Add Naga recolour tiles (Lyre) -------------------------------------------------------------------------------- 030b2a9e5e | Nicholas Feinberg | 2022-07-24 11:22:09 -0700 Add Djinni recolour tiles (Lyre) -------------------------------------------------------------------------------- 370ae71bdb | Nicholas Feinberg | 2022-07-24 11:22:09 -0700 Revivify Borgnjor's Mausoleum (Sastreii) New floor & wall tiles for the famous wizlab. -------------------------------------------------------------------------------- 68d77ee5f7 | Nicholas Feinberg | 2022-07-24 11:22:09 -0700 Dance with the stars (Sastreii) Add animated starflower tile variants. -------------------------------------------------------------------------------- 552816ba1b | Nicholas Feinberg | 2022-07-24 11:22:09 -0700 Don't autoexplore into krakens (ardl, CarefulOdds) Krakens weren't considered dangerous until they woke up and started spawning tentacles, since they couldn't path to the player. Fixes #2556. -------------------------------------------------------------------------------- 46b74f5a98 | Nicholas Feinberg | 2022-07-24 11:22:09 -0700 Remove KRAKEN_TENTACLE_RANGE Unused since 26b18322453b0e8f90b8bb6dee5690025d588116 (2010). -------------------------------------------------------------------------------- 86a584de0a | Nicholas Feinberg | 2022-07-24 11:22:09 -0700 Add a new ancient tile (Sastreii) Ancient zyme. -------------------------------------------------------------------------------- 0f71de6fce | Kate | 2022-07-23 13:19:55 +0100 Don't let troves ask for ?butterflies under Okawaru Since they're useless otherwise, so don't make for a meaningful toll. Worshippers of Ashenzari that have sacrificed love can still be asked for scrolls of butterflies, but that's possibly enough of an edge case to allow them to get away with. -------------------------------------------------------------------------------- 46a8461d6a | riverfiend | 2022-07-22 20:01:36 -0700 Make classed draconians match their base color Now that each classed drac maps neatly onto a base drac color, it's silly for the white draconian stormcaller to be brown, or for the black draconian knight to be cyan. The line-up isn't perfect, classed dracs are kept on light colors to help them stick out in vaults that explicitly use different base colors. -------------------------------------------------------------------------------- 1931ea0d09 | Nikolai Lavsky | 2022-07-22 19:48:58 -0700 fix: tweak shield offsets for several elves and spriggans This commit fixes shield offsets for the following monster tiles: * deep elf pyromancer, zephyrmancer, and demonologist; * spriggan berserker and air mage. -------------------------------------------------------------------------------- cd2578efcb | Nikolai Lavsky | 2022-07-22 19:48:28 -0700 fix: tweak spacing on the dungeon overview screen As a followup to ed30ed24e, this commit fixes column alignment in the two-columns mode. -------------------------------------------------------------------------------- 6e3fbd0ac6 | Nicholas Feinberg | 2022-07-22 18:49:08 -0700 Fix op/dr hat use (ebird) Closes #2625. -------------------------------------------------------------------------------- d4eca3973b | Nicholas Feinberg | 2022-07-22 18:33:46 -0700 Don't let Ashenzari block innate mutations (Nomi) Oops! -------------------------------------------------------------------------------- 9542dc02ca | Nicholas Feinberg | 2022-07-22 16:46:43 -0700 Make Ashenzari block curse-shattering mutations Just a really excessively brutal feel-bad otherwise. -------------------------------------------------------------------------------- 65808cdf32 | Nicholas Feinberg | 2022-07-22 15:56:22 -0700 Add new mutation tiles (Sastreii) SInv, horns, antennae, and passive mapping (the thing DD got and Meteorans still get). -------------------------------------------------------------------------------- 1b0b605977 | Nicholas Feinberg | 2022-07-22 15:56:22 -0700 Add Teleporting status & icon (Sastreii) -------------------------------------------------------------------------------- 0687760f0c | Nicholas Feinberg | 2022-07-22 15:56:22 -0700 Add some uniquely abyssal tiles (Sastreii) New Mlioglotl and Louise tiles. -------------------------------------------------------------------------------- 2c4c91d9db | Kate | 2022-07-21 19:41:55 +0100 Give scrolls of butterflies their own summon type Since the spell has been removed, treat them the same way as scrolls of summoning (and re-remove the spell enum at TAG_MAJOR_VERSION 35). This reverts commit 1595a9cb2e31c54c4631752689330e52b5ae3b26. -------------------------------------------------------------------------------- 85def6a6a5 | Kate | 2022-07-21 19:41:55 +0100 Fix summon scrolls being readable under no-allies conducts Scrolls of summoning and butterflies are marked as useless under Sacrifice Love and while worshipping Okawaru, but previously could still be read (with no effect other than wasting a turn for ?summoning, and with ?butterflies creating friendly monsters that then turned hostile) - prevent reading them while under a no-allies conduct. -------------------------------------------------------------------------------- cbf53edc00 | Kate | 2022-07-21 19:41:34 +0100 Fix inverted logic in a butterfly check -------------------------------------------------------------------------------- cf90b5c518 | Nicholas Feinberg | 2022-07-21 07:55:08 -0700 Maybe fix an obscure Abyss exit bug (CarefulOdds) meaning that the game considered it to be temporary terrain. A water nymph was killed in the same action that the exit was spawned. I was unable to repro the issue, but I believe that the game still considered the exit to be part of the nymph's temporary terrain. This tries to clean up that situation. Closes #2618. -------------------------------------------------------------------------------- 1595a9cb2e | advil | 2022-07-21 10:34:42 -0400 fix: unremove `SPELL_SUMMON_BUTTERFLIES` -------------------------------------------------------------------------------- cbe080d7e0 | Nicholas Feinberg | 2022-07-20 19:05:23 -0700 Scroll of butterflies icon (Sastreii) -------------------------------------------------------------------------------- fb1a3fa8b1 | Nicholas Feinberg | 2022-07-20 11:27:01 -0700 Let a thousand starflowers bloom (Sastreii) New Starflower tile. -------------------------------------------------------------------------------- b26ba3297d | Nicholas Feinberg | 2022-07-19 22:02:55 -0700 Fix the build? -------------------------------------------------------------------------------- ff774ecaa7 | Nicholas Feinberg | 2022-07-19 22:01:23 -0700 Brutally nerf butterfly EV 25 -> 15. This is intended to make scrolls of butterflies more effective against ranged attacks. Centaurs go from having a 20% chance of hitting a butterfly to a 44% chance. Deep elf master archers go from 42% to 65%. Dropping to 12 EV would be even better, but I don't yet have the heart... poor butterflies... -------------------------------------------------------------------------------- 0affbf219e | Nicholas Feinberg | 2022-07-19 21:58:36 -0700 Add a targeter for ?butterflies And fix the ?summoning targeter. -------------------------------------------------------------------------------- dfd6e90d5d | Nicholas Feinberg | 2022-07-19 21:53:27 -0700 Begin the Butterfly Bargain (kate) Make troves not charge ?fog if your game only generates ?butterflies. -------------------------------------------------------------------------------- 4e36813289 | Nicholas Feinberg | 2022-07-19 21:24:37 -0700 Set scroll of fog to alternate with butterflies Delver is unaffected. -------------------------------------------------------------------------------- df2fad6ba1 | Nicholas Feinberg | 2022-07-19 21:24:36 -0700 New scroll: scroll of butterflies For many years, there were suggestions to turn the 'summon butterflies' effect from random uselessness into its own scroll (c.f. 17b97e55154e). Before we had 'alternate item' tech, this would have caused inventory clutter. But now we can have variety without causing UI issues or option overload, and with the removal of the Summon Butterflies spell, the only other analogous effect is a Xom action! A subsequent commit will make this an alternate for scrolls of fog. -------------------------------------------------------------------------------- 230be3ade3 | Nicholas Feinberg | 2022-07-19 21:21:17 -0700 Maybe silence some compilation warnings -------------------------------------------------------------------------------- 7b45a56547 | Kate | 2022-07-19 18:04:56 +0100 Don't list Deep Dwarves on the aptitudes menu (#12704) -------------------------------------------------------------------------------- ee4989fb63 | Nicholas Feinberg | 2022-07-19 09:54:00 -0700 Fix: don't spawn monsters in portals (CarefulOdds, Goratrix) Broken in 74bf5736c0002df9636fc6333b837f5770b722dd . -------------------------------------------------------------------------------- 4df2a8d2dc | robertxgray | 2022-07-19 16:46:31 +0200 Build a single ABI in Android build tests -------------------------------------------------------------------------------- fc89b1a5bd | Edgar A. Bering IV | 2022-07-18 20:57:32 -0700 docs: changelog through 0.29-a0-875 -------------------------------------------------------------------------------- 74bf5736c0 | Nicholas Feinberg | 2022-07-18 19:07:50 -0700 Remove env.spawn_random_rate (riverfiend, acrobat) This field was extremely useless and mostly misleadingly misused. This might fix a bug with orb spawns not spawning in Temple. At any rate, they spawn there now. -------------------------------------------------------------------------------- 76f050b3ff | Nicholas Feinberg | 2022-07-18 19:07:50 -0700 Intermediate state -------------------------------------------------------------------------------- 9d4207de54 | Nikolai Lavsky | 2022-07-18 15:10:52 -0700 fix: allow Poisonous Vapours to work under Still Winds Allow Poisonous Vapours to work under -Clouds, since as of 3f0e5c0cc there are no clouds involved. -------------------------------------------------------------------------------- 797fff5ad1 | Nicholas Feinberg | 2022-07-17 11:55:30 -0700 Mark elementals and animated weapons/armour M_UNBLINDABLE They have no eyes. Possibly tomes should go this way too. Undecided. -------------------------------------------------------------------------------- 9694c85c73 | Nicholas Feinberg | 2022-07-17 11:55:30 -0700 Mark slime creatures M_UNBLINDABLE (graveyardigan) Looks like an oversight - all other jellies have this. -------------------------------------------------------------------------------- 2c972031a6 | Kate | 2022-07-17 03:34:55 +0100 Fix various Step from Time pathfinding interactions (acrobat) Don't let monsters path towards the player during Step from Time if marked or if (0,0) was visible from the location where the ability was used, and don't let monsters re-target the player while they're at (0,0) if they fail a stealth check. It's entirely feasible that this makes Step from Time work completely differently to how it used to, but since nobody really understood how it worked in the first place that's probably fine. -------------------------------------------------------------------------------- 4f890cd2dc | Kate | 2022-07-17 01:32:14 +0100 Fix slimified Dowan/Duvessa handling Slimified monsters shouldn't be able to turn hostile again, as this causes messy interactions with Jiyva penance prompts. Instead treat slimify similarly to banishment and anger the other twin (along with some speech lines for Dowan, but none for Duvessa since her perma-berserk means they'll never be used). -------------------------------------------------------------------------------- db86c2195a | Kate | 2022-07-17 01:32:03 +0100 Fix some Dowan/Duvessa speech handling when dueled If it's even possible to duel one of Dowan/Duvessa, fixes the surviving twin acting as if the dueled twin had been banished. If the player abandons Okawaru mid-duel with one of the twins, the other will still act like the dueled twin is dead on their return, but this is probably impossible to do in the first place anyway. -------------------------------------------------------------------------------- b03dc68cea | Kate | 2022-07-16 23:18:58 +0100 Trim a floor from Lair To continue shortening some of the branches which outstay their welcome, as discussed in PR #1898 and partially implemented with 0.28's shortening of Depths. More substantial changes have been discussed for the future (such as only generating one S branch per game, and only one of Hell or Pan for the extended endgame), but in the meantime shortening Lair slightly is a good step in the right direction. Monster spawns and vault depths are mostly adjusted such that the new Lair:1 is equivalent to the old Lair:2. -------------------------------------------------------------------------------- 0545e20025 | Nicholas Feinberg | 2022-07-16 13:30:26 -0700 Ban useless attack orders against invisible foes Prevent wasting time. This is sort of weirdly inconsistent (we allow attack orders when you have no allies at all) and should probably be rethought. -------------------------------------------------------------------------------- a8a175f626 | Nicholas Feinberg | 2022-07-16 13:19:34 -0700 Warn when ordering an attack on an invisible foe If some or all of your allies can't see invisible. -------------------------------------------------------------------------------- 6811fc6c64 | Nicholas Feinberg | 2022-07-16 13:03:59 -0700 Simplify frozen ramparts code (Gammafunk) The loop was a copy-paste from slime wall code - it's redundant here. -------------------------------------------------------------------------------- 27034753ed | Nicholas Feinberg | 2022-07-16 13:03:42 -0700 Simplify god spell hate code -------------------------------------------------------------------------------- 9cde7d24d7 | Kate | 2022-07-16 19:52:21 +0100 Apply coding conventions -------------------------------------------------------------------------------- c8ba4cecf6 | Kate | 2022-07-16 19:52:21 +0100 Remove obsolete evocations enhancer handling Also tied in to Pakellas, this has been unused for years and makes the code for all evokers unnecessarily more complicated. -------------------------------------------------------------------------------- 1d18206e20 | Kate | 2022-07-16 19:52:21 +0100 Remove obsolete Pakellas code There's no reason for all this to still exist, since Pakellas doesn't pretend to be anywhere near functional if a player does somehow transfer a Pakellas-worshipping save to a modern version, and any future reimplementation of the god would need to be a redesign from scratch. Just keep around the minimum amount of code to allow transferring without crashing or completely breaking the game, and don't punish players for abandoning Pakellas. -------------------------------------------------------------------------------- 0e1e14f5ec | Kate | 2022-07-16 19:52:21 +0100 Fix some dancing weapon interactions under Gozag (#2530) Fixes dancing weapon kills not granting wereblood stacks, as well as possibly some other very niche interactions such as hints mode kill messages not displaying. Closes #2530. -------------------------------------------------------------------------------- 9f61a2287f | Kate | 2022-07-16 19:52:21 +0100 Let Gozag give gold in the Abyss again Missed from the rest of the reverts in ba36221789. -------------------------------------------------------------------------------- 9b1aa3ac5b | Nicholas Feinberg | 2022-07-15 22:05:20 -0700 Display weapons for zombie orcs Fixes #2476. -------------------------------------------------------------------------------- f0f64f35a9 | Nicholas Feinberg | 2022-07-15 22:00:55 -0700 Update Parghit desc to match art (ShaperMC) :( goodbye, wiry frame Closes #2482. -------------------------------------------------------------------------------- dc776d099f | Nicholas Feinberg | 2022-07-15 21:58:15 -0700 Fix yet another fishtail bug (ardl) Don't unmeld boots while in statue form after leaving water. Merfolk fishtail bugs are my Moby Dick. Someone please rescue me. Fixes #2537. -------------------------------------------------------------------------------- a3d7043d74 | Nicholas Feinberg | 2022-07-15 21:46:16 -0700 Fix unneeded Devastator attack prompts Closes #2554. Also future-proof the sceptre of torment. -------------------------------------------------------------------------------- 1ba91cf0d7 | Nicholas Feinberg | 2022-07-15 21:42:16 -0700 Refactor melee_attack bad attack code -------------------------------------------------------------------------------- 6deee45b7e | Nicholas Feinberg | 2022-07-15 21:18:47 -0700 Shift goblin weapon tile up one pixel This is an attempt to fix #2557, but I haven't bothered to compile webtiles to test it. -------------------------------------------------------------------------------- 5add3c4762 | Nicholas Feinberg | 2022-07-15 18:37:58 -0700 Don't show fake frozen ramparts floors Fixes #2609. -------------------------------------------------------------------------------- 16f3739923 | Nicholas Feinberg | 2022-07-15 18:28:26 -0700 Refactor is_seen_foo_wall functions -------------------------------------------------------------------------------- 777627f9b7 | Nicholas Feinberg | 2022-07-15 18:15:26 -0700 Don't autoexclude friendly statues (CarefulOdds) Closes #2612. -------------------------------------------------------------------------------- bdabc8c6d3 | Nicholas Feinberg | 2022-07-15 17:50:12 -0700 Fix: allow autoexplore with inhibited regen (various) Yet another in a very long series of issues with i_feel_safe(), a876b224025 fixed various issues with resting while inhibited regen prevented the player from healing. However, it unintentionally broke many other things that depend on i_feel_safe(), such as autoexplore, running, interlevel travel, spell memorization, etc etc. It also gave a very confusing message - it was not at all clear that inhibited regen was at fault. This refactors the code to split out the relevant check into a new can_rest_here() function. (Maybe that function should also call i_feel_safe()?) It will almost certainly cause new issues. This closes #2595. -------------------------------------------------------------------------------- 24c0ca63c9 | gammafunk | 2022-07-15 12:57:06 -0500 fix: Properly tag two transporter vaults The vaults gammafunk_sealed_arena and gammafunk_sealed_library were not placing under their usual FLOAT orient. When various transporter vaults were unified so their Vaults branch variants didn't need to be separate vaults, these two got that treatment, but without proper tagging with transparent for the outside and opaque for the inside. The passable tag they were given meant they always failed to place as FLOAT vaults. Also add salamander tyrants to gammafunk_sealed_library as alternates for nagaraja, since that's appropriate for this vault. -------------------------------------------------------------------------------- 2802c0ca9a | Nicholas Feinberg | 2022-07-15 07:18:24 -0700 Clarify Dispersal Will checks (Booper) -------------------------------------------------------------------------------- 6161e89988 | Nicholas Feinberg | 2022-07-14 22:10:12 -0700 Dial back corrosive bolt scaling a bit (Ge0ff) Accidental side effect from monster wand changes. (0fff342652f313) Deep elf sorcerer: 3d25 -> 3d20 -> 3d21. Ancient lich: 3d35 -> 3d42 -> 3d34. -------------------------------------------------------------------------------- e8845773e3 | Nicholas Feinberg | 2022-07-14 10:00:40 -0700 Nerf short blade damage (acrobat) When we switched long blades to using dexterity for damage, we made short blades do likewise purely for player intuition. It felt very odd that the smaller, more 'dextrous' short blades would use strength if long blades used dex. At the time, I noted (in 85b37ae345e8) that short blades might need a compensatory nerf. This was indeed the case. A pretty middling endgame character (15 str, 25 dex, 15 fighting & short blades) was getting the equivalent of an extra ring of slaying compared to the old status quo, which seemed neither necessary nor helpful - it made short blades less interesting by helping players just plow through everything with them, rather than needing to stab, etc. To compensate, shift base damage on quick blades, short swords and rapiers down 1. Daggers are unaffected - their base damage is already quite low and they're mostly used early game, where the stat difference is lower. Short swords don't really need the nerf either, but I worry there's not enough differentiation between them and rapiers otherwise. I considered removing stat scaling from short blades entirely, but that seemed like a more complex change (another special case). Let's try this for now. -------------------------------------------------------------------------------- 0fff342652 | Nicholas Feinberg | 2022-07-14 08:48:19 -0700 Brutally nerf Ijyb In general, DCSS tries to provide some form of tactical counterplay for threats. If you see a hydra on D:6, it's a normal-speed melee threat, so you can walk away. A cyclops is slow; a centaur is fast, but does much less damage and drops its bow in melee. As the iconic splash screen of Ijyb melting a player with a wand of acid depicts, Ijyb (and other early game wand-users) went a bit too far - long ranged, very high damage threats. Let's try dialing them back to more reasonable numbers for their depth and see how it plays. Wand Old New /acid 3d12 3d9 /light 3d12 3d9 /qsilver 3d14 3d9 /mindburst 1d22 1d20 /iceblast 3d8 3d8 /flame 3d3 3d5 Also, simplify the logic to remove a bonus special case for wands. GOOE Mindburst damage increased slightly, purple draconian quicksilver bolt damage decreased slightly, various corrosive bolt casters' damage decreased slightly. -------------------------------------------------------------------------------- e0f87948b3 | Nicholas Feinberg | 2022-07-14 07:43:31 -0700 Give the amulet of vitality a shop price Somewhat arbitrary. -------------------------------------------------------------------------------- 116ddc6ace | Nicholas Feinberg | 2022-07-13 20:26:33 -0700 More explicitly document Zin hell effect resistance This was canonically classed as 'protection from Chaos', but I don't think hell effects are really all that chaotic. No more than half the other things in Crawl, anyway. We should probably make poly resistance a little clearer, too. -------------------------------------------------------------------------------- 303e14b210 | Nicholas Feinberg | 2022-07-13 20:20:14 -0700 Don't let Yred derived undead attack out of LOS (ebering) This was an oversight during the recentish Yred rework. This might not be the right way to fix this (perhaps we should add an unlimited duration fake abjuration?), but eh, close enough. -------------------------------------------------------------------------------- 4793fd635e | Nicholas Feinberg | 2022-07-13 11:31:57 -0700 Add another welcome message -------------------------------------------------------------------------------- 385bb11a5b | Nicholas Feinberg | 2022-07-12 17:15:33 -0700 Add studio walls (Sastreii) For later use in vaults. -------------------------------------------------------------------------------- 174bc33265 | patrick | 2022-07-12 16:25:51 -0400 Fix errors in some recently-added variable-altar temples I had somehow missed that get_altar_counts returns a string, not a number. I have fixed the erroneous temples. -------------------------------------------------------------------------------- 139bfe3b0c | Nicholas Feinberg | 2022-07-12 12:37:01 -0700 Fix beams stopping at target (dilly) Only stop when you'd hit an ally, not when you'd hit an enemy, ha. -------------------------------------------------------------------------------- a65acad94f | David Damerell | 2022-07-12 18:35:05 +0100 Change acquirement's description to match new acquirement Another highly important change for ebering. :-) -------------------------------------------------------------------------------- 1e95ca9f62 | gammafunk | 2022-07-11 23:37:41 -0500 fix: Airstrike damage for monster This no longer has a minimum base damage, but the relevant code wasn't fully updated. -------------------------------------------------------------------------------- 34b5299d54 | Nicholas Feinberg | 2022-07-11 19:02:01 -0700 Add reflect icon for monsters (Sastreii, acrobat) To make it a little more obvious when your iron shot is about to come back hilariously toward you. -------------------------------------------------------------------------------- 72eb547380 | Nicholas Feinberg | 2022-07-11 18:51:26 -0700 Add a skeleton for new Lerny tiles (Sastreii) Skeletal Lernaean hydra tiles. -------------------------------------------------------------------------------- 412af75db4 | Nicholas Feinberg | 2022-07-11 18:27:59 -0700 Make phantoms avoid teleport closets (leNuup) -------------------------------------------------------------------------------- cb1280458a | Edgar A. Bering IV | 2022-07-10 23:58:36 -0500 vaults: give thematic (and good) loot to bailey warlords Warlords get a one chance in three to get a good_item weapon, but an orc warlord with a good_item greatsword looks out of place in an axe baily, so let's outfit them particularly and force the good_item since the warlords are quite early. -------------------------------------------------------------------------------- bc3a993a49 | hellmonk | 2022-07-10 20:02:53 -0400 feat: Minor artifact price adjustments -------------------------------------------------------------------------------- 9d1704292e | hellmonk | 2022-07-10 19:51:58 -0400 feat: Rework scroll prices. Bring these more into line with rarity/utility. -------------------------------------------------------------------------------- a07a83588e | hellmonk | 2022-07-10 19:36:33 -0400 feat: Rework wand shop prices Scale cost linearly with charges and rearrange the hex effects. -------------------------------------------------------------------------------- 80bc156356 | hellmonk | 2022-07-10 18:47:58 -0400 Reduce irradiate max damage -------------------------------------------------------------------------------- 72347fce65 | Nicholas Feinberg | 2022-07-10 13:42:02 -0700 Auto-stop-at-target when firing toward allies Instead of prompting ("really shoot toward your goblin?"), use '.' targeting mode automatically if your shot might otherwise miss an enemy and hit an ally. TODO: find remaining cases that this needs to apply to, then remove the overshoot_prompt boolean. -------------------------------------------------------------------------------- d827844252 | Nicholas Feinberg | 2022-07-08 11:19:01 -0700 Fix: Allow zapping /roots through ancestors (acrobat) -------------------------------------------------------------------------------- c37b1572da | patrick | 2022-07-07 20:37:50 -0400 Remove scythes from ghost vaults with Xom altars (ebird) Looks like the removal of scythes missed one. Rather than replacing them with reskinned halberds, just remove them from the list. -------------------------------------------------------------------------------- a620ab95ad | Kate | 2022-07-07 18:56:23 +0100 Fix the mountain boots showing messages on all beams (#2599) Closes #2599. -------------------------------------------------------------------------------- 66395355a5 | Nicholas Feinberg | 2022-07-06 16:45:08 -0700 Hackily 'fix' a vp webtiles mut menu bug (rhaal) -------------------------------------------------------------------------------- 1caec59328 | Nicholas Feinberg | 2022-07-06 16:41:20 -0700 Don't randomize displayed aux damage (acrobat) Display the max damage for all auxes, including demonic touch. -------------------------------------------------------------------------------- 94b489e0ae | Nicholas Feinberg | 2022-07-05 07:54:28 -0700 Simplify hex miscasts (acrobat) Hasting foes is a little too vicious, and also adds extra complexity in terms of preventing the player from instantly excommunicating themself by using Spellbinder with Cheibriados. -------------------------------------------------------------------------------- 2d5a0d7a41 | Nicholas Feinberg | 2022-07-05 07:39:38 -0700 Don't call bad miscasts 'potentially lethal' (riverfiend) That's not limited to top-tier miscasts (the severity is based on your MHP, not current HP, so lower colored miscasts can also be lethal), and it's not accurate for eg hex miscasts (which can't directly damage you). -------------------------------------------------------------------------------- 9904bce7a6 | Nicholas Feinberg | 2022-07-04 22:50:25 -0700 Replace hex miscast effect (riverfiend) Wiping player effects didn't make much sense for modern hexes (since the school has fairly few durations that would be affected by cancellation), and was quite abusable. Replace it by hasting nearby enemies. -------------------------------------------------------------------------------- 82769f0e0c | Nicholas Feinberg | 2022-07-04 14:03:47 -0700 New lochaber axe tile (Sastreii) -------------------------------------------------------------------------------- 41c3e4b865 | Edgar A. Bering IV | 2022-07-04 10:42:22 -0500 docs: update CREDITS.txt -------------------------------------------------------------------------------- 0d988dd55d | advil | 2022-07-04 10:44:28 -0400 fix: remove a double exponentiation in a lua call Seems to be just a misunderstanding in how bitfield iteration works. I have also added a compile check for this bitfield's range value, which had gotten out of sync. -------------------------------------------------------------------------------- 4a14ea37d6 | Nicholas Feinberg | 2022-07-03 22:22:39 -0700 No attacks of opportunity for constricted foes (acrobat) Since they can't follow. -------------------------------------------------------------------------------- 49d5403b4a | advil | 2022-07-03 22:16:27 -0400 fix: add a missing nullptr check in a lua call -------------------------------------------------------------------------------- 8c06add4a9 | Nicholas Feinberg | 2022-07-03 18:30:04 -0700 Don't stop /roots tracers at invisible foes (dilly) Oops! -------------------------------------------------------------------------------- 3812dd5c9c | hellmonk3 | 2022-07-03 14:34:17 -0500 feat: silent ossuary map All but the outer edge of the map is silenced. Typical ossuary monster set. -------------------------------------------------------------------------------- df645b4c5c | Rytis Petronis | 2022-07-03 14:21:06 -0500 feat: option for adjusting explore_greedy non-autopickup item visits explore_greedy_visit is added as an rc file option to adjust explore_greedy behavior. By default greedy explore travels to piles of items on each square in addition to items that are eligible for autopickup. This setting allows to also/only go to enchanted items or artefacts instead by providing a list option explore_greedy_visit, supporting - stacks: makes explore_greedy visit stacks even if they don't necessarily have target auto pickup items - glowing_items: makes explore_greedy visit glowing_items, even if not in a stack - artefacts: makes explore_greedy visit artefacts, even if not in a stack The default is updated to `explore_greedy_visit = glowing_items,artefacts`, as stack-visiting is a behavior more for console UI smoothness and accessibility than any gameplay reasons; visiting glowing_items and artefacts should allow the default player to loot efficiently (finding goodies). -------------------------------------------------------------------------------- a2102b4d9d | patrick | 2022-07-03 12:50:04 -0400 Add a randbook.txt entry (hellmonk) -------------------------------------------------------------------------------- 426022cc84 | patrick | 2022-07-03 12:20:13 -0400 Add some more options to randbook.txt Add some more options for naming random-generated spellbooks. I kept all of the existing options, except for (most of) the nouns and adjectives for Air Magic that were about flight, since that spell is no longer part of the school. -------------------------------------------------------------------------------- eadc89832f | damerell | 2022-07-03 10:22:26 -0500 fix: correctly produce strings of the form "one hundred and one" In Australian English there is an "and" after "hundred" in numbers of this kind. (Source: I asked all the Aussies I know.) -------------------------------------------------------------------------------- 5b9a7de867 | patrick | 2022-07-03 09:43:12 -0500 vaults: add several new temples, add section for tiny temples Adds several new temples, including several variable-size temples, an edit of my old great_sept temple so it has a chance to place 7 altars again, a temple where demons yell at you, and a temple featuring Lugonu's victory over the temple gods. [ Committer's note: removed a use of permarock, tweaked some colours. ] -------------------------------------------------------------------------------- b127be5c9c | Kate | 2022-07-03 15:12:42 +0100 Cancel constriction enchantments on Duel (acrobat) The actual constriction damage/effect was already cancelled by the duel, but the roots/zombie hands enchantments weren't ended so were still displaying visually on monsters. -------------------------------------------------------------------------------- d130422d61 | Nicholas Feinberg | 2022-07-03 07:00:03 -0700 Fix a refactoring oversight (Aliscans) -------------------------------------------------------------------------------- 34511f41fd | Nicholas Feinberg | 2022-07-02 20:58:20 -0700 Remove the prompt for firing at unhittable enemies This drives me absolutely nuts, and has for years. There's no point in this prompt! Just don't fire. -------------------------------------------------------------------------------- 13870d9ccb | Nicholas Feinberg | 2022-07-02 20:42:21 -0700 Don't allow distortion blinking during aoops This has a reasonable chance of crashing the game, I think. It certainly spooks me out. -------------------------------------------------------------------------------- 163208c30e | Nicholas Feinberg | 2022-07-02 20:40:45 -0700 Rename Necrotize -> Necrotise (|amethyst) Follow Australian English. -------------------------------------------------------------------------------- d32efaa14b | Nicholas Feinberg | 2022-07-02 20:34:07 -0700 Rename: bouda -> gnoll bouda To clarify to players what species it is, since that's relevant to its function and otherwise not obvious from the name. -------------------------------------------------------------------------------- 471e52b980 | Nicholas Feinberg | 2022-07-02 20:25:33 -0700 Allow friendly torpor snails to slow foes Way back in 2014, when I first added torpor snails, I prevented friendly torpor snails from slowing enemies. In 18cebf10d87e656198, I wrote: Disables the aura entirely, since it'd be hilariously abusable otherwise. (As long as the Enslave spell remains in the game...) Enslave has been gone for a long time, as is Shadow Creatures, and /charm charges are quite limited. Let's simplify, and let players have fun. Also double torpor snail Will (40 -> 80), just to make sure there's not *too* much fun being had. -------------------------------------------------------------------------------- 8cd43ee5b5 | Nicholas Feinberg | 2022-07-02 20:20:47 -0700 New statuesque beauties (Sastreii) New statue form tiles for all species. -------------------------------------------------------------------------------- 7df905bfc2 | Nicholas Feinberg | 2022-07-02 20:15:28 -0700 Re-add ranged to-hit % display -------------------------------------------------------------------------------- 4cfcd3498a | Nicholas Feinberg | 2022-07-02 20:12:14 -0700 Unify melee & ranged combat noise For consistency, make both melee & ranged attacks make noise proportionate to the damage done at the defender's location. -------------------------------------------------------------------------------- 1c776c33a3 | Nicholas Feinberg | 2022-07-02 19:56:25 -0700 Remove unused should_alert_defender var Unused since the removal of darts of sleeping (9adfa933843a, 2019). -------------------------------------------------------------------------------- 800ede72b0 | Nicholas Feinberg | 2022-07-02 13:03:44 -0700 Simplify ranged weapon noise There's no particular need for different ranged weapons to make different amounts of noise. -------------------------------------------------------------------------------- 90d98aa4a7 | Nicholas Feinberg | 2022-07-02 12:57:55 -0700 Readjust Spriggan ranged apt (acrobat) Going from +2 slings to +2 ranged weapons was expected to be a buff, but in practice it was a bit much. Spriggans are already quite good at ranged weapons without a positive aptitude, by virtue of their high dexterity and fast movement speed - let's move them down to +0 for now. -------------------------------------------------------------------------------- a0f254aafb | Nicholas Feinberg | 2022-07-02 12:57:35 -0700 Don't let roots go through enemies and walls Oops! -------------------------------------------------------------------------------- 14d1036c72 | Nicholas Feinberg | 2022-07-02 12:57:35 -0700 Make monsters not zap roots at constricted players Waste of charges. -------------------------------------------------------------------------------- 7a8fcbc185 | Neil Moore | 2022-07-02 01:26:09 -0400 Add a quote for shambling mangroves, thanks to Prof Neil Peart. -------------------------------------------------------------------------------- 40bbea3e73 | Nicholas Feinberg | 2022-07-01 19:36:50 -0700 Clarify fencer's gloves' effect (4L2A) -------------------------------------------------------------------------------- 9e05a5b3ab | Nicholas Feinberg | 2022-07-01 19:36:50 -0700 Fix a roots vs player crash (HendSelp) -------------------------------------------------------------------------------- 37b1a91500 | gammafunk | 2022-07-01 17:53:59 -0500 fix: Update a clua monster info function When the `holiness()` monster info method is called with no arguments, it's supposed return the holiness as a string, but the implementation was incorrect, so fix this. -------------------------------------------------------------------------------- e5ab06ae1c | Nicholas Feinberg | 2022-07-01 15:10:04 -0700 Set up wand of roots damage For players, the goal is for the base damage to be about 1/3rd of an iceblast use - 2d4 at 0 evo (compared to iceblast's 3d7) and 2d14 at 27 evo (compared to iceblast's 3d27). Roots does multiple turns of damage (increasing over time) & also has bonus utility (doesn't hit allies, doesn't check rC, wastes monster turns), so this seems reasonable as a starting point. For monsters, this matches Jorgrun's Grasping Roots spell. Ijyb will deal about 2d4 with it (I believe!), and other monsters will scale. -------------------------------------------------------------------------------- 5507e99a2f | Nicholas Feinberg | 2022-07-01 15:10:04 -0700 Refactor constriction Try to more clearly split up different ways to be constricted. -------------------------------------------------------------------------------- a4b73df947 | Nicholas Feinberg | 2022-07-01 15:10:04 -0700 Alternate wand of roots with wand of iceblast -------------------------------------------------------------------------------- ddcf899e2d | Nicholas Feinberg | 2022-07-01 15:10:04 -0700 New item: wand of roots Continuing the theme of alt items, wands of roots are a new item that will alternate with /iceblast. They fire a 3x3 (fireball-sized) effect which constricts its victims (ala BVC), with a duration that scales with wand power. -------------------------------------------------------------------------------- b44b3c5ca4 | Nicholas Feinberg | 2022-07-01 15:10:04 -0700 Refactor Grasping Roots -------------------------------------------------------------------------------- 652cadfb38 | Aliscans | 2022-07-01 15:31:57 -0500 feat: only list gods you can ever worship in the dungeon overview & dump Different gods forbid worship from different species. This change gives a way for the player to check which gods are available, and hides irrelevant information about whether an unusable altar has been found. Co-authored-by: Aliscans -------------------------------------------------------------------------------- 7e300f6e71 | Perry Fraser | 2022-07-01 15:25:30 -0500 refactor: wearing/removing armour This refactors a good bit of the logic for taking off armour, as well as a few other things in the inventory wear/unwear section. I also removed a few TODOs, clarified the semantics of the return values of the wear/unwear armour functions (they are not used anywhere anyway [ Committer's note: they are used in clua to indicate success, but the inverted return values changed by this commit were not correct ]), and added a few doc comments for some of the less intuitive functions. [ Committer's note: Closes #2340. Rebased and fixed up, restored overzealously removed inscription checking prompts. ] -------------------------------------------------------------------------------- 8ec7be85a6 | Perry Fraser | 2022-07-01 14:45:37 -0500 fix: prompt once on tiles for wearing risky items On Tiles, you would be prompted twice if you wanted to wear an item that was potentially dangerous (e.g., {Contam}). This removes the redundant check_warning_inscriptions that were happening when handling these clicks. -------------------------------------------------------------------------------- 24d99152b8 | Edgar A. Bering IV | 2022-07-01 11:31:03 -0500 feat: warn when an orb of energy backfire was guaranteed (Cebolla) Closes #2449 -------------------------------------------------------------------------------- bb76e39405 | Edgar A. Bering IV | 2022-07-01 09:22:23 -0500 fix: don't print wereblood messages silenced -------------------------------------------------------------------------------- 4d7333d4e2 | ruxi | 2022-06-30 22:35:56 -0500 feat: describe storm form's insubstantialness Closes #2509 -------------------------------------------------------------------------------- 250d9ad825 | RojjaCebolla | 2022-06-30 22:12:23 -0500 feat: set hp_colour to higher defaults This might subtly hint to newer players that things have gone awry sooner. -------------------------------------------------------------------------------- 7e9ac4eb86 | Reono | 2022-06-30 22:03:45 -0500 vaults: new vaults by reono Closes #2516 -------------------------------------------------------------------------------- a24da20820 | Nicholas Feinberg | 2022-06-30 15:08:20 -0700 Break out extra throwing base damage separately Try to make throwing damage rates clearer. -------------------------------------------------------------------------------- 4d60fd9eac | Nicholas Feinberg | 2022-06-30 15:08:20 -0700 Unhide Damnation's damage rating (CarefulOdds) I'd forgotten that Damnation did normal arbalest damage in addition to the Damnation burst. -------------------------------------------------------------------------------- 2e8140cf71 | Kate | 2022-06-30 22:47:27 +0100 Fix spelling -------------------------------------------------------------------------------- 18b9c4ed99 | Kate | 2022-06-30 22:47:27 +0100 Interrupt delays on paralysis/petrification/sleep Sleep already interrupted some delays, but not all. Make all three of paralysis, petrification and sleep consistently interrupt delays, including stair travel, and don't allow resuming delays such as equipping/unequipping armour when interrupted by one of these effects. -------------------------------------------------------------------------------- e8933c00c5 | Kate | 2022-06-30 22:47:27 +0100 Update Spriggan's Knife description -------------------------------------------------------------------------------- 967b614d45 | Kate | 2022-06-30 22:47:27 +0100 Remove some unused stab messaging These stab messages haven't been able to be used since 9c76b8a688. The stab strengths here should probably also be enum-ified instead of being magic numbers. -------------------------------------------------------------------------------- a993524b14 | Kate | 2022-06-30 22:47:27 +0100 Fix tag_upgrade compilation Remove HINT_SEEN_RANDART yet again, and remove an unused function. -------------------------------------------------------------------------------- dd995151d0 | Nicholas Feinberg | 2022-06-30 14:21:14 -0700 Fix minor hints mode issues -------------------------------------------------------------------------------- 1c741a5a2c | Brian Power | 2022-06-30 16:05:59 -0500 refactor: externalise hints text Move hints text to the database, with some lua support. Closes #2271 -------------------------------------------------------------------------------- e2a13e336d | U-DESKTOP-2MKRQ21\rosst | 2022-06-30 13:51:37 -0500 text: speech, death, and banishment lines for some uniques Erolcha gets a banishment line, as a notable early banisher. Louise gets a banishment line, for the Lore. New speech lines for Grum, Kirke, Lodul, Margery, Sojobo and Snorg. Polyphemus gets a rare death message, also for the Lore. [ Closes #2481 ] -------------------------------------------------------------------------------- 3f25a06b81 | Edgar A. Bering IV | 2022-06-30 11:41:19 -0500 feat: make monster airstrike damage match player's, display -------------------------------------------------------------------------------- 4c3e83d15c | hellmonk | 2022-06-30 11:19:58 -0500 feat: Display airstrike and discharge damage -------------------------------------------------------------------------------- d72e128878 | hellmonk | 2022-06-30 11:19:36 -0500 feat: Rework the static discharge formulas Primarily so that damage can be displayed in future. Don't rely on division by power to recur, just caclulate the number of arcs to do upfront and do them at full power. Additionally, random round all of the formulas to avoid messy power breakpoints. New numbers give mostly similar damage at low power, I think. At high power with a lot of targets things can get a bit wilder. If it's a problem, can cap power at 50 instead of 100. -------------------------------------------------------------------------------- b575a813fa | Edgar A. Bering IV | 2022-06-30 10:39:00 -0500 feat: rework and rename gnoll shaman -> bouda (nikheizen) Gnoll shamans are somewhat lackluster as an enemy. They fit the "support priest" archetype pretty well, but unfortunately this not as effective early on as its Deep Troll counterpart in Depths/Vaults. Early game has shorter fights and monsters have to get to business more quickly as every turn matters. This commit reworks them into "Bouda," and also creates a monster type who can more easily bridge the gap between early dungeon Orc Wizards and the more powerful spellcasters who can show up later on. This is accomplished by giving them support spells that work more rapidly: a new "Hunting Call" is like battlecry, but applies swiftness in favor of might (helping a gnoll pack swarm better without being too strong of a buff early), and Weakening Gaze, fitting the Evil Eye flavour. As an instant gaze attack, Weakening Gaze does a better job of debuffing the player in a noticable way than Corona, particularly in the quicker fights of the early game. Bouda are characters from Northeast African folklore who are shapeshifters that turn into jackals. They have the power of the Evil Eye which curses others with spectacular misfortune. The term is historically one of exclusion-othering someone by calling them Bouda is analogous to the European tradition of naming folks as witches. In crawl they have all the malevolent energy of their mythological basis, but here it is directed towards the player-the dungeon's one true outgroup. Closes #1969. Based on that PR -------------------------------------------------------------------------------- 477250c084 | advil | 2022-06-30 09:13:41 -0400 fix: improve wording in weapon descriptions I just wanted to fix this wording, but I found a whole bunch of other issues here that could be better and I don't have time to fix right now. (Most misleading is that this item desc code ignores shield delay.) -------------------------------------------------------------------------------- 358383bc75 | amcnicky | 2022-06-29 22:27:01 -0500 tiles: hood of the Assassin hood of the Assassin - made sharper, more like a hood, and shifted colour palette towards red. Finishes half of #1387 Closes #1569 -------------------------------------------------------------------------------- 20e0cd1ebb | RojjaCebolla | 2022-06-29 18:06:32 -0500 vaults: a few maps featuring starflowers An abyssal rune vault and four exit vaults. [ Committer's note: Closes #2466. Squashed and rebased. Tweaked monster stats a bit more. Adjusted harpoon shot AI logic. Updated the rune vault for runelight usage. ] -------------------------------------------------------------------------------- 122d04a4e0 | RojjaCebolla | 2022-06-29 18:06:32 -0500 feat: new monser "Starflower", an abyssal oklob A stationary plant/tentacle hybrid monster with harpoon shot, reach 3 distortion melee, reach 2 melee, and an additional melee attack. Meant as a vault-placed monster for abyssal vaults, guarding an exit or a rune or what have you, as a threat that's dangerous to be close to, but can be neutralized if the harpoon shot can be blocked or avoided somehow. -------------------------------------------------------------------------------- a47bfe3f80 | Edgar A. Bering IV | 2022-06-29 17:32:43 -0500 feat: don't fire harpoon shots if a melee attack is possible Affects Harold, who now won't try to pull you back unless you're out of pole arm range. Also affects the monster added in the next commit. -------------------------------------------------------------------------------- b7bb9d756e | patrick | 2022-06-29 16:31:50 -0500 vaults: some abstract decor vaults to float.des Some more abstract vaults based on geometric designs, except these ones are big so they go in float.des. [ Closes #2559 ] -------------------------------------------------------------------------------- ff91a8ed75 | patrick | 2022-06-29 16:31:50 -0500 vaults: two new theme shops Features a shop that sells big spellbooks and one which is much smaller and sillier. -------------------------------------------------------------------------------- 26dd769911 | patrick | 2022-06-29 16:31:50 -0500 vaults: a simple generic overflow altar Just a simple altar. Some water, some lava, some altars. -------------------------------------------------------------------------------- 8e6dc78163 | patrick | 2022-06-29 16:31:50 -0500 vaults: various designs for mini_features.des Add some decor vaults based on geometric patterns and designs. -------------------------------------------------------------------------------- 0912897232 | Edgar A. Bering IV | 2022-06-29 15:48:11 -0500 fix: remove a debug weight (hellmonk) -------------------------------------------------------------------------------- 184eed5aab | Edgar A. Bering IV | 2022-06-29 15:36:47 -0500 feat: rare low-altar count temples The (higher-weight) cousins of the Temple with every god. One is a small, colourful, crystalline grotto with exactly one altar. The other is an abandoned empty temple with no altars at all! -------------------------------------------------------------------------------- 1659c76842 | Edgar A. Bering IV | 2022-06-29 14:07:19 -0500 feat: enable small Temples With the addition of small Temple maps, lower the minimum Temple size to 6. The distribution used has a picewise linear probability density function, starting with a 2.5% chance of a temple of size 6, rising to its maximum at size 13.5, (roughly 10% each for sizes 13 and 14) and then decreasing to a 2.5% chance of a temple of size 21. This is a bit more verbose than using 6 + random2avg(16,2), but the latter makes the extremes too small. A distribution that falls off harder in the direction of larger temples might be interesting but it's a somewhat tricky balancing act. -------------------------------------------------------------------------------- 1f4f75ee32 | Edgar A. Bering IV | 2022-06-29 14:05:40 -0500 feat: add random2min and random2max For when distributions with various polynomial pdfs are desired. -------------------------------------------------------------------------------- d6dbc1d939 | hellmonk3 | 2022-06-29 12:07:58 -0500 feat: nine new temples - hellmonk_temple_micro_hex 6-8-10 altars -hellmonk_temple_forest_ring 8-9-12-13 altars - hellmonk_temple_of_storms 7, 8, 11, 15, or 19 altars. - hellmonk_temple_divided_pantheon Places any odd number of altars from 7 to 19. - hellmonk_choose_your_character Rare temple with every god. - hellmonk_temple_rainy 6, 8, 9, or 10 gods. - hellmonk_temple_flakie 6, 8, 10, or 12 gods. - hellmonk_temple_beads 6-10 gods. - hellmonk_temple_two_chambers 6-8, 12, or 15 gods. Co-authored-by: hellmonk Co-authored-by: Edgar A. Bering IV -------------------------------------------------------------------------------- 221c65d467 | Perry Fraser | 2022-06-29 11:02:28 -0500 fix: correct desc. grammar for CANT_SEE_YOU status -------------------------------------------------------------------------------- da9226009b | Alex Jurkiewicz | 2022-06-29 10:39:55 -0500 refactor: tag out some Pakellas-specific code Closes #2475 -------------------------------------------------------------------------------- fe44c63f7f | Alex Jurkiewicz | 2022-06-29 10:36:26 -0500 refactor: simplify player mp/hp-on-kill implementation Split a large conditional into smaller blocks for clarity. Also, further isolate Pakellas logic so it can be more easily removed when TAG_MAJOR_VERSION increases to 35. [ Closes #2475 ] -------------------------------------------------------------------------------- e5bf7c5c39 | RojjaCebolla | 2022-06-29 10:16:37 -0500 feat: reduce the +stab effect on Spriggan's Knife by 50% Most monsters die in a single hit from the Spriggan's Knife; those that survive take massive damage and can be quickly dispatched with a couple more stabs. Stabs that result from netted/webbed/petrifying/invisible/confused often leave the target open for further stabbing, as the condition still applies. This is especially overpowered with irresistible status effects such as that from Line Pass. To make this less of a guaranteed instakill, add a coinflip(). It may take a few tries before the target dies. -------------------------------------------------------------------------------- 7d34257905 | 4Hooves2Appendages | 2022-06-29 09:59:06 -0500 text: quotes for charm and Mephetic cloud Plus some quotation mark fixes. -------------------------------------------------------------------------------- 85b6c24e30 | spicyCebolla | 2022-06-29 09:49:01 -0500 vaults: arrival vaults by SpicyCebolla - spicycebolla_arrival_risky_transporter This teaches that using a transporter can be risky: the 'porter takes you from pretty safe terrain to a wide open space. [ Committer's note: simplified the substitutions, cleaned up, added sightlines. ] - spicycebolla_arrival_clurvy a few simple 20% chances of theme variations, giving different iterations on a forgotten stand of trees (possibly long forgotten) [ Committer's note: adjusted tree colouration, prevented a small chance of a teleport closet ] - spicycebolla_green_bress_n_ham - spicycebolla_green_bress_n_ham_2 Simple arrivals. - spicycebolla_arrival_ecumenical Places a faded altar with stairs (or a very lucky teleport) required to reach it. [ Committer's note: This slightly increases the 87.5% chance of a D:1-3 faded altar, but not so much that it matters. Closes #2492 ] -------------------------------------------------------------------------------- 91da1267ba | spicyCebolla | 2022-06-29 09:08:56 -0500 fix: entry vault missing some blood relevant to #704 -------------------------------------------------------------------------------- cd6ae0ea07 | Edgar A. Bering IV | 2022-06-29 08:43:01 -0500 fix: scary damage fraction at tier 2 (Sentei) -------------------------------------------------------------------------------- 9e4779279f | Edgar A. Bering IV | 2022-06-29 07:39:57 -0500 vaults: tweak two arrival vaults -------------------------------------------------------------------------------- dc9d147ae0 | Edgar A. Bering IV | 2022-06-29 07:33:42 -0500 text: sling changes in zh/items.txt -------------------------------------------------------------------------------- 8f12646833 | Edgar A. Bering IV | 2022-06-29 07:32:55 -0500 lint: checkwhite -------------------------------------------------------------------------------- 4208692735 | 张凯 | 2022-06-29 07:24:08 -0500 text: update zh/items.txt Updated translations. -------------------------------------------------------------------------------- 3d7fbe0af2 | nicolae-carpathia | 2022-06-28 23:44:41 -0500 vaults: add several small vaults containing transporters to mini_features.des Add several small vaults which use transporters in ways besides just setting off an optional murder zone. Some, with "diode" in their names, allow the player to only move in one direction down one or more hallways. The others just make weird intersections. -------------------------------------------------------------------------------- a39a8af6d9 | Nicholas Feinberg | 2022-06-28 21:39:11 -0700 Adjust arbalest and hand crossbow (acrobat) Make arbalest a bit weaker earlier on, and make hand crossbow more competitive as a 'high-tier' one-hander. See this graphic: https://media.discordapp.net/attachments/205316046230388737/991216806184366130/r ange.PNG -------------------------------------------------------------------------------- 5686a2c4f1 | Edgar A. Bering IV | 2022-06-28 22:19:44 -0500 text: some quotes citation editing -------------------------------------------------------------------------------- 836e7b5932 | Edgar A. Bering IV | 2022-06-28 21:42:35 -0500 text: a new Orb adjective and welcome message (Rosstin) Closes #2485 -------------------------------------------------------------------------------- 6bb282b620 | Nicholas Feinberg | 2022-06-28 12:33:36 -0700 Simplify jewellery price code Make stat ring prices match AC/EV ring prices - they don't seem substantially better or worse. -------------------------------------------------------------------------------- 89c9ce7d72 | Nicholas Feinberg | 2022-06-28 12:32:14 -0700 Remove an unused var -------------------------------------------------------------------------------- 50f2ce223d | Nicholas Feinberg | 2022-06-28 12:00:49 -0700 Don't let large players flounder in toxic bogs The DNGN_SHALLOW_WATER check here was redundant, and only affected bogs. -------------------------------------------------------------------------------- a706738f4e | advil | 2022-06-28 12:37:20 -0400 fix: update some throw/launch code These are a couple of places that relied on get_item() being always ammo, from the original newquiver implementation. This was still approximately true for throwing/launching, until ce39da1c22d. However, ce39da1c22d is supposed to be the correct way to set a tile, etc. This commit makes ce39da1c22d work correctly, so I have reverted 0fc3c4380c. -------------------------------------------------------------------------------- 0fc3c4380c | Nicholas Feinberg | 2022-06-28 06:52:31 -0700 Revert "Fix quivered launcher tile" This reverts commit ce39da1c22d85fa8819e7db12783cbae1a8eb494. -------------------------------------------------------------------------------- ce39da1c22 | Nicholas Feinberg | 2022-06-27 22:27:28 -0700 Fix quivered launcher tile Farewell, mysterious ❌. -------------------------------------------------------------------------------- 64f5989226 | advil | 2022-06-27 10:27:08 -0700 fix: don't use levelgen checks for TRJ splitting (particleface) The TRJ splitting code doesn't use normal summon placement code (which would typically be `find_habitable_spot_near`), but rather repurposes some levelgen placement code, that has the right adjacenty check for TRJ. However, because this code is otherwise used only in levelgen, it enforced an `MMT_NO_MONS` mask check. A result is that if you can manage to fight TRJ in the loot vaults, it won't split. This commit simply conditionalizes the levelgen check, so that the placement-finding code can be used either way. On a quick glance, this should bring it in line with regular summon placement; there isn't an explicit los check but I expect that's approximated by the floodfill. -------------------------------------------------------------------------------- 7f417c9bbb | Nicholas Feinberg | 2022-06-26 18:22:17 -0700 Turn fustibaluses into hand crossbows Fixes a crash when trying to fire fustibali. Easier than retaining support for them. This will result in some funny randart names, since those will include the old name of the weapon. Not bothering with a minor tag. -------------------------------------------------------------------------------- ac13c76575 | gammafunk | 2022-06-26 18:29:46 -0500 feat: New runed door tiles from Sastreii The old tiles used a light blue color for the runes that didn't contrast well with the blues used for clear doors. This set of tiles uses an orange color for runes that has better contrast. -------------------------------------------------------------------------------- 0fec994a2d | advil | 2022-06-26 13:15:32 -0700 fix: remove an unnecessary `fixup_skills` call This fixup is uniformly called on characters after they've loaded at the end of _post_init, and it's much safer to call it after loading anyways. So, remove the early call for the ranged merger fixup -- the _post_init call does accomplishes the same thing. -------------------------------------------------------------------------------- 365da2f8ac | Nicholas Feinberg | 2022-06-26 12:32:08 -0700 Fixup a gnoll save compat crash? Boy, this code is scary. -------------------------------------------------------------------------------- 6dac4ea423 | Nicholas Feinberg | 2022-06-25 22:41:36 -0700 Don't give old gnolls huge Ranged Weapons skill (CarefulOdds) oops -------------------------------------------------------------------------------- f28ee254f9 | Kate | 2022-06-25 21:48:00 +0100 Scale potion of attraction effect with time taken Fixes fast actions resulting in monsters being pulled more effectively with a potion of attraction active. -------------------------------------------------------------------------------- 7753eeab26 | Kate | 2022-06-25 21:48:00 +0100 Compress some bad mutations to 2 levels As with the other similar chance-based bad mutations (shoutitis and deterioration, and now also -Scroll and -Potion), reduce teleportitis and berserkitis to 2 levels, with the first level being equivalent to somewhere between the old levels 1 and 2, and the second level equivalent to the old level 3. -------------------------------------------------------------------------------- 769091470e | Nicholas Feinberg | 2022-06-25 13:24:45 -0700 Save ranged quiver actions Closes #2506. -------------------------------------------------------------------------------- 55bc7a5df9 | Nicholas Feinberg | 2022-06-25 12:34:16 -0700 Nerf walking crystal tomes HD 20 -> 15, crystal spear damage 3d40 -> 3d34. XP unchanged. -------------------------------------------------------------------------------- 7b5732409f | Nicholas Feinberg | 2022-06-25 12:17:12 -0700 Remove fustibaluses Fustibaluses were originally created as an upgrade for players using the Slings weapon skill. Now that all ranged weapons use one skill, players can easily upgrade from slings into bows or crossbows. There's nothing particularly resonant about fustibaluses thematically, and they don't fill any gap in the loot game not filled by other items, so there's no need to keep 'em around. If we want more ranged weapon types, it'd make more sense to add more exciting weapon types like the cho-ko-nu, composite bow or woomera. -------------------------------------------------------------------------------- e572f60725 | Nicholas Feinberg | 2022-06-25 12:15:51 -0700 Readjust ranged weapons' stats and distribution Shortbows and slings are more common. Longbows are now rarer and more common later. Hand crossbows tend to show up in Vaults, as an eveningstar-ish upgraded one-hander. Arbalests are shifted around. Triple crossbows are unchanged. -------------------------------------------------------------------------------- ef730cc156 | Nicholas Feinberg | 2022-06-25 12:15:50 -0700 Don't give hand crossbows out to kobolds They're being positioned as a later-game weapon. -------------------------------------------------------------------------------- 941941d4ec | Nicholas Feinberg | 2022-06-25 12:15:50 -0700 Make Punk a custom weapon type In preparation for fustibalus removal. -------------------------------------------------------------------------------- 1416de1b61 | Nicholas Feinberg | 2022-06-25 12:11:09 -0700 Remove hunting from slings I renamed 'slings' to 'hunting slings' in b938532f5e to avoid confusion with the name of the skill. Now that Slings skill is no more, we can go back to the shorter and punchier name. -------------------------------------------------------------------------------- 33dec36d26 | Nicholas Feinberg | 2022-06-25 12:11:09 -0700 Tweak titles Most of the old Bows titles work fine for Ranged Weapons, but 'Archer' isn't quite right for many weapons. Trade it out for Fighting's 'Skirmisher' title, and replace that one with 'Trooper'. -------------------------------------------------------------------------------- 586177b653 | Nicholas Feinberg | 2022-06-25 12:11:09 -0700 Merge ranged skills (ebering) DCSS's ranged weapon types aren't very well differentiated. Slings, bows, and crossbow games all tend to play very similarly - much moreso than different magic schools, and still more than different melee weapon types, like polearms and axes. We've spent quite a long time trying to differentiate the ranged weapons further. The main differences at present are fairly arbitrary differences in stats - damage, accuracy, speed, brands, generation frequency, handedness... there's quite a lot of them, but they don't add up to much interesting. Historically, ammo frequency was another difference along those lines - it had more impact, but (by encouraging fiddly weapon swapping) that impact was mostly negative. There are also quite few ranged weapons per skill. We have about half a dozen weapons for each melee weapon type, but there are only two or three per ranged weapon skill. (And that's after the last rework that added three more!) So, let's merge em. As one consolidated type, Ranged Weapons will have a better chance at earning their place in Crawl. Very few species had different apts for different ranged weapon types. most of those have been given their best apt for the new skill, or something reasonably close to it. The skill screen has been reorganized, which will be quite disorienting for some, but I think it does a better job of showing that 'Throwing' is quite a different type of skill from the Ranged Weapon skill. Other names I considered for the skill: - Launchers/Launching (unpleasant) - Missiles (futuristic) - Bows & Slings (what about xbows?) - Slings & Arrows (cute, but likewise) Ranged Weapons has history - Throwing used to be called this, long, long ago - so that gets some bonus callback points. A subsequent commit will adjust weapon stats and frequency. -------------------------------------------------------------------------------- 7c5339f103 | Nicholas Feinberg | 2022-06-25 12:11:09 -0700 Remove weapon choice for Hu/AM In preparation for merging ranged weapon skills. -------------------------------------------------------------------------------- a8f87797a9 | Nicholas Feinberg | 2022-06-25 12:07:39 -0700 Unify Xom reach cleave with lochaber axe Simplify the code by making all polearms work the same way under Xom's Cleave status as the Lochaber Axe does normally. -------------------------------------------------------------------------------- bdae368155 | Nicholas Feinberg | 2022-06-25 11:53:34 -0700 Two cool new tiles (Sastreii) Slime simulacrae and lochaber axe. -------------------------------------------------------------------------------- 60cadc97f0 | Goratrix | 2022-06-25 07:43:47 -0700 Stat mutation description adjustment Add spaces between the stat names and the numbers (to be consistent with all the other similar mutation descriptions) and change Int/Str to Str/Int for consistency with the order of the stats in the ui and elsewhere. -------------------------------------------------------------------------------- 5b5c5c9dfb | Kate | 2022-06-25 11:40:13 +0100 Fix conflicting vault-defined monster and item renames Both using the "name:" tag caused them to be incorrectly parsed, breaking monster renames. -------------------------------------------------------------------------------- 2f1814c7b2 | Nicholas Feinberg | 2022-06-24 21:54:03 -0700 Checkwhite -------------------------------------------------------------------------------- 1248423c9f | Nicholas Feinberg | 2022-06-24 21:23:22 -0700 Unrig big pig dig (buh) Don't let formicids dig via the quiver in forms that meld mandibles. -------------------------------------------------------------------------------- 3f287b9546 | Nicholas Feinberg | 2022-06-24 21:06:43 -0700 Remove scythes Scythes, as it stands, are something of a gag weapon. Their stats are ludicrously terrible - there are very few cases in which it's right to use a scythe. Gags are great! But it's not great to pull jokes on newer players, and it's not good to discourage new players from using that cool looking weapon they just got from scary ol' Sigmund. We could add some funky gimmick to scythes, but honestly, the polearm weapon progression already works quite well. Instead, let's turn scythes into a purely cosmetic item - a reskin for halberds. Sigmund and reapers can still have their iconic weapon, and players can actually use 'em if they so please. Win-win! Unrand scythes remain unchanged. -------------------------------------------------------------------------------- f0ca2457bd | Nicholas Feinberg | 2022-06-24 21:06:43 -0700 Remove scythes from vaults In preparation for full removal. -------------------------------------------------------------------------------- ff0870d9f4 | Nicholas Feinberg | 2022-06-24 21:06:43 -0700 Base unrand scythes off halberds In preparation for scythe removal. -------------------------------------------------------------------------------- ec28fa79f6 | Nicholas Feinberg | 2022-06-24 21:06:43 -0700 Make reapers & Sigmund wield renamed halberds In preparation for scythe removal. -------------------------------------------------------------------------------- 3702571b76 | Nicholas Feinberg | 2022-06-24 21:06:43 -0700 Remove support for shared-description item renames Not currently needed and a bit of a pain to get working fully. -------------------------------------------------------------------------------- f0e39d631f | Nicholas Feinberg | 2022-06-24 21:06:43 -0700 Give Crazy Yiuf his hammers back Retheme the maces as hammers. A little theme goes a long way. I considered re-adding hammers in some of the other places they were formerly used, eg the 'hammer & chisel' vault in Orc, but didn't feel excited about it. They can be special for Yiuf. -------------------------------------------------------------------------------- e866d9a976 | Nicholas Feinberg | 2022-06-24 21:06:43 -0700 Make item tile: and wtile: support variants For e.g. enchanted/randart weapons/armour. (Only weapons currently support variants for held tiles.) -------------------------------------------------------------------------------- 99da04ecca | Nicholas Feinberg | 2022-06-24 21:06:43 -0700 Support vault-defined item names/descs Time to get up to some big time nonsense. -------------------------------------------------------------------------------- 32ab5fea29 | Kate | 2022-06-24 21:55:44 +0100 Fix a Zot clock crash (#2567) By removing bezotting level 4 - it was supposed to only be reached at Zot clock zero, but due to how AUTs were rounded to display as turns, it was possible to reach while less than a full turn (0-9 AUT) remained. As a Meteoran with a scarf of shadows equipped, this allowed the player to reach 0 LOS and crash. Closes #2567. -------------------------------------------------------------------------------- e598fa6640 | Kate | 2022-06-24 21:46:54 +0100 Add some Zot clock messages to default force_more The new messages for being drained at 0 Zot clock, specifically. -------------------------------------------------------------------------------- 7eeb665c8c | Kate | 2022-06-24 14:38:24 +0100 Fix spelling -------------------------------------------------------------------------------- 98ab2a97b9 | Nikolai Lavsky | 2022-06-24 16:12:42 +0300 fix: let pieces from Xom's chessboard affect frenzied monsters Continuing with the removal of restrictions on attacking frenzied monsters, let the pieces affect insane enemies. -------------------------------------------------------------------------------- c3b6d67b95 | Nikolai Lavsky | 2022-06-24 16:12:24 +0300 fix: further fix grammar for artefact bardings with Regen There are two different attunement messages for items with Regen. The first one is displayed when a character puts on such item while at full health. When an injured character puts on an item with Regen and then reaches full health, the second message is printed. The first attunement message was fixed in 68df51542, and this commit fixes the second one. -------------------------------------------------------------------------------- 5f5fd466e5 | Nikolai Lavsky | 2022-06-24 16:11:46 +0300 fix: remove a stray function declaration The corresponding function definition was removed in 7ca12cd9. -------------------------------------------------------------------------------- 7e06a55bdf | Nikolai Lavsky | 2022-06-24 16:11:46 +0300 fix: don't crash when &s-ing a useless skill Training an unusable skill, like a magic school on a Dj or Invocations on a Dg, via the &s command crashes the game. Training a sacrificed skill doesn't crash the game, but has no effect, so let's disable it as well. -------------------------------------------------------------------------------- e04d5b83ea | Nikolai Lavsky | 2022-06-24 16:11:46 +0300 feat: show current skill level in &s This commit reduces the need to use the `m` menu while experimenting with the skills in wiz-mode. Also, it fixes the messaging. For example, when Fighting is changed 10.5 -> 10, the message will be "Lowered Fighting to skill level 10.0." instead of "Reset Fighting to skill level 10.0." -------------------------------------------------------------------------------- ba467f2e49 | Edgar A. Bering IV | 2022-06-24 08:09:59 -0500 docs: update CREDITS.txt -------------------------------------------------------------------------------- 0d03ebdc04 | Rytis Petronis | 2022-06-24 08:07:08 -0500 feat: make -Scroll and -Potion regular 2-tier bad mutations Two tiers are added to both MUT_READ_SAFETY and MUT_DRINK_SAFETY mutations to make it more in line with the other bad mutations, and the latter is added to the general bad mutation pool. To make the 2 tiers work correctly the _is_damage_threatening function has an added variable to decide on the safety level with which to evaluate the threat. Ru's sacrifice now sets the mutation at tier 2, which is the same severity as before this commit. This commit also adjusts the weight of both mutations to 7 (average) from 10 (most common). [ Committer's note: Squashed, rebased, checked whitespace. Closes #2573 ] -------------------------------------------------------------------------------- b80629599b | 4Hooves2Appendages | 2022-06-24 07:21:45 -0500 feat: give arachnids 'skitter' shouts This commit creates two new shout types: 1) S_SKITTER, for medium and larger many-legged monsters, normal noise. 2) S_FAINT_SKITTER, for little and small many-legged monsters, quiet noise level. For a variety of arachnids and insects, replaces S_HISS with new shouts. [ Committer's note: Fixed whitespace, made faint skitters quiet, kept Pharaoh Ants as S_MOAN: it's louder so it helps bring more spiders for their gimmick. Closes #2575 ] -------------------------------------------------------------------------------- 626dbc2b52 | Edgar A. Bering IV | 2022-06-24 07:08:05 -0500 feat: restore the nearby altar for AK start flavour -------------------------------------------------------------------------------- b66ea993e3 | Spencer Baugh | 2022-06-24 15:03:44 +0300 feat: make AK start standing on exit It's basically a spoiler that an exit always generates near the AK starting spawn. If the player doesn't know that, they'll waste a fair bit of piety using Depart the Abyss. That could be fine, except that now that means their starting escape mechanism, Bend Space, will be offline for the first few levels of the Dungeon, defeating the purpose of bumping AK piety to make it available. We could make the exit just generate in LOS, but there's nothing really tactically interesting about walking a few squares and maybe getting very unlucky, so just have AK start out standing on the exit. -------------------------------------------------------------------------------- 5c1d49f3b4 | Edgar A. Bering IV | 2022-06-24 07:00:08 -0500 fix: take proper note of banishment depth (Goratrix) -------------------------------------------------------------------------------- a64570c9d2 | Nikolai Lavsky | 2022-06-24 04:47:12 +0300 fix: tweak teleportitis-related messaging and status display This commit fixes two issues with teleportitis messaging and status display: * although teleportitis is suppressed in the Abyss since db80c5092, the ``%`` screen shows ``Rnd*Tele`` there; * after 6b4f085fc, ``stairs.cc:_gauntlet_effect()`` doesn't print "You feel stable on this floor." for players with teleportitis, since ``player.cc:player_teleport()`` always returns ``0`` when the player is in the Gauntlet. Currently, ``spl-transloc.cc:_teleport_player()`` has code for preventing teleportitis while in the Abyss. Adding an extra check into ``player_teleport()`` allows aborting such teleports a couple function calls earlier, in ``player-reacts.cc:player_reacts()``. Also, let's give ``int player_teleport()`` a more descriptive name. -------------------------------------------------------------------------------- e176fc164b | Nikolai Lavsky | 2022-06-24 04:47:12 +0300 fix: mark teleportitis as suppressed in more cases Currently, the mutations screen displays this mutation as suppressed only when the player is in tree form. This commit marks the mutation as inactive when all teleports are forbidden or while the player is in the Abyss. -------------------------------------------------------------------------------- 5f01ad7185 | robertxgray | 2022-06-23 20:44:11 -0500 Quote for Gozag's altar Francisco de Quevedo, _Poderoso caballero es don Dinero_. 1603. -------------------------------------------------------------------------------- 85323850a6 | nlavsky | 2022-06-23 20:42:12 -0500 fix: apply item_slot when seeing monsters use unid'd scrolls or potions When a monster uses a scroll or potion, it identifies the consumable and applies autoinscriptions. But unlike other methods of item identification, it didn't change inventory letters according to the ``item_slot`` option. -------------------------------------------------------------------------------- 859816b266 | Nicholas Feinberg | 2022-06-23 17:24:58 -0700 Fix (?) throwing damage rates (Lici) This isn't a great display - it'd be really nice to clarify where the extra base damage is coming from. Oh well! -------------------------------------------------------------------------------- 87332871fa | Nicholas Feinberg | 2022-06-23 17:09:14 -0700 Don't crash when a dead monster cleaves E.g. if they're killed by minotaur retaliation midway through an axe swing. Broken in 437f8d1d3d7ac52eafa3a8e7bdbfce506b4eac7f. -------------------------------------------------------------------------------- 5ff2a30383 | Edgar A. Bering IV | 2022-06-23 06:59:30 -0500 fix: cap all beam wand charges for Wn start (acrobat) -------------------------------------------------------------------------------- c25378c239 | gammafunk | 2022-06-23 01:38:29 -0500 fix: Correct a mutation description (acrboat) For Sacrifice Experience, we now only lower XL by one each time, so reflect this on the mutation screen. Also mention this change in the changelog. -------------------------------------------------------------------------------- 12ee2bf84d | Nicholas Feinberg | 2022-06-22 21:37:15 -0700 Unbrace -------------------------------------------------------------------------------- 1aa759944b | Nicholas Feinberg | 2022-06-22 19:25:25 -0700 Allow banished monsters to appear after Abyss:1 (acrobat) Previously, there was an oversight (?) in which banished monsters would only ever appear on Abyss:1. Make them follow you through the whole Abyss instead. This is a little silly (are they taking the stairs down?!), but prevents you from losing the Royal Jelly on a lower Abyss level, for example. -------------------------------------------------------------------------------- 26d293caef | Nicholas Feinberg | 2022-06-22 11:50:49 -0700 Ramp up deep Abyss spawn rates Make many more monsters spawn on Abyss:6 and :7, and give em a chance to spawn near the player. (This is a hacky breakpoint.) -------------------------------------------------------------------------------- dd63cfa21d | Nicholas Feinberg | 2022-06-22 11:27:04 -0700 Add some truly stellar new tiles (Sastreii) New runelight tiles, to make it clearer when the player is near the abyssal rune (or perhaps other ones someday?) -------------------------------------------------------------------------------- ff9cad4a3d | gammafunk | 2022-06-21 23:37:40 -0500 fix: Place Grunn with his band (dilly) We need the "band" mon spec designator in the uniq_grunn vault, otherwise Grunn places without any rare puppers. -------------------------------------------------------------------------------- be5fe9cee2 | Nicholas Feinberg | 2022-06-21 18:09:47 -0700 New small abomination tiles (Sastreii) Eww, gross! These might not be small enough. We'll see. -------------------------------------------------------------------------------- 910882235c | Kate | 2022-06-21 23:37:41 +0100 Increase chances of a Jiyva altar at Slime entry Previously there were a small fixed number of Slime entry vaults that always placed a Jiyva altar, with their total weight resulting in roughly a 1/2 chance to see one in any given game. Instead let all Slime entries place Jiyva altars, with a 2/3 chance. -------------------------------------------------------------------------------- d0a8d1b88b | Kate | 2022-06-21 23:37:41 +0100 Rebrace -------------------------------------------------------------------------------- 25bf049393 | Kate | 2022-06-21 23:37:41 +0100 Don't let Irradiate affect conjured monsters (CarefulOdds) -------------------------------------------------------------------------------- 28b9d68c38 | wheals | 2022-06-22 00:36:07 +0300 fix: really don't generate rare temples outside the 1% chance -------------------------------------------------------------------------------- 94431d12f0 | Edgar A. Bering IV | 2022-06-21 22:38:04 +0300 feat: don't generate rare temples as a part of normal generation Only pick them for their tag. -------------------------------------------------------------------------------- 7553cd0caa | Edgar A. Bering IV | 2022-06-21 20:53:51 +0300 feat: select the size of the Temple in C++ Temple size has a major impact on god selection: a big Temple means getting your choice god-but it might take until D:7. A small temple scatters the gods over the overflow range. Both experiences are good for the game, but before this commit the chance of a given temple size was controlled by the sundry weights of the different temple maps. This control was brittle, and indeed b444dcf96dcc4 marked a big shift in the prevalence of larger temples (thanks to acrobat for pointing out how large this impact was), that was not intended. This commit changes temple selection to work as follows: First a 1% roll decides to select a rare temple. Current rare temples are the Lugonu, Jiyva, and Ignis temples. Rare temples are those that should create special moments outside of the usual temple system. Failing the 1% roll, the temple size is rolled. Currently this is 9 + random2avg(13,2), but this can be adjusted (and will be to accomodate some smaller temples coming in subsequent commits). -------------------------------------------------------------------------------- 1ace0e5f75 | patrick | 2022-06-21 12:23:09 -0400 Change mountain boots' name back to mountain boots Painting the bike shed one final time. This reverts the commit where I changed it. -------------------------------------------------------------------------------- 4e50b17284 | Edgar A. Bering IV | 2022-06-21 13:32:33 +0300 fix: a crash and a check -------------------------------------------------------------------------------- 1c8a42db57 | Edgar A. Bering IV | 2022-06-21 09:56:56 +0300 docs: changelog through 0.29-a0-653-gd47aff6735 -------------------------------------------------------------------------------- d47aff6735 | Nicholas Feinberg | 2022-06-20 22:32:40 -0700 Remove a probably unused function? As far as I can tell, the "item()" function is *only* used in Volcanoes, and it is *not* used in the slot-setting mode. Don't believe it was documented, either. If this breaks stuff, please revert this. -------------------------------------------------------------------------------- 45357cb20f | Nicholas Feinberg | 2022-06-20 22:25:19 -0700 Fix item exclusion for shops Shops with excluded items would hold an empty list (treated as 'any item') instead. -------------------------------------------------------------------------------- 437f8d1d3d | patrick | 2022-06-20 22:00:43 -0700 Add a new unrand: the lochaber axe Long long ago, bardiches used to be known as lochaber axes, until they were renamed in commit 8b14a9, on December 13, 2007, presumably so that players wouldn't think they were some kind of axe. The lochaber axe was gone... but not forgotten... It's back, reimplemented as an unrand, and this time, there's no problem if players think it's some kind of axe. Because it is. The lochaber axe has both reach and cleaving, and combines them both into a sort of "super-cleave", aka "reave", which attacks everybody in a radius of 2 with each swing. Additionally, due to its nature as a combination of polearm and axe, either skill can be used to wield it -- the higher of your Polearms or Axes skill will be used to determine its damage and delay. Currently, it's statted out as a +5 bardiche with -1 to base accuracy and +1 to base damage and base delay. Currently uses the old tile for lochaber axes, although it will probably need something more menacing before it's ready for prime-time. Much thanks to PleasingFungus for coding assistance, and gammafunk for discussions, the lochaber axe tile, and not immediately reverting this. -------------------------------------------------------------------------------- 8101c4d66a | patrick | 2022-06-20 22:36:36 -0400 Make some cosmetic changes to the mountain boots Now they're the boots of the Mountain, and their effect is renamed from the descriptive-but-not-super-flavorful "rDislodge" to the somewhat-more-flavorful "steadfast". Also the description of the effect is clarified somewhat more precisely. thank you for your time. love, nicolae -------------------------------------------------------------------------------- 45c230d69a | hellmonk3 | 2022-06-20 15:55:43 -0400 feat: New Orc ending (#2454) Salted Orc, if you will. -------------------------------------------------------------------------------- 6b26cc9f40 | advil | 2022-06-19 12:16:09 -0700 fix: generalize a bit of abyss rune code I think this change will also fix another case of odd messaging after getting the rune, on leaving the abyss. -------------------------------------------------------------------------------- b07f931dc7 | Nicholas Feinberg | 2022-06-19 11:41:38 -0700 Remove the old ct_skills array Unused since 7c1a5597fd584d (2014). -------------------------------------------------------------------------------- da25f7726e | Nicholas Feinberg | 2022-06-19 11:33:12 -0700 Fix a misleading rune message -------------------------------------------------------------------------------- e8efa2268b | Nicholas Feinberg | 2022-06-19 11:27:33 -0700 Don't show item hints for corpses in tiles It's a bit silly to tell people to mess around with a purely decorative object - quite confusing. -------------------------------------------------------------------------------- 0428525265 | Nicholas Feinberg | 2022-06-19 11:19:15 -0700 Grunn tile (Sastreii) Unique's is back baby. It's good again. Awoouu (wolf Howl) -------------------------------------------------------------------------------- a013cefcf8 | Nicholas Feinberg | 2022-06-18 22:38:41 -0700 Remove obsolete code for throwing hunters -------------------------------------------------------------------------------- 3454511d3d | neo-bop | 2022-06-19 08:35:50 +0300 docs: fixed grammar mistake -------------------------------------------------------------------------------- b59bef153c | Nicholas Feinberg | 2022-06-19 08:31:14 +0300 text: add Grunn dialogue Rough pass, a mix of Grum-isms plus some kvetching about being a lil bit dead. Also, in Hell. [ Closes #2459 ] -------------------------------------------------------------------------------- d0c25b80c2 | hellmonk | 2022-06-19 08:31:08 +0300 feat: Grunn the Punished Alt-timeline version of Grum who has a pack of doom hounds. Appears in Depths, Crypt, and Zot. -------------------------------------------------------------------------------- 29a8cdef9d | RojjaCebolla | 2022-06-19 08:19:07 +0300 fix: undefined local entry '_ashenzari_heavens_' It was only missing one % symbol. [ Closes #2431 ] -------------------------------------------------------------------------------- e81f215762 | RojjaCebolla | 2022-06-19 08:19:01 +0300 fix: no godspeak entry for 'Xom zero miscast effect' -------------------------------------------------------------------------------- ff17717bc1 | RojjaCebolla | 2022-06-19 08:18:51 +0300 text: remove quote db entries for deprecated items -------------------------------------------------------------------------------- de4a49754e | RojjaCebolla | 2022-06-19 08:18:46 +0300 text: add a description for the spriggan hatter -------------------------------------------------------------------------------- c2a2f2613b | Nicholas Feinberg | 2022-06-18 21:20:36 -0700 Don't cover the entire Abyss with exits ...once you get the rune. ??doh -------------------------------------------------------------------------------- 155753f734 | Nicholas Feinberg | 2022-06-18 21:20:21 -0700 Don't erode runelights They're important for finding runes! -------------------------------------------------------------------------------- 6e2bebc5d0 | Nicholas Feinberg | 2022-06-18 16:07:40 -0700 Make Abyss seven levels deep Attempt to make the Abyss sufficiently spooky to make 15-rune players worried about spending much time at the bottom. Megaziggers will probably have no issues, but that's fine. Might want to adjust spawn rates and/or spawn tables further - these are a big mess. -------------------------------------------------------------------------------- 781b4ac09e | Edgar A. Bering IV | 2022-06-19 00:34:14 +0300 feat: force a minimum entry depth on the Abyss In lieu of the previous anti-scumming mechanism, which threw the baby out with the bathwater and created an unpleasant experience with a lot of special cases, this introduces a minimum depth mechanic for the abyss. Upon entry from any source (distortion, banishment, exiting pandemonium through the abyss, entering an abyss portal) the player is sent to the highest depth so far achieved. In combination with the rune-guide improvements, a continued dearth of items, and the XL scaled depth-increasing-on-teleport mechanic, this should give a better experience to the recently punished mid-game banishment victim and the 3rd rune hunter, while still dissuading the scummer (who will rapidly find themselves on A:5) than the no-xp abyss did. If A:5 is not harsh enough to be a deterrant we can add greater depths as needed. -------------------------------------------------------------------------------- ae2251da70 | advil | 2022-06-19 00:34:14 +0300 fix: messaging for leaving and missing the abyssal rune This prop needs to be reset so that the messaging when reentering the abyss is correct, and we might as well indicate that the player missed out. [ Closes #2572 ] -------------------------------------------------------------------------------- 8e0c6649c8 | advil | 2022-06-19 00:22:02 +0300 fix: rewrite abyssal rune detection The first pass implementation relied on being able to store rune memory purely in map_knowledge, and use this at various points in time to detect both rune generation and removal. The abyss code makes this impractical. The rewritten version stores rune memory in a player prop that gets synced with map_knowledge; this is much more robust in my testing. -------------------------------------------------------------------------------- d66da3e29f | advil | 2022-06-19 00:22:02 +0300 feat: abyssal rune detection In newabyss players want to get in and out of the abyss as quickly as possible, but there's a lot of variation in how quickly people find the run, and it can really drag on with no rewards if this doesn't happen quickly. When you're at a rune depth, there's not a lot you can do to find the rune beyond just wandering and/or looking for vaults via giveaway tiles (these could be removed if this current commit goes forward). This commit implements an idea where all players detect the presence and map location of the abyssal rune, and also detect if the map shifts and it vanishes. This gives players a much more concrete goal, as long as the rune has generated. I am still not entirely sure if this is a good idea, but in my testing it works way better than I expected. The rune typically generates pretty far from you and then you have a bit of a race towards it, both (a) simply navigating the abyss between you and it, and (b) figuring out how to even get into the vault. I'd theorycrafted this as making it too easy to find the rune, but I'm not sure it (typically) is at all. But, it probably needs more playtesting. Also, by the nature of abyss code, I am at best medium sure that I added this hook in all the places that it needs to be in. -------------------------------------------------------------------------------- ba36221789 | Edgar A. Bering IV | 2022-06-19 00:22:02 +0300 revert: unrewarding abyss This reverts most of the "no-XP" abyss changes, specifically: fcf54068 feat: prevent gaining experience in the Abyss d764ef0d feat: give an XP reward for the abyssal rune 010f2a22 feat: don't grant piety in the Abyss 0647d936 Refactor piety gain prevention in the Abyss 6c1bee59 feat: reduce wretched star malmutation rate 050a5067 fix: turn down wretched stars corrupting pulse a bit more The no XP abyss did stop abyss scumming, but at too great a cost. While some players enjoyed the stealth-emphasis-increase of the XP being concentrated in the rune, the overall result wasn't good. So this reverts the changes that revolve around XP, in preparation for the following commits. Not reverted are: - the changes to exit and stair spawn rates. These remain increased, in anticipation of the subsequent anti-scum mechanic making them desireable. - the removal of items outside of vaults. Items still have the potential to be a grind-trap (more a trap than "optimal" scumming), but the abyss isn't supposed to be a place players want to linger so let's not give them too many reasons to stay beyond a rune. -------------------------------------------------------------------------------- 39ea5eca17 | Nicholas Feinberg | 2022-06-18 13:14:11 -0700 Despoiler the Abyss rune (mostly) Replace external uses of the secret 'abyss rune tile' with a new 'runelight' feature, which stops autoexplore and is explicitly described as indicating the presence of a nearby rune. Possible that some or all of the internal tiles in these vaults should also be replaced with runelights, for those with dungeon mapping mutations or similar. Art is placeholder. -------------------------------------------------------------------------------- 7f7ec87276 | Edgar A. Bering IV | 2022-06-18 22:48:14 +0300 text: clarify battlesphere's description -------------------------------------------------------------------------------- a996378906 | Edgar A. Bering IV | 2022-06-18 17:28:42 +0300 fix: idiomatic randomness (PleasingFungus) -------------------------------------------------------------------------------- 39d4558d33 | Edgar A. Bering IV | 2022-06-18 16:54:40 +0300 refactor: remove dead quantity code for launcher ammo -------------------------------------------------------------------------------- 14c03f4a0f | Edgar A. Bering IV | 2022-06-18 16:54:14 +0300 feat: reduce stone availability and make them always mulch Stones are very good on D:1-2, and while they quickly fall off remain useful for characters for a bit longer, or as a "poke the monster quietly before walking away to pull a small number of foes" tool. They're also all over the dungeon in massive numbers, and are re-usable to boot. Now that they're not used for Sandblast, their primary gameplay function is early game plinking. To make this plinking a bit more interesting this commit reduces the supply of stones in each pile, and makes stones always mulch when used. In the very early game this should put significant pressure on the use of stones in an interesting way, with them becoming plentiful closer to the time the player has better things to do than plink away. -------------------------------------------------------------------------------- 8217bd198b | Edgar A. Bering IV | 2022-06-18 16:29:11 +0300 feat: damage ratings for thrown items -------------------------------------------------------------------------------- e4689427c4 | Edgar A. Bering IV | 2022-06-18 09:48:43 +0300 fix: remove a stray random altar from overflow range -------------------------------------------------------------------------------- 13ace881f2 | patrick | 2022-06-17 11:09:41 -0400 Let randart bardings generate with rPois The code prevented randart bardings from generating with properties that were already innate to barding wearers. At the time, this was just nagas, and nagas already have rPois and SInv. Now palentongas can wear bardings, and they lack rPois, so now it makes sense for randart bardings to be able to generate with rPois. Since nagas and palentongas both have innate SInv, SInv is still excluded from the properties randart bardings can have. -------------------------------------------------------------------------------- d6e8e0e227 | Edgar A. Bering IV | 2022-06-17 16:15:19 +0300 feat: re-vitalize Vitality Regeneration and 15 hit points aren't much. Vitality has been on the "to redesign" list for a long time. Some of the possibilities discussed are very close to what ultimately became the dreamshard amulet. It was also suggested, and discarded, as a possible early-game unrand. Let's buff it out of this awkward place. The 15 hp are traded for two pips of MP regen and an additional hp regen pip. Lore has it the amulet kept Borgnjor alive in her final days before descending into undeath, so it's also now evil. -------------------------------------------------------------------------------- 2e310f0204 | Edgar A. Bering IV | 2022-06-17 14:12:33 +0300 text: remove a randart name with an unpleasant connotation -------------------------------------------------------------------------------- 7a6b98fccd | Nicholas Feinberg | 2022-06-16 20:16:32 -0700 Adjust Ru mutations (acrobat) After the change to make Sacrifice Experience properly affect your current XL in c127bba4f6dc8, Sacrifice Experience was comparatively underpriced. It had a considerably more negative effect on the player across the board than the Frailty sacrifice, but gave only 40 piety to Frailty's 45! Rather than set experience to its proper value, which would have to be very high (perhaps ~60 piety?), instead cut its effect in half and sacrifice one level per sacrifice. (This has the additional advantage of simplicity.) Then make the following adjustments: - Experience: 40 -> 35 piety - Frail: 45 -> 35 piety (compare Sacrifice Love at 40) - Weak-Willed: 38 -> 35 piety (for neatness) - Eye: 20 -> 25 piety (think this was undervalued) I don't think any of these will make a dramatic impact on the Ru experience, but they should make things very slightly tidier overall. -------------------------------------------------------------------------------- c53de2f800 | Nicholas Feinberg | 2022-06-16 19:43:03 -0700 Add a rock-solid new artefact tile (Sastreii) Mountain boots get their own tile. Bye (again), boots of the spider. Player doll doesn't match, but that's not a big deal. -------------------------------------------------------------------------------- deedd76f10 | Nicholas Feinberg | 2022-06-16 12:49:37 -0700 Fix ignis wrath + mountain boots (nicolae) -------------------------------------------------------------------------------- 2001307d0b | advil | 2022-06-16 09:27:48 -0400 fix: remove pakellas 's color -------------------------------------------------------------------------------- f2c431b9b9 | patrick | 2022-06-15 21:42:22 -0700 Add a new unrand, the +3 mountain boots {rDislodge, rC+} Gives dislodge resistance, keeping the player from being moved by external non-translocation sources. (Trampling, shafts, tentacles, etc.) Currently uses the tiles for the spider boots, which weren't being used anyway, but will probably need actual tiles at some point. -------------------------------------------------------------------------------- b8e136fc6a | Nicholas Feinberg | 2022-06-15 17:31:43 -0700 Double Airstrike's empty space bonus To encourage more tactical and positional thinking, make Airstrike somewhat better against enemies in open areas and worse against enemies not surrounded by open space. Sometimes it'll be the right spell to use, sometimes you'll want to reposition or use another tool from your toolbox. -------------------------------------------------------------------------------- 91acacb2e3 | gammafunk | 2022-06-15 18:07:51 -0500 fix: A teleport closet (riverfiend) In nicolae_swamp_secret_spriggan_hideout, a wall could sometimes place and seal off an area. -------------------------------------------------------------------------------- 99610632ab | Kate | 2022-06-15 23:50:13 +0100 Remove Kiku's undead duplication passive In practice, the changes to necromancy spells making them easier to make use of (in addition to them interacting more favourably with Unearth Wretches) make Kiku fairly strong already. Duplicating undead on top of that resulted in excessively huge hordes being a little too easy to create. This reverts commit 2fcf5398dde68d34f8f1d11118976734faf3d690. -------------------------------------------------------------------------------- b56f46d856 | advil | 2022-06-15 15:51:10 -0400 fix: attitude check for poisonous vapours disabling Previously this would appear to be enabled with susceptible allies in view. It was oddly hard to see what the exact right way to implement this is, but wont_attack is what some other spells in this code use, so it should do for now. -------------------------------------------------------------------------------- 5f3c444be0 | Edgar A. Bering IV | 2022-06-15 21:57:46 +0300 feat: make animated armour fly For consistency with dancing weapons and the notion of "spirit", as well as removing a gameplay synergy with Leda's, let's make these buddies fly about. -------------------------------------------------------------------------------- ed4851bcc5 | Nicholas Feinberg | 2022-06-15 10:21:38 -0700 Fix stat mut descs (Goratrix) -------------------------------------------------------------------------------- ddeeb70f77 | Nicholas Feinberg | 2022-06-15 09:39:44 -0700 Pull out zot.cc from timed-effects.cc More than enough stuff to deserve its own file. -------------------------------------------------------------------------------- 6a3c3ed53f | Nicholas Feinberg | 2022-06-15 09:28:23 -0700 Make positive stat muts more impactful (various) The "str +2" etc muts are reasonably helpful, but don't meaningfully impact playstyle or player decisions. Let's make them more impactful by making each one give +4 to the primary stat and -1 to the other stats, enough to shift the player towards that stat in a very serious way. Since each mut only has two levels, it seems like it'll be quite rare for those -1 stats to cause stat zeroes. Theming/naming could use another pass. -------------------------------------------------------------------------------- 3118c4fcd2 | Nicholas Feinberg | 2022-06-15 09:28:23 -0700 Apply monster wand damage nerfs more generally To somewhat reduce the classic "instantly melted by ijyb with a wand of acid" scenario, instead of special-casing Mindburst specifically, make all monsters do 2/3rds damage with all wands. This is a brutal nerf to /flame monsters. -------------------------------------------------------------------------------- f530d57ad0 | Nicholas Feinberg | 2022-06-15 09:28:23 -0700 Update fo mut desc For giant clubs. -------------------------------------------------------------------------------- b1b9a4145c | Nicholas Feinberg | 2022-06-15 09:28:23 -0700 Don't force /para in hellmonk_paralyzer -------------------------------------------------------------------------------- 800f0a2745 | Nicholas Feinberg | 2022-06-15 09:28:23 -0700 Remove Ar wand printing code No longer relevant, now that ar start wands aren't randomized with item sets. -------------------------------------------------------------------------------- c0164372c5 | Edgar A. Bering IV | 2022-06-15 19:26:28 +0300 feat: move timed hell effects to level arrival Timed hell effects were intended to punish lingering and encourage taking on the Hells "all in one go". The XP gated, but time-applied nature of them meant that even traversing a larg end level could be needlessly punishing. After several attempts at turning tuning knobs, they're still not in a great place, and push players to stair-dance, do a hell partially then go to Pan for a bit, etc. This commit moves the effects to apply on each level descent. Players doing the hells "all in one go" preferring to dive over fight won't get hit too badly, (just enough for some seasoning), but stair dancing to clear a tough encompass part way through will meet stiff penalty. Branch-wide conducts are unchanged. The numbers will probably need some further tuning to get them "just right" in the tension-versus-too-punishing department, but let's start with these. -------------------------------------------------------------------------------- 1680f32a72 | Nicholas Feinberg | 2022-06-15 07:07:10 -0700 Don't overexaggerate hand-pairs (wheals) Overcorrection. -------------------------------------------------------------------------------- d8304a5bf4 | Nicholas Feinberg | 2022-06-14 22:34:29 -0700 Let formicids wield giant clubs again Reverts 9a20582491d1. At the time, giant clubs were thought to be so strong that formcids would be unmotivated to use their shield gimmick. Today, that seems less likely. -------------------------------------------------------------------------------- 69c401ce25 | Nicholas Feinberg | 2022-06-14 20:18:34 -0700 Fix the build? -------------------------------------------------------------------------------- 57363d2029 | Nicholas Feinberg | 2022-06-14 19:27:36 -0700 Pull mindburst out of the hex set I've been persuaded for now that it's sufficiently distinct from para/charming. We might change this later. -------------------------------------------------------------------------------- 3bc56fe6af | Nicholas Feinberg | 2022-06-14 19:27:34 -0700 New wand tiles (Sastreii) -------------------------------------------------------------------------------- c4eff49456 | Nicholas Feinberg | 2022-06-14 19:27:34 -0700 Relax the no-excluded-items policy. To avoid startscumming, have artificer go back to always having a wand of charming, regardless of which hex wand will spawn for the rest of the game. Also let hellmonk's paralyzer always spawn a para wand, as a meme. -------------------------------------------------------------------------------- 5a9699462f | Nicholas Feinberg | 2022-06-14 19:27:32 -0700 New item: wand of quicksilver (ebering) An alternate for the wand of acid, wands of quicksilver shoot dispelling bolts. They do slightly more damage than /acid, with a perhaps slightly less broadly applicable affect. You can also zap yourself, if you like pain! (I'm hoping self-zapping isn't *too* strong. It doesn't help with contam, fwiw.) -------------------------------------------------------------------------------- 376ae5a38f | Nicholas Feinberg | 2022-06-14 19:27:31 -0700 Add 'any beam wand' shorthand -------------------------------------------------------------------------------- 4f8b61c030 | Nicholas Feinberg | 2022-06-14 19:27:31 -0700 Make wands of light alternate with acid wands Half of games will have one, half will have the other. -------------------------------------------------------------------------------- 48b2cc46b9 | Nicholas Feinberg | 2022-06-14 19:26:47 -0700 New item: wand of light Intended as an alternate for wands of acid, wands of light fire a beam that blinds targets for a duration dependent on HD. The beam checks AC and EV normally, but no resists. It's otherwise identical to acid. If it hits a player, it has a 1/3 chance of confusing them for 2-3 turns. (Since players can't be blinded.) The goal is that this has a broadly similar use case to acid (high damage beam that ignores most resists & applies a debilitating effect), but plays somewhat differently. It'll be more useful for stabbers, and somewhat helpful defensively (by reducing enemy accuracy instead of AC). I'm very undecided on the blinding effect duration. Buff wand of light -------------------------------------------------------------------------------- c28e0ee30e | Nicholas Feinberg | 2022-06-14 19:26:14 -0700 New feature: item sets One of the most exciting things is adding new features: items, monsters, etc. However, the problem with items is that each distinct item type fills up an inventory slot. This is both a UI burden and a decision-making issue: it's possible to give out too many options, leading to analysis paralysis or most players simply ignoring most of what they have. So, here's an alternate approach. Pull wands of mindburst, paralysis, and charming into an 'item' set, and make the game only spawn one of the three types in any given game. Artificer starts with whatever is chosen. (This hopefully won't lead to startscumming.) Item specs (i.e. vaults) automatically exclude the wands which *weren't* chosen from the set, and I did some tweaks to make sure that all vaults should still work. Wand generation weights are tweaked slightly - the combined slot is slightly less common than mindburst plus para plus charm were together. (NOTE: A later commit will pull mindburst back out of the item set, leaving only charming + paralysis to alternate.) I have high hopes for this design technology. We'll see how it plays! -------------------------------------------------------------------------------- 1f97f7987d | Nicholas Feinberg | 2022-06-14 18:28:00 -0700 Let parghit throw ruk (dilly) What silly code! -------------------------------------------------------------------------------- 3e51bf9b82 | Nicholas Feinberg | 2022-06-14 18:24:28 -0700 Don't injury bond ioods (riverfiend) And do some code cleanup while I'm here. -------------------------------------------------------------------------------- 53e7fda734 | Edgar A. Bering IV | 2022-06-15 01:13:45 +0300 vaults: new demonic serial vault Encountering "common demons" at a time when they're a threat and not summons is a rare occurance in crawl. This serial vault, a shameless ripoff of serial_undead, places some demonic themed decor on a dungeon level to give it a "demonic feel". Spooky. Featuring demonic trees and plants, plus 5, 4, and 3 tier demons. -------------------------------------------------------------------------------- 58cc3432a3 | Edgar A. Bering IV | 2022-06-15 01:13:45 +0300 vaults: adjust serial_undead to modern D spawn tables -------------------------------------------------------------------------------- b10a8bf730 | advil | 2022-06-14 17:33:08 -0400 feat: indicate zot clock death risk in status light This might be overkill, since I think the likelihood of a player drained this much actually dying of the zot clock itself is rather low, but it seems useful to try out. In the end, rather than fancy punctuation, I simply added ", death" if the next zot clock 0 would kill. The color tweaks here bring this in line with the overview screen, though in contrast to there, the color is always stepped up if the player is drained enough to be risking death. (If `always_show_zot` is off though, for non-meteorae, clocks >=1000 turns are still not shown, though.) I also tweaked magenta->lightmagenta mainly for the sake of webtiles where regular magenta looks a bit dull (possibly just my badly calibrated monitor). -------------------------------------------------------------------------------- ed30ed24e1 | advil | 2022-06-14 17:32:48 -0400 feat: add zot clock to dungeon overview This displays in both the dungeon overview popup, and in morgues. Whether it displays follows the usual rules for showing the zot clock: it is forced by always_show_zot or meteorae, and otherwise only shows info if the bezotting level is >0. This also clearly indicates when the player is in death range as well as which branches they need to watch out for. Unfortunately, though I tried very hard, I just could not get this info into a three-column display. (I tried both inline approaches, and two-row branch displays; the former doesn't have enough space, and the latter looked quite bad.) Therefore, if any zot clocks are shown, it flips to a two-column display. Possibly confusing? I should also note that there are enough special cases here that I really doubt I got all the spacing to look right in all cases (as much as I did try to generalize the code for this a bit). -------------------------------------------------------------------------------- e82337ba6a | Nicholas Feinberg | 2022-06-13 21:38:19 -0700 Fix batty monsters + Mark (dilly) Don't make Mark turn batty monsters into unstoppable killing machines. This has been broken since 7f122b9c1a7 (2013), when Vault Sentinels and hence Mark were first added. -------------------------------------------------------------------------------- e9a90b782e | advil | 2022-06-13 17:15:01 -0400 fix: reword autofire message with mp 0 When autofiring an mp-using quivered action with mp 0, this still somewhat confusingly gave the "reckless" message. Just give an out-of-MP message. Also, reword a use of "mana" to "magic", afaik "mana" is not canon outside of some function names. -------------------------------------------------------------------------------- 113927532b | advil | 2022-06-13 16:46:26 -0400 feat: explore_wall_bias tweaks * don't consider just cardinal directions in checking for adjacent walls. (Fair warning, I don't know why it originally did this, so this change could be breaking something?) * let explore_wall_bias be negative, to prioritize open space. I should add that the use case of this option remains somewhat theoretical. There seems to be some historical idea that setting this to positive values would speed up eploration, but in my testing this is really far from correct: it adds sometimes 100s of turns to exploring a level, because it can drastically increase the amount of backtracking. Similar for negative values. It *might* be useful for meteorans as it possibly deprioritizes things they don't want to explore anyways, but the total explore time if you do a full explore is definitely still increased. In my testing for negative values what tends to get deprioritized are corners and corridors, which is what I was hoping for. But it's hard to say anything conclusive about whether this would be an improvement.. -------------------------------------------------------------------------------- 1de43cadea | advil | 2022-06-13 09:46:39 -0400 fix: float issue for webtiles pgdn / last menu item calculations After the new pgdn code from c0181ea820b1, in some cases the last menu item was not being calculated correctly because of minute (~ 0.1) overlap of the last menu item with the footer, I assume because of floating point inaccuracy. This caused pagedown to not consistently move to the last element in a menu that is larger than one page. This commit tries to fix this by just adding a bit of heuristic margin; I don't think this error should ever be more than 1px or so. -------------------------------------------------------------------------------- b72297ba39 | gammafunk | 2022-06-13 05:40:34 -0500 feat: Rename the Hedge Wizard abbreviation to HW When Wizard was renamed to Hedge Wizard in 0.26, we avoided changing the background abbreviation. This was to avoid the hassle of retroactively renaming combos, but it left us in an awkward situation where the two class names were different yet the combo names remained unchanged. We're sure we want to regard the historical Wizard class as equivalent to current Hedge Wizard, and with release coming soon, now is a good time to rename the abbreviation and do a retroactive rename in Sequell. This commit renames the abbreviation Wz to HW and renames all related enums and image filenames for good measure. I've also updated the lookup key for background descriptions in all language files that previously had entries for Wizard, but I've not changed any of the language text. -------------------------------------------------------------------------------- afbf2c5d25 | Nicholas Feinberg | 2022-06-12 21:09:02 -0700 Make allies not autotarget Kiku wretches They're harmless, and autotargeting em might prevent the player from using targeted effects like Simulacrum or Infestation on em - they can die after the invocation & before the player gets a turn! -------------------------------------------------------------------------------- 3281e725f0 | Nicholas Feinberg | 2022-06-12 21:02:14 -0700 Increase formicid dexterity by +3 Now that dexterity is the only stat that matters for shields, formicids could use a teensy bit more of it. This increases their SH as follows: - With bucklers: (3 * 38 * (3*2 + 13) / 26) / 200 = +0.4. - With kite shields: +0.6. - With tower shields: +0.85. -------------------------------------------------------------------------------- 0dc89cf053 | Nicholas Feinberg | 2022-06-11 22:54:11 -0700 Rock out, skillfully (Lightli) New gimmick Meteoran earth magic title. Perhaps too silly. -------------------------------------------------------------------------------- c323245b08 | Nicholas Feinberg | 2022-06-11 22:10:43 -0700 Tone down Amaemon's loot An enchanted demon whip of venom pre-lair is just a bit too much reward to be handing out so often. Turn down the enchantment to the same level as Grum's, maybe -2 to +1 or so. -------------------------------------------------------------------------------- 1b89ca2c71 | Nicholas Feinberg | 2022-06-11 21:30:13 -0700 Fix petrifying/frozen + aoops (acrobat) The wrong function was being called to determine whether monsters were slower than the player (and hence unable to get attacks of opportunity on them). Closes #2529. -------------------------------------------------------------------------------- bc6e321ce9 | Nicholas Feinberg | 2022-06-11 21:13:46 -0700 Fix simulac/dchan + wretches (dilly) Broken by 2ca5787500ec8efac2b55a44e937fbcb8f280d80. -------------------------------------------------------------------------------- e9b4822f2a | Nicholas Feinberg | 2022-06-11 20:48:55 -0700 Increase Sandblast's range Compensate for slowness and make spriggan nonsense a lil less fiddly. -------------------------------------------------------------------------------- 8aee0ca6de | Nicholas Feinberg | 2022-06-11 20:45:58 -0700 Add enums for random beams Clarify the secret meaning of an enum range. -------------------------------------------------------------------------------- 9aa79d2f82 | Kate | 2022-06-12 00:40:56 +0100 Fix an invisibility uselessness message -------------------------------------------------------------------------------- a50e9794a5 | Kate | 2022-06-12 00:40:56 +0100 Suppress glow while in shadow form As mostly-flavour change to Dithmenos shadow form, let it suppress glow from Corona, as well as innate Meteoran glow and other effects that light up the player. -------------------------------------------------------------------------------- 8197eedfc6 | Kate | 2022-06-12 00:40:56 +0100 Don't reduce Corona's duration against invisible players It's unclear why it was extremely short-duration against players that were invisible - in the very unlikely event that a monster manages to land Corona on an invisible player, they should get the actual intended benefit for doing so. -------------------------------------------------------------------------------- 40ec974cc1 | Kate | 2022-06-12 00:40:48 +0100 Improve messaging for Kiku spell gifts Handle cases where Kiku fails to offer any new spells, or where the player can only learn a limited subset of the capstone spell gifts. -------------------------------------------------------------------------------- 7a16c6de65 | advil | 2022-06-11 09:48:03 -0400 fix: don't let broodmother spawning crash the arena The foes for summon spiders were set wrong. This commit generalizes some code and should perhaps be applied further for the sake of future-proofing, since any of these summoning spells that just sets the foe to MHITYOU would crash in the arena if it were ever callable in the arena. -------------------------------------------------------------------------------- d29158461a | advil | 2022-06-11 09:48:03 -0400 fix: hide some references to "you" in the arena I think the conditions that set the UI flags for these are also wrong for the arena, but it was easier just to hide them. Currently, the mon info codepath is not used for AI so this is just cosmetic. -------------------------------------------------------------------------------- 64e4043184 | sdynet | 2022-06-10 22:50:37 -0400 Tiny improvement of Oct's ring It's a bit more useful, and I've adjusted the numbers slightly to fit the theme (8) -------------------------------------------------------------------------------- 3e17c549df | Nicholas Feinberg | 2022-06-10 18:33:17 -0700 Turn Sandblast into Slowblast The idea of a spell that uses up ammunition of some kind is pretty cool. You can use less powerful spells to conserve ammo, and then use the big spell for special occasions - if you have other spells available, there's no inconvenience similar to switching between different weapons. However, at level 1, you won't *have* other spells available. So the only way to preserve stones for Sandblast is to switch to melee for chaff... which isn't very exciting! Instead, let's play with a new mechanic that I've wanted to try out for Earth Magic for a while. Sandblast now no longer consumes stones, but instead takes twice as long to cast as normal spells. In testing, this gave it a distinctive and spicy character, but still felt quite powerful. (It's probably a slight nerf to D:1 EE and maybe a buff for D:2-3, which seems fine.) I'll keep an eye out for other places to use the ammo mechanic, though it might not involve stones. -------------------------------------------------------------------------------- a02bf68b3c | Nicholas Feinberg | 2022-06-10 14:39:34 -0700 Remove water (potion [colour logic]) Obsolete since d34118a48d77f2a9bb4910353feb4662b87d51c0 (2012). -------------------------------------------------------------------------------- bafdd74861 | advil | 2022-06-10 14:16:22 -0400 fix: give death and suffering their due -------------------------------------------------------------------------------- 359e09b9d1 | advil | 2022-06-08 16:47:42 -0400 fix: minor tweaks to mac console exec script * add a condition to run this directly from the repo without a containing app * refactor the app name logic * add an error case * add a comment explaining how to use a different terminal app (real wish: a user-friendly way to do this) -------------------------------------------------------------------------------- 883231c05f | advil | 2022-06-08 10:17:55 -0400 fix: reword middle Ru sac level As pointed out in: https://crawl.develz.org/tavern/viewtopic.php?f=8&t=27288 it's a bit hard to figure out whether "significant" or "major" is bigger. (The answer is "major".) I changed "significant" to "medium", which to me reads as both bigger than "modest" and less than "major". -------------------------------------------------------------------------------- 43b9904bd1 | Nicholas Feinberg | 2022-06-07 19:10:39 -0700 Fix Chei + rampaging randarts (dilly) Artefacts with rampage weren't being rejected from acquirement because they weren't ID'd enough. Ridiculous. -------------------------------------------------------------------------------- 2ca5787500 | Nicholas Feinberg | 2022-06-07 16:05:25 -0700 Don't freeze jelly spawns' souls (ebering) Casting simulac on the royal jelly's buddlylings didn't even work. -------------------------------------------------------------------------------- 3b24f45cc1 | Nicholas Feinberg | 2022-06-06 20:47:35 -0700 Make concentrated venom decay over time Looks like an oversight in 6ecf17fd6c (15 months ago). -------------------------------------------------------------------------------- 62b45afb52 | Nicholas Feinberg | 2022-06-06 20:46:07 -0700 Allow raising invisible foes from the dead (ebering) Also allow raising simulacs from out of LOS. -------------------------------------------------------------------------------- 81b289dbe5 | Neil Moore | 2022-06-05 05:43:12 -0400 Simplify slightly -------------------------------------------------------------------------------- cc0464ae43 | Edgar A. Bering IV | 2022-06-05 11:00:37 +0300 text: list kiku gift spells in the description -------------------------------------------------------------------------------- ffc1d7fb78 | Nicholas Feinberg | 2022-06-04 16:47:50 -0700 Fix webtiles monster descriptions Broken by new status icons. -------------------------------------------------------------------------------- 81e455f4c2 | advil | 2022-06-04 17:59:13 -0400 fix: prioritize non-removed species for species::from_str_loose The main effect of this is that &rorc in wizmode turns you into a hill orc, not a lava orc. (You can still use exact strings to get the removed species.) -------------------------------------------------------------------------------- e87547aa71 | advil | 2022-06-04 17:59:13 -0400 fix: move a bunch of option defaults out of dat/defaults I would prefer if only lua options had their defaults set in these files. We are a ways from there but these two really don't need to be done in an include; one of them even had its default split between c++ and the include. Everything that is left here is either lua or a text_pattern (where for reasons I haven't discerned, text_pattern defaults never seem to be set in c++). -------------------------------------------------------------------------------- 32f4ba3753 | Nicholas Feinberg | 2022-06-04 14:27:25 -0700 Turn off explore_auto_rest for Meteorans It's usually better to keep moving. -------------------------------------------------------------------------------- 8f12ed8835 | Nicholas Feinberg | 2022-06-04 14:23:59 -0700 Fix the build oops -------------------------------------------------------------------------------- 3a238a73d9 | Nicholas Feinberg | 2022-06-04 14:21:48 -0700 End the terror of tentacle segment zombies Too spooky...................... -------------------------------------------------------------------------------- 1c0eb391a4 | Nicholas Feinberg | 2022-06-04 14:18:25 -0700 Fix sprint combo bans Don't display delver in the jobs list if you haven't chosen a species yet, and don't allow Meteoran at all. (Sprints have no zot clock.) -------------------------------------------------------------------------------- 10a518f58f | Nicholas Feinberg | 2022-06-04 13:56:02 -0700 Add many new status icons (Sastreii) - Antimagic - Concentrated Venom - Dazed - rF- (fire vuln) - Partially & fully charged (floating eyes) - Injury Bond - Repel Missiles - Simulacrum - Still Winds - Waterlogged (phial) - Weakened Whee! -------------------------------------------------------------------------------- 05c506a3cf | Nicholas Feinberg | 2022-06-04 13:56:02 -0700 Store tile icons as a list We'd run out of space in a 64-bit int to store more status icons for tiles, and we want a bunch more! Turn em into a list. -------------------------------------------------------------------------------- 075992c915 | advil | 2022-06-02 15:01:32 -0400 fix: don't wipe out Ru muts with change_species_to This code was promoted from a wizmode function, where things didn't need to be absolutely perfect, to being used in fixups. Among other issues, it overlooked Ru sacs, which are implemented as innate mutations. I'm not perfectly confident that the following code won't mess with sacs in some way I don't understand, but this fix works for the straightforward cases. -------------------------------------------------------------------------------- af1fc19f1b | advil | 2022-06-01 17:55:51 -0400 fix: tiles umbra/halo interactions This logic is exactly copied from showsymb.cc (this was working for console) minus the silence stuff. Resolves #2561 -------------------------------------------------------------------------------- bfd55560d8 | advil | 2022-06-01 16:58:58 -0400 fix: a tag major upgrade crash As long as these enum values exist, we apparently need to give them a color. (I haven't looked very deeply into why.) -------------------------------------------------------------------------------- da7b1fbfba | advil | 2022-06-01 16:44:43 -0400 fix: misc tag upgrade things visible locally, but not in CI -------------------------------------------------------------------------------- cd130a58c2 | advil | 2022-06-01 16:37:08 -0400 fix: remove halfling -------------------------------------------------------------------------------- 223e3869e7 | advil | 2022-06-01 16:14:08 -0400 fix: tag major #ifdefs for aptitudes.h This was apparently never implemented, but didn't matter. I don't know why this didn't break before. -------------------------------------------------------------------------------- a137e16256 | advil | 2022-06-01 15:41:03 -0400 fix: major tag bracketing for removed species Now that this enum is not fully conditionalized, specific removed species need to be marked for the tag upgrade CI test to succeed. -------------------------------------------------------------------------------- 5014999b08 | advil | 2022-06-01 14:27:52 -0400 fix: default `create_enum` to false in species gen As recently discovered, alphabetically generating an enum that is serialized as a number is a really bad idea if you want to preserve any sort of save compatibility. Disable by default the enum-generating option for species_gen.py, and adjust docs and yaml files accordingly. I considered removing this option entirely but it may be useful for less experience coders playing with the code, if you're just adding one species in a private fork (or don't care very much about your players' save files) it's fine/useful. This only didn't come up between 2018 and now out of sheer luck; Dj reused an existing hardcoded enum value, Gn and Pa's alphabetical order matches the order in which they were added, and My didn't exist for long enough for the bug to get noticed (or reported, at least). I think everything else has been a revamp or removal. -------------------------------------------------------------------------------- 26aeb8ffec | advil | 2022-06-01 12:25:49 -0400 fix: avoid a potential divide by 0 error The calc_hp code can be triggered during fixups, at a point where hp_max (which is recalculated on load during _post_init) is not yet set, causing a divide by 0 error. Just skip the rescaling for this case. Also add an explicit dprf for species changes. -------------------------------------------------------------------------------- 200812b14b | advil | 2022-06-01 11:41:13 -0400 fix: pa/me/my fixup fix (real) fa20dd96a133 fixed meoteoric Pas correctly, but turned Me into My (with Me muts at least). This commit fixes the original fixup, and adds a new fixup for My generated along the way. -------------------------------------------------------------------------------- dd5a78fe54 | Kate | 2022-06-01 13:01:57 +0100 Don't suppress Meteoran glow in forms The one form where it would make a big difference either way (shadow form) already doesn't suppress glow since it's a form that keeps mutations. Making the glow permanent allows potions/scarves of invisibility to be properly marked as permanently useless, instead of being left on autopickup because they were technically only "temporarily" useless previously. -------------------------------------------------------------------------------- 67b01d5277 | Kate | 2022-06-01 12:47:49 +0100 Mark scarves of invisibility useless when perma-backlit -------------------------------------------------------------------------------- 1b1fc82263 | Kate | 2022-06-01 12:14:08 +0100 Allow ice beast zombies again As natural monsters, they should be zombifiable the same way as other weird-but-living creatures like sky beasts, unseen horrors and jellies are. -------------------------------------------------------------------------------- fa20dd96a1 | Nicholas Feinberg | 2022-05-31 21:17:56 -0700 Stop turning palentongas into meteorans? Try to fix the build. This is very scary code and may be quite wrong. -------------------------------------------------------------------------------- 05f53baf05 | Nicholas Feinberg | 2022-05-31 17:38:00 -0700 Merge deep, mountain and hill dwarves DD were a very cool experiment. By removing passive regeneration, they asked: if misplays in any fight have consequences (HP loss) that extend beyond that fight, does the game become more dynamic and exciting? 'No regen' over time works great in many games - Spelunky, Cogmind, Desktop Dungeons, Slay the Spire, Hoplite, etc, etc. If I were designing a new game today, I'd very likely not have passive regen over time! However, Crawl is designed to have very large numbers of fights in each game, over a time much longer than any of the above games. Playing 'optimally' throughout every fight for a whole game is exhausting! DD largely circumvent their own gimmick by a variety of 'allowed' healing mechanisms - e.g. vampiric weapons, Vampiric Draining, Makhleb, Ru, Elyvilon (if one must), and now Jiyva. The final result is a species that's quite powerful, but enjoyable for only a select few. As such, let's call this experiment to a close. Whisper 'Farewell' when you leave, Dimli... -------------------------------------------------------------------------------- 1352289c90 | Nicholas Feinberg | 2022-05-31 17:37:32 -0700 New species: Meteoran Time pressure often creates exciting gameplay and interesting tradeoffs. Baseline Dungeon Crawl uses the Zot Clock to add a very weak form of time pressure, but there's so much variety between the playstyles of different species and backgrounds that a tight clock for some would be almost impossible for others. So, let's try limiting that gameplay to just one species! Meteorae have an exciting variety of bonuses - great attributes and aptitudes across the board, passive mapping, and exploration healing, regaining HP and MP when viewing new territory. In exchange, they have one big downside: instead of getting 6,000 turns of Zot clock for each floor, they get 600! The big concern here is whether this species can be made fun without also being made wildly, boringly 'overpowered'. Lots of levers and knobs to tweak, so let's give it a shot! Extra notes: - Meteorae are humanoid beings. (In the night sky, they look like dots because they're very far up.) Hat tip to Neil Gaiman's Stardust. - This commit has a silly 'flavour' gimmick where Meteorae's LOS radius decreases by 2 when they have less than 50 turns left of Zot clock, and again when they have less than 10. Darkness is closing in... - Meteorae glow in the dark. Permanent backlit status (not halo!): +enemy to hit, -stealth, disables invis. Suppressed in forms. Seems funny. Credit to hellmonk for the initial version of this species and pushing to make 'em happen. :) -------------------------------------------------------------------------------- 7c30feaf68 | Nicholas Feinberg | 2022-05-31 17:36:39 -0700 Add a description for short-lived -------------------------------------------------------------------------------- 611cb8dbe1 | Nicholas Feinberg | 2022-05-31 17:36:31 -0700 Soften the Zot clock Instant death is something DCSS has flirted with from time to time, and generally ends up steering away from. In a game as long as DCSS, instantly dying from falling into lava is just a bit too cruel. So, too, goeth the Zot clock. Soften it by making it apply extremely heavy drain for the first few hits, roughly 1/3rd of max HP each time. Only at very low max HP will it now kill the player. (I'd wanted to remove this too, but I think Xomscumming would still be possible without it.) After Zot draining, the player gets another 1k turns on the clock (200 for Meteorae). Let's try this out and see how it goes. -------------------------------------------------------------------------------- 4d55d654a6 | Nicholas Feinberg | 2022-05-31 17:08:02 -0700 Crumble Animate Dead zombies on leaving the floor Tragically seemed to only lead to unfun strats. My heart weeps. -------------------------------------------------------------------------------- 81a890a79d | Neil Moore | 2022-05-31 19:11:12 -0400 Update copyright date -------------------------------------------------------------------------------- a956f109cc | Neil Moore | 2022-05-31 19:11:12 -0400 gather_monster: strip backslash-newline in kmons() The Head Instructor definition has an unstripped backslash, resulting in `make monster` giving the error: util/monster/vault_monster_data.h:50:1: warning: unknown escape sequence: '\040' -------------------------------------------------------------------------------- 59ce8b2d47 | Nicholas Feinberg | 2022-05-31 14:01:06 -0700 X Gonna Zombify Ya (Sastreii) New zombie tiles for jellies, orbs and Xs. -------------------------------------------------------------------------------- c852659d43 | advil | 2022-05-30 09:55:12 -0400 fix: handling of animating objects on banishment This reverts an incidental part of df715e3894bdc; after this commit the animating object for dancing weapons was getting unconditionally destroyed on banishment. The ENCH_ABJ check here is necessary to identify animated objects that are temporary but not summoned. In addition, I think it is correct to only set UNIQ_LOST_IN_ABYSS on temporarily animated objects, because otherwise (in principle) duplicates would be possible. I'm not 100% sure that KILL_BANISHED will do something sensible on a temp animated weapon, independent of this codepath though? It may still go on the transit list... -------------------------------------------------------------------------------- 90894fac46 | Neil Moore | 2022-05-30 02:32:10 -0400 Simplify mephitic movement check. Now that there is no damage to worry about (0.28-a0-1521-g870370a84aO) -------------------------------------------------------------------------------- e2af7f97bc | Neil Moore | 2022-05-30 02:14:08 -0400 Finish promoting Sastreeii The commit 0.28-a0-623-g7f772adbe3 neglected to remove them from the (implicitly non-dev) contributors list. Fix that. [skip ci] -------------------------------------------------------------------------------- bdf32494f2 | Neil Moore | 2022-05-29 23:41:05 -0400 Move orbs to lightgrey, animal skins to red. Orbs had the same colour as cloaks and scarves, despite being in a completely different slot. Rather than move orbs to cyan with their slotmates, put them on a mostly-free colour. This requires, or at least suggests, moving the one other lightgrey armour, animal skins, to another colour. Since skins are functionally identical to robes (this is, as far as I know, the only remaining instance of functionally-identical items distinguished purely for flavour reasons), put the two on the same colour. Also move CPA in the relevant switch, to keep the (now fewer) white armours together. -------------------------------------------------------------------------------- 906aab00d3 | Nicholas Feinberg | 2022-05-29 17:25:01 -0700 Remove ice beasts' skeletons -------------------------------------------------------------------------------- 7c1fb6cc08 | Nicholas Feinberg | 2022-05-29 11:16:22 -0700 Fix jelly/orb/orb guardian zombie tiles A bit hacky, but good enough for now. -------------------------------------------------------------------------------- f985e02bcb | Nicholas Feinberg | 2022-05-29 10:46:17 -0700 Dispel with the illusion of zombies Don't allow insubstantial zombies, e.g. player illusions. (Arguably those should be MH_NONLIVING anyway.) -------------------------------------------------------------------------------- e4dad5d916 | advil | 2022-05-29 13:12:52 -0400 refactor: remove mons_zombifiable 88678701b151 made this equivalent (indirectly) to mons_class_can_be_zombified, and I'm now pretty sure this is correct. The only reason that has come up to have them distinct is to allow some kinds of monsters to place in vaults but not generate randomly, but this can also be accomplished by setting the M_NO_GEN_DERIVED flag, so the only function of both of these existing at this point is confusion. Also removes a bunch of lua stuff that I think is now useless since corpses are purely cosmetic; if I'm wrong it's easy enough to revert. Possibly what is needed is now similar functions that act on monsters? -------------------------------------------------------------------------------- f59ac788ac | Nicholas Feinberg | 2022-05-28 17:25:58 -0700 Fix stab logging with spriggan's knife (Rhaal) -------------------------------------------------------------------------------- a64e7d0afd | Nicholas Feinberg | 2022-05-28 17:12:25 -0700 More body mutation tiles (Sastreii) Large bone plates, sharp scales, and thin skeletal structure. -------------------------------------------------------------------------------- 343b47744d | Nicholas Feinberg | 2022-05-28 17:12:25 -0700 Add missing Bearserk description -------------------------------------------------------------------------------- 793eeb5391 | advil | 2022-05-28 14:34:57 -0400 fix: some issues for shops you aren't in Don't show purchase costs, don't allow marking items for purchase. Shopping list is still editable, but `$` is disabled. (You can view shops in this mode via stash search.) -------------------------------------------------------------------------------- 901c68f7c3 | advil | 2022-05-28 12:30:32 -0400 fix: incremental shopping menu improvements This menu is still incredibly confusing, but here are a few tweaks. * when in describe mode, enter on a hovered item describes it, keyhint changes correspondingly * the purchase keyhint disappears when nothing is selected * the cost hint accurately reflects when you are purchasing the shopping list items. Missing: * the difference between shopping list items being selected and regular items being selected is very confusing * keyhints for `$`, `.` * hover-based way of interacting with shopping list * should `.` have mode-sensitive behavior? * use general menu keyhint code, instead of custom more -------------------------------------------------------------------------------- 711e9a50b0 | Kate | 2022-05-28 17:15:28 +0100 Update some Kiku descriptions (#12703) -------------------------------------------------------------------------------- a2e7fffb44 | Nicholas Feinberg | 2022-05-27 17:28:32 -0700 Add tiles for ?/U (mutation lookup) -------------------------------------------------------------------------------- 99dc0984f0 | Nicholas Feinberg | 2022-05-27 17:22:06 -0700 Add the ultimate big brain meme (Sastreii) Average Chei fan vs average !mutation enjoyer..? -------------------------------------------------------------------------------- ec6baf379c | Nicholas Feinberg | 2022-05-27 14:28:43 -0700 Add mutation lookup -------------------------------------------------------------------------------- 5bb2ffafd0 | Kate | 2022-05-27 19:51:12 +0100 Prevent some unsuitable monster skeletons -------------------------------------------------------------------------------- 6e53cefa51 | Kate | 2022-05-27 19:02:44 +0100 Remove an unnecessary non-flag -------------------------------------------------------------------------------- 50bc209b2e | Kate | 2022-05-27 19:01:19 +0100 Allow shapeshifter zombies Fixes a build failure, since a vault relies on them working. Historically shapeshifter zombies have been allowed to be placed by vaults or reanimated by the player, but didn't generate randomly (which they now will). -------------------------------------------------------------------------------- 88678701b1 | advil | 2022-05-27 13:33:42 -0400 fix: prevent zombifying various undead (Rhaal) Also shapeshifters. As the comments note, I'm fairly unsure of what the division of labor is supposed to be for the relevant zombification functions so I haven't collapsed anything (though I believe it would be safe to if this commmit is correct). -------------------------------------------------------------------------------- e94edfd80f | advil | 2022-05-27 12:07:01 -0400 fix: header build tests Needed to ensure tileidx_t is defined for the new mutation icon function. Also fixed a few misc warnings I noticed. -------------------------------------------------------------------------------- e007cd9fbb | advil | 2022-05-27 11:01:12 -0400 fix: typo Hadn't saved the file -------------------------------------------------------------------------------- b6e6f924de | advil | 2022-05-27 10:58:46 -0400 fix: prevent another player tile crash (Aliscans) See #2544 -------------------------------------------------------------------------------- 281f2b06d5 | gammafunk | 2022-05-27 03:30:13 -0500 fix: Correct a Makefile variable (Goratrix) A typo was introduced in 08a933d9 that broke compilation on some platforms. -------------------------------------------------------------------------------- 17b79114eb | Nicholas Feinberg | 2022-05-26 20:23:57 -0700 Display mutation tiles in-game (Sastreii) Sweet! -------------------------------------------------------------------------------- 08a933d9be | Nicholas Feinberg | 2022-05-26 20:23:57 -0700 First mutation tiles (Sastreii) Scales, fangs & clarity. Not yet supported in-game. -------------------------------------------------------------------------------- 10c3c7b3e5 | gammafunk | 2022-05-26 18:07:26 -0500 fix: Prevent teleports into a closet (Sergey) For evilmike_makhleb_hellhole, the chamber with neutral humans sealed by an iron grate needs `no_tele_into`, in case one teleports inside and has no digging. -------------------------------------------------------------------------------- 10b964d8d7 | Kate | 2022-05-26 17:28:12 +0100 Actually allow all natural monsters to be zombified Without crashing on reading des files this time - non-natural monsters with corpses (such as pearl dragons and demonic crawlers) can still also be zombified. -------------------------------------------------------------------------------- ac2d4088d3 | advil | 2022-05-26 09:42:56 -0400 fix: disallow player tile mons:dancing_weapon This crashes. For some animated objects you can still set a tile like `tile_player_tile = tile:mons_spectral_lbl`, but this unfortunately isn't available for dancing weapons proper. It seems reasonable (at some level) to implement this but I won't be doing it myself right now. Probably the simplest thing would be to just add some dancing weapons to the player tile name pairs? (Implementing a full on dancing weapon tile mode is much more annoying, because dancing weapons set their tiles based on a real item that is technically in their inventory.) resolves #2544 -------------------------------------------------------------------------------- 77b3608bb8 | Nicholas Feinberg | 2022-05-25 16:29:21 -0700 Revert "Allow all natural monsters to be zombified" Broke the build. TODO: unrevert me. This reverts commit 2245875f922b5f5f3da7fd50e32a253ad6a85885. -------------------------------------------------------------------------------- 7bd733b9cc | Kate | 2022-05-25 23:10:23 +0100 Fix a compiler warning (shadowed params) -------------------------------------------------------------------------------- 2cb01fd4ca | Kate | 2022-05-25 22:52:50 +0100 Don't allow derived undead with no attacks Require monsters to at least have an attack of some sort to be able to be zombified, or to have either an attack or some spells to be a Yredelemnul bound soul. -------------------------------------------------------------------------------- 2245875f92 | Kate | 2022-05-25 21:45:51 +0100 Allow all natural monsters to be zombified Whether or not a monster leaves an actual corpse item is now purely cosmetic, so there's no small arbitrary set of otherwise-living monsters (eg unseen horrors, orb guardians) that Animate Dead doesn't work on. -------------------------------------------------------------------------------- a88943ba61 | Kate | 2022-05-25 21:15:22 +0100 Fix Simulacrum not working on demons It could be cast on them, but wouldn't actually do anything. To be fully consistent with its lore and with Death Channel's behaviour, let it work on any monster with a soul (all natural, demonic and holy monsters, including natural monsters with no corpses). -------------------------------------------------------------------------------- 12ac202842 | advil | 2022-05-25 13:00:42 -0400 fix: save after world_reacts on level entry There's a save call in `floor_transition`, and a new level is saved on generation. However, these save states are not at a point where the player can ever have control over the game, because there's always a following world_reacts cycle. Because of this, if a crash happens after these saves but before a real save, the game is rolled back to a time that is impossible to get to in any other way -- time 0 after level entry. This is the bug discovered by personjerry and mentioned in f3dacdeeaaba2. To be clear, it's *not* (imo) a bug that you can roll back time by intentionally force quitting or killing a local game in this way, that's just a variant of ordinary savescumming -- this commit doesn't prevent using force quits to roll back time[1]. But what it does ensure is that a crash rolls back time to a possible game state. The implementation is very brute force and adds Yet Another Bool to `crawl_state`. Along the way I fixed what I think is a bug in sprint save checkpoints -- the level state wouldn't get saved, so a crash in sprint could at least in principle lead to a save with a very inconsistent player / level state. As a side note, the fact that outside of regular save+quit the player and the level are typically saved independently (something I hadn't grasped before this fix), could lead to all sorts of other weirdnesses on crash. [1] This could be desireable but it's not entirely clear to me how to do it, and it's also quite platform-specific. -------------------------------------------------------------------------------- 0e957ee05f | advil | 2022-05-25 07:58:56 -0400 Revert "Revert "Make new stairs fast after crashing (advil)"" There's a bug here, which is that the game state is saved before stair travel time (as well as seen_monsters_react) is applied, but this happens independently of this flag, and so this revert did not fix it. So killing the crawl process, forcing a crash, immediately after stair descent always rolls back whatever stair time there was as well as the initial hits. Also possibly a bug that the crash isn't saving? I'm not sure why it wouldn't. Also, I kind of want to say that force-quitting a local game is essentially a form of save-scumming and so I'm slightly mixed on whether this is really what I'd call a bug. This reverts commit f3dacdeeaaba24e7937b459bf04e6c4ca36dcd6f. -------------------------------------------------------------------------------- 69413ace17 | Nicholas Feinberg | 2022-05-24 20:56:20 -0700 Make the simulacrum targeter smarter (CarefulOdds) Only target valid enemies. -------------------------------------------------------------------------------- 771e844529 | Nicholas Feinberg | 2022-05-24 20:42:02 -0700 Remove prompt for inner flaming friendlies You want to set your friends on fire? Go wild, bud. -------------------------------------------------------------------------------- 34935aedf5 | Nicholas Feinberg | 2022-05-24 20:40:15 -0700 Make the inner flame targeter smarter No targeting will-immune guys, etc. -------------------------------------------------------------------------------- f3dacdeeaa | Nicholas Feinberg | 2022-05-24 20:06:42 -0700 Revert "Make new stairs fast after crashing (advil)" As personjerry notes, this allows quick-moving players to cheat and get fast stair descents by force-quitting the game. I wouldn't have believed it if I hadn't seen it! This reverts commit 653eee55725701cece7eb2daeb7dd585f623eeee. -------------------------------------------------------------------------------- 93865b4adf | Nicholas Feinberg | 2022-05-24 18:04:02 -0700 Allow casting simulacrum on demons (kate, ardl) Consistent with Death Channel. -------------------------------------------------------------------------------- 6d556a0ce6 | Nicholas Feinberg | 2022-05-24 17:06:14 -0700 Ban very low enchantment randart armour It's sort of funny to generate a -7 randart barding, but it's never ever getting worn. Floor it at -2, in the spirit of the hat of the Alchemist. -------------------------------------------------------------------------------- 62b78b4225 | Nicholas Feinberg | 2022-05-23 21:19:21 -0700 Simplify Death Channel (Monkooky) Remove the ability to recast while the duration is active, forcing all specters to expire before you can get a fresh batch. This should hopefully make gameplay with it a little more dynamic, and also improve UI a bit - you no longer need to remember to recasting when the expiration message appears. It still seemed quite strong in testing, but other adjustments can always be made if need be. -------------------------------------------------------------------------------- 78b83d787e | Nicholas Feinberg | 2022-05-23 21:07:44 -0700 Let death channel work with enemy necromancy Simpler to have it work with all corpse-eating effects. -------------------------------------------------------------------------------- e40278f558 | Nicholas Feinberg | 2022-05-23 21:04:18 -0700 Increase Necrotize skeleton duration Try to make em a little more relevant. -------------------------------------------------------------------------------- dfe5cd140f | Nicholas Feinberg | 2022-05-22 20:45:33 -0700 Reorganize necromantic effects Make Infestation consume corpses. The only Necromancy spells that stack are now Death Channel + one of (Infestation, Simualcrum, Animate Dead, Necrotize) + Corpse Rot. TODO: we should make necromancy spells that consume corpses still give out monster organs (eg dragon armour) as appropriate. -------------------------------------------------------------------------------- acb4ef3bc5 | Nicholas Feinberg | 2022-05-22 07:21:09 -0700 Vulnerability, anguish, and decay (Sastreii) New tiles for the amulet of Elemental Vulnerabilty, Anguish, and Necrotize. -------------------------------------------------------------------------------- e5599a681e | Nicholas Feinberg | 2022-05-21 22:19:03 -0700 New early-game fixedart: the amulet of Elemental Vulnerabilty AC+8, rPois, rC--, rF--. Would you wear it? I would :) -------------------------------------------------------------------------------- 88dec836d1 | Nicholas Feinberg | 2022-05-21 21:56:30 -0700 Remove Pain (Lightli) Update the Necromancer background description. -------------------------------------------------------------------------------- 9071f44f2d | Nicholas Feinberg | 2022-05-21 21:13:30 -0700 Release the God of Metal (Sastreii) New Kiku invo tiles. -------------------------------------------------------------------------------- d254ca66d9 | Kate | 2022-05-21 13:16:41 +0100 Fix some commas in unrand inscriptions Remove Damnation's comma (it was trimmed out anyway due to not having any other properties) and give it to Condemnation. -------------------------------------------------------------------------------- e57f7f99b4 | Nicholas Feinberg | 2022-05-20 17:17:11 -0700 Remove condemnation fallback (advil, gammafunk) No need to special case this - it's ok to very rarely generate randart trishulas. -------------------------------------------------------------------------------- e4d8c67b05 | Nicholas Feinberg | 2022-05-20 17:03:32 -0700 Finish shortening Condemnation's name oops -------------------------------------------------------------------------------- ca8cdc03c0 | Nicholas Feinberg | 2022-05-20 17:02:39 -0700 Clarify Condemnation's holiness Remove skip_ego and remove the 'Barbs of' to make space. -------------------------------------------------------------------------------- 48891804b8 | Nicholas Feinberg | 2022-05-20 17:01:56 -0700 Condemn some placeholder dev tiles (Sastreii) New tiles for the trishula "Condemnation". -------------------------------------------------------------------------------- 50448035db | Nicholas Feinberg | 2022-05-20 09:10:19 -0700 Tweak Condemnation lore Clarify in the weapon description why it inflicts anguish (thematically), and move the noises further in line with the lore. -------------------------------------------------------------------------------- df083b7a6e | Nicholas Feinberg | 2022-05-20 07:09:34 -0700 Add missing Condemnation doll tile -------------------------------------------------------------------------------- f74b082263 | advil | 2022-05-20 09:34:20 -0400 fix: correct weapon stats for UNRAND_WOE The description was showing numeric stats for a regular exec axe. Also, fix an unrelated ∞. At this point all ∞s besides those in art-data.txt are correctly conditionalized. -------------------------------------------------------------------------------- e4767303ab | advil | 2022-05-20 09:34:20 -0400 fix: conditionalize a few more ∞s -------------------------------------------------------------------------------- a9ffdc3c7e | Nicholas Feinberg | 2022-05-20 05:57:51 -0700 Remove an accidental addition -------------------------------------------------------------------------------- 97dee8cd24 | Nicholas Feinberg | 2022-05-19 21:58:38 -0700 New unrand: the trishula "Barbs of Condemnation" The weapon of a long-gone archangel of judgment, this is a +8 trishula that inflicts 4-8 turns of Anguish on hit. (That is, victims have their damage mirrored back to them.) It also gives flying, rN+, and makes angel noises. Fun! It's a one-hander so that the anguish damage is more relevant (rather than the weapon damage more quickly & directly murdering everything), a polearm to synergize with allies, and a trishula for thematic & mechanical variety. (We already have a perfectly good demon trident unrand.) For more details, please read the description of Barachi in the Crawl manual. -------------------------------------------------------------------------------- 5c6f5cd5d9 | Nicholas Feinberg | 2022-05-19 21:38:24 -0700 Actually decay anguish over time ??oops -------------------------------------------------------------------------------- 93c1fc3693 | advil | 2022-05-19 20:47:50 -0400 fix: remove wrong comment, use "inf" (PF) -------------------------------------------------------------------------------- 667b474bfb | advil | 2022-05-19 20:41:17 -0400 fix: respect char_set=ascii in hud We've been using ∞ to indicate immunity for a while now, but this was shown even if the player tried to force ascii. I chose `!` semi-arbitrarily as potentially indicating the right thing, maybe there's better options. -------------------------------------------------------------------------------- 96ad54b138 | advil | 2022-05-19 18:11:32 -0400 feat: use .tsv for objstat outputs instead of .txt These already are tsv files, and using the extension makes it easier to auto-open them in a spreadsheet app and so on. This change approved by gammafunk(tm). -------------------------------------------------------------------------------- 53bdb1016d | advil | 2022-05-19 18:06:05 -0400 fix: tweak precision for NumOOD in objstat These are reporting rare enough events that with just to digits of precision, a lot of stuff that is non-0 shows up either as 0.00 or 0.01. An extra digit on top of the default seems to be enough that most values can be compared when working in the 1000 iters range. -------------------------------------------------------------------------------- f113fcf677 | advil | 2022-05-19 16:55:32 -0400 feat: add some monster OOD info to objstat The relative depth values correlate with this, but it's interesting and potentially useful to pull out OOD info specifically. At the moment for large iters, the NumOOD field very rarely exceeds 0.01 for individual monsters that do place in my testing, so I may need to tweak this further for it to be useful. -------------------------------------------------------------------------------- 763a1779be | advil | 2022-05-19 11:14:18 -0400 feat: add some basic monster depth info to objstat Two new fields derived from mon-pick-data.h. These are a bit rough but still informative in my testing. RelativeDepth: the current depth minus the average depth based on regular placement tables. So more negative is more out of depth, more positive is more under depth. So for example a fire dragon placing on D:9 gets RelativeDepth -11, because its average placement (rounded) is 20. Out-of-branch monsters get 0 for this, so the following Num stat is what is used to calculate the average. NumInBranch: Counts monsters that are generated by the regular branch placement tables. For individual monsters, this will either be the total count or 0. (Maybe NumOutOfBranch would be more useful as a directly viewable stat?) A few caveats: neither uniques nor derived undead ever count as in-branch. I did it like this because there is already an average function, but it might also or instead be nice to have an explicit OoD number, maybe something like the closest depth range edge minus current depth. E.g. the fire dragon in the example above is also over-OoD, because its minimum placement is D:14 (placed by a vault), and this is a bit hard to directly reconstruct. Maybe later. -------------------------------------------------------------------------------- fbfa42419e | Nicholas Feinberg | 2022-05-18 14:35:18 -0700 Fix corpse description (Lightli) -------------------------------------------------------------------------------- f02deff4a7 | advil | 2022-05-18 16:25:48 -0400 refactor: convert `pregen_dungeon` to enum, clean up parsing This option was previously implemented with the double bool for three values strat; this converts it to a 3-valued enum and uses this to clean up the parsing code as well. Sort of annoying to have yet another tiny little enum.h around, but I guess that's what we do. -------------------------------------------------------------------------------- 9e3099983f | Nicholas Feinberg | 2022-05-18 12:42:42 -0700 Remove Animate Skeleton's remains Just a few spare leg and arm bones floating around. -------------------------------------------------------------------------------- a536a90030 | Nicholas Feinberg | 2022-05-18 12:38:31 -0700 Remove excruciating wounds The description. -------------------------------------------------------------------------------- aae9a6c917 | Nicholas Feinberg | 2022-05-18 12:36:35 -0700 Fix OOD fuzzing Broken in 18a14b5c600 (almost exactly a year ago) to *not* weight away from the edges. Oops! -------------------------------------------------------------------------------- 3b62d05871 | Kate | 2022-05-18 19:01:44 +0100 Apply coding conventions -------------------------------------------------------------------------------- e11e1e56b0 | Kate | 2022-05-18 19:01:18 +0100 Fix Corpse Rot's description for !cancellation And clarify a comment to explain why short_text needs to be in adjective form. -------------------------------------------------------------------------------- 0f0961c20d | Kate | 2022-05-18 18:48:17 +0100 Give Unearth Wretches an ability targeter -------------------------------------------------------------------------------- ed0ba456c6 | advil | 2022-05-18 11:41:36 -0400 fix: remove some unused functions (Goratrix) -------------------------------------------------------------------------------- 5dfcd41d59 | Nicholas Feinberg | 2022-05-18 07:07:00 -0700 Ban anime zombies from attacking outside LOS, again -------------------------------------------------------------------------------- ef7be07a3d | Nicholas Feinberg | 2022-05-18 07:07:00 -0700 Update kiku desc -------------------------------------------------------------------------------- eecb74a380 | Nicholas Feinberg | 2022-05-18 07:07:00 -0700 New Kiku ability: Unearth Wretches Replacing corpse drop, this summons a few wretched, near-death souls for you to practice necromancy on. They're zero XP, paralysed, 1 HP, 0 will, and die in a few turns. Rough! -------------------------------------------------------------------------------- c36bb38398 | Nicholas Feinberg | 2022-05-18 07:07:00 -0700 Retheme simulac -------------------------------------------------------------------------------- 9dfb08f9a7 | Nicholas Feinberg | 2022-05-18 07:06:57 -0700 Re-rework animate dead Make the zombies unlimited duration, but have them crumble when the caster re-casts this spell. This is intended to avoid the boring play pattern of repeatedly casting the spell at the start of every fight, and to encourage somewhat more dynamic and fun decision-making. Also reduce power scaling to make the spell more usable by 'hybrids'. -------------------------------------------------------------------------------- 3a8266931e | Nicholas Feinberg | 2022-05-18 07:06:27 -0700 Fix some animate dead issues Re-add messages and fix a bug where enemies would create hostile zombies while animate dead was active. Also add simulac messages and tweak necrotize skeleton messages. -------------------------------------------------------------------------------- b89b5c0cdd | Nicholas Feinberg | 2022-05-18 07:06:27 -0700 Ban Gozag from animating gold corpses -------------------------------------------------------------------------------- 20812cadf4 | Nicholas Feinberg | 2022-05-18 07:06:27 -0700 Apply refactoring & fixes to all on-death necromancy effects -------------------------------------------------------------------------------- ef05d3b997 | Nicholas Feinberg | 2022-05-18 07:06:27 -0700 Update Kiku description -------------------------------------------------------------------------------- 5cd8600749 | Nicholas Feinberg | 2022-05-18 07:06:27 -0700 Move Tukima's Dance from Maledictions to Weapons Purely vibes-based change. -------------------------------------------------------------------------------- 14519f8a5a | Nicholas Feinberg | 2022-05-18 07:06:27 -0700 Remove the Book of Pain Gutted. -------------------------------------------------------------------------------- 1025688b39 | hellmonk | 2022-05-18 07:06:27 -0700 Rearrange kiku spell gifts -------------------------------------------------------------------------------- 2fcf5398dd | hellmonk | 2022-05-18 07:06:16 -0700 Kiku duplicate undead passive To replace corpse drop, give Kiku a piety-dependent chance to grant an extra ally each time one would be generated from a necromancy spell or the reaping brand. This applies to all of the derived undead spells and infestation, and simulacrum rolls independently for each simulacrum generated. Starts off at about 14% chance at 30 piety and rises linearly to 25% at max piety. -------------------------------------------------------------------------------- cdf6c57b5d | hellmonk | 2022-05-18 07:06:07 -0700 remove kiku corpse drop -------------------------------------------------------------------------------- 8cd6c6eb39 | hellmonk | 2022-05-18 07:06:07 -0700 Remove excruciating wounds It outlived warp weapon by more than 5 years, somehow. -------------------------------------------------------------------------------- 613369fe0c | hellmonk | 2022-05-18 07:06:04 -0700 feat: Replace pain/aniskele with Necrotize New level 1 spell, identical damage/range/etc to pain. No self damage. On damaging a skeleton-having monster, applies a 10 aut status that animates its skeleton on death with a summon duration of 2. This should, I think, be limited enough to work without being overpowered but may need further adjustment. WL check plus low damage should keep it from being a good use of a turn past the relatively early part of the game. Necrotize -> make a skeleton -> can't hit the next guy behind it may not feel very good, so could try some kind of random targeting with less range. -------------------------------------------------------------------------------- 38ecc28c78 | hellmonk | 2022-05-18 07:02:25 -0700 feat: Rework corpse rot Apply the effect on kill for a duration, scaling with power. Tentatively moved to level 4 necro/poison/air. Plenty of room to toggle here. -------------------------------------------------------------------------------- a05d3bcdc0 | hellmonk | 2022-05-18 07:02:25 -0700 feat: rework simulacrum Simulacrum is now a smite-targeted spell that places an irresistable status. A monster that dies with the status will spawn a power-dependent number of simulacra (no longer depends on monster size). I think this is enough of a difference to distinguish it from dchan and infestation. Desperately needs a status icon and better lore. -------------------------------------------------------------------------------- 8cec33880d | hellmonk | 2022-05-18 07:02:25 -0700 feat: Rework Animate Dead Move this spell toward a dchan-like model. For the duration of the effect, monsters with corpses have power dependent chance to become zombies. Duration also scales with power, and the zombies crumble when the effect ends. Numbers very preliminary. -------------------------------------------------------------------------------- 653eee5572 | Nicholas Feinberg | 2022-05-18 06:29:49 -0700 Make new stairs fast after crashing (advil) If you crash while descending the stairs into a new level, you should still have a 'fast' descent rather than a 'slow' one. -------------------------------------------------------------------------------- afbd6decc1 | Nicholas Feinberg | 2022-05-17 22:15:05 -0700 Make it fast to enter new stairs (catern) Historically, it's been twice as fast to enter new levels as to re-enter old ones. Fast entries made players die in surprising ways less often when entering new floors, and slow re-entries provided valuable discouragement to "stair-dancing". However, they also produced some big feel-bad moments when players got clobbered while taking new stairs to a new level - "I thought I was safe the first time I took the stairs!" Align things a bit more with player intuitions by making it faster to take stairs (or trapdoors, or shafts) that the player does not know the destination of, instead of basing it on whether the level is 'new'. -------------------------------------------------------------------------------- ecc9850ee1 | Nicholas Feinberg | 2022-05-17 22:08:15 -0700 Move an orphaned boolean Looks like this got split up for no good reason at some point. -------------------------------------------------------------------------------- 57f2fb0196 | Nicholas Feinberg | 2022-05-17 21:13:22 -0700 Make D shafts even nicer 5c17abdc72d04c8214fdcadc9cb7d8cf9756b66e used felid revival logic to place the player after a shaft, but that logic was not very good at placing the player out of sight of enemies. Write some new logic. (Perhaps we should change felid revival instead..?) -------------------------------------------------------------------------------- 77450f2105 | Nikolai Lavsky | 2022-05-17 09:45:49 -0400 fix: restore scroll-swinging and scroll-tossing speed (12701) After a8e9c987b8, scroll-swinging takes 3 auts instead of 15 auts. Also, the speed of tossing items depends on the wielded weapon and can be slowed by armour instead of being 15 auts. This commit restores the old speeds. -------------------------------------------------------------------------------- c0181ea820 | advil | 2022-05-16 13:21:45 -0400 fix: rewrite webtiles menu pgup/pgdn This was previously a bit of a mess; the behavior of the two was almost never symmetric, and there were all sorts of messy interactions with headers (because they are rendered in a smaller font). This rewrite doesn't solve everything but it generally has much better behavior on both of these points. * refactor so that these are largely using shared code, making symmetry much easier * redo pgup to use set_bottom_visible rather than do an ad-hoc size calculation (that was also wrong). This makes it much closer to how pgdn is implemented. * when recalculating hover after paging, ignore headers. This overall leads to much more consistent behavior. (Though it still has some weird cases..) N.b. possibly this should be ported to local tiles too, but in practic local tiles paging (which uses a different approach) is less susceptible to these issues. Alternatively, webtiles paging could get the local tiles algorithm, which scrolls by pixels? * heuristics for hover at the end Also fix a bug for menu.last_visible calculation with size 1 menus. -------------------------------------------------------------------------------- a44e0411cd | advil | 2022-05-16 13:07:18 -0400 fix: improve local tiles menu pgup/pgdn This tweaks local tiles paging in menus to be more consistent in various ways. Main changes: * use top of menu items, not bottom, to calculate first visible. (I've never understood why it was implemented the other way, so hopefully this doesn't break some case I haven't thought of..) * halve the impact of the shade on scrolling margin, tweak the shade's alpha value * ignore initial visible headers in preserving relative hover for pgup/pgdn * preserve a scroll context that is 1.5x the max line height when scrolling via pgup/pgdn (previously there was no context except as a side effect of the shade). This resolves #2515 This mostly won't affect console, except for the header change (which should be an improvement). -------------------------------------------------------------------------------- 83a48905f1 | advil | 2022-05-15 16:13:17 -0400 fix: really old save compat for random draconians debd2d6947 and f64331b8c2b added new RANDOM_ monster types without save compat for random draconian placement types used in zigs. A save that crashed while generating a zig level before these commits would (following these commits) then crash while trying to generate the zig level, because the random monster types are no longer valid. This commit is quite approximate, but handles the crash seen in a save here: https://crawl.develz.org/mantis/view.php?id=6308 (As of this commit, this save no longer crashes.) -------------------------------------------------------------------------------- 12f7694b2d | advil | 2022-05-15 14:51:06 -0400 fix: repair an ancient fixup In current dcss, NUM_BOOKS drastically exceeds MAX_SUBTYPES. This doesn't matter, because nothing (after this commit) assumes that books are relevant to MAX_SUBTYPES, and this is why (I'm assuming) there was no prior COMPILE_CHECK for this case. However, this one fixup assumed that there were enough force_autopickup slots that there was a value for NUM_BOOKS, leading to a crash on saves from this era. It's possible that MAX_SUBTYPES should be increased to prevent future confusion, but I instead just added a COMPILE_CHECK to validate the specific assumptions current force_autopickup needs, and changed the fixup. Found via the save in: https://crawl.develz.org/mantis/view.php?id=6308 (though this isn't either of the crashes noted there) -------------------------------------------------------------------------------- 5075937ec3 | Kate | 2022-05-14 12:21:03 +0100 Fix compilation -------------------------------------------------------------------------------- 559d8e5bd9 | Nicholas Feinberg | 2022-05-13 22:12:58 -0700 Fix felid zot death message You didn't enter a new level -------------------------------------------------------------------------------- fc8527a98e | Nicholas Feinberg | 2022-05-13 22:12:58 -0700 Warn while resting and bezotted -------------------------------------------------------------------------------- f845f52a54 | Nicholas Feinberg | 2022-05-13 22:12:58 -0700 Make zot death messages more exciting -------------------------------------------------------------------------------- 9596d59a08 | advil | 2022-05-13 16:55:55 -0400 fix: mark closets as notele in ossuary_zaba_flooded This is a bit of an overkill / quick fix, in that (as far as I can tell) closets generated by the flooding algorithm here are guaranteed to be deep water, and so marking all deep water as notele seems to do the trick. Probably it would be better if this algorithm didn't generate closets at all, but someone would have to understand it to fix that. Relevant mainly to species that can inhabit deep water of course. Recently trapped a player in: https://cbro.berotato.org/morgue/pigah/morgue-pigah-20220513-145335.txt -------------------------------------------------------------------------------- d843f3a48c | Nicholas Feinberg | 2022-05-12 13:42:24 -0700 Trigger riposte on blocks Historically, one of the issues with riposte was that it interacted poorly with shields. Shield blocks triggered before dodges, so they made riposte less effective. We didn't want to make riposte trigger on blocks, for both power level concerns and worries about diluting the focus of the mechanic (toward "dex-centric", dodgy characters). But now riposte is unrand only, so we can go wild! This should avoid feel-bad shield/riposte interactions going forward. -------------------------------------------------------------------------------- 6c28700d94 | Nicholas Feinberg | 2022-05-12 13:30:57 -0700 Increase 'large' species shield aptitudes Following 7b68f1b707db and ffcb275ae500, 'large' species ended up substantially worse at using shields than before. Increase their Shields aptitude by 1 point (14%) to compensate. This affects trolls, ogres, nagas, palentongatrices, and formicids. -------------------------------------------------------------------------------- 477518b81c | advil | 2022-05-12 14:50:41 -0400 refactor: more options cleanup Move several things out of reset_options that don't need to be there. -------------------------------------------------------------------------------- 1debfa714c | advil | 2022-05-12 14:21:33 -0400 refactor: standardize parsing of wiz_mode, explore_mode This moves these options to be `MultipleChoiceGameOption`s for standardized parsing, default setting, etc. The implementation in builds that disable these is slightly different than previously. In DGL builds, these options cannot be set but do produce an error (previously silent) indicating that they are disabled for the build. CLO behavior is unchanged. In !WIZARD builds, the option field is now present in the Options object, but cannot be set via rc or command line so is basically inert, aside from erroring (previously this case was also silent). If the error is annoying for some reason it would be possible to restore the old silent behavior, but I'm not seeing a lot of reasons why this error would be bad. -------------------------------------------------------------------------------- 6c54550755 | advil | 2022-05-12 14:21:33 -0400 refactor: clean up handling of -wizard and -explore Rather than having the CLO parsing code set an option value which then interacts with the defaults in a complicated way, have fixup code check the options directly after all option handling is done, and promote WIZ_NEVER to WIZ_NO as needed. This has the benefit of getting a more sensible interaction of the CLO and rc options (not that I would imagine this comes up much); but the main goal is just to simplify the defaults a bit. -------------------------------------------------------------------------------- 8f4046f52e | advil | 2022-05-12 14:21:33 -0400 refactor: standardize a few more enum-like options Following 6e02c14617caef94b9e -------------------------------------------------------------------------------- 5c17abdc72 | Nicholas Feinberg | 2022-05-12 09:31:23 -0700 Make D shafts nicer (Sergey) Shafting is exciting when it means having to find a way back up to safer levels. Shafting into a position when you're surrounded by later-game enemies, however, tends to feel very unfair - it's often surviveable, but doesn't feel like a reasonable or just challenge. Borrow felid revival logic to make D shafts try to send the player to somewhere outside LOS of monsters. Shafts in other branches remain unchanged. This helpfully differentiates shafts further from teleport traps, which try to send the player *to* monsters, and alarm traps, which send monsters to players. -------------------------------------------------------------------------------- 6e02c14617 | advil | 2022-05-12 11:26:03 -0400 refactor: standardize custom enum-like options This converts various options with custom handling to MultipleChoiceGameOptions (all that I'm seeing that are obvious candidates for it). This gets: (i) better default handling, (ii) more standardized error messages, (iii) less code duplication, (iv) for many of these, more general bool-like parsing (accepting yes/true/1 and no/false/0 for all bool-like args). The only downside is that for a few of these, the else case (usually mapping to the default) didn't impose any constraints, so it may introduce some spurious errors. I've worked around this by adding some extra mappings for several of these. Remaining options with custom handling do something on top of just putting enum-like values into an Options member variable, so would need a more involved approach. -------------------------------------------------------------------------------- 12f90c9db4 | Nicholas Feinberg | 2022-05-12 07:56:49 -0700 Double demonic touch damage (hellmonk) Current demonic touch is generally considered a bit weak. Let's try making it wildly overpowered and then see where we want it to settle. -------------------------------------------------------------------------------- 3b3f824e1b | Nicholas Feinberg | 2022-05-12 07:49:26 -0700 Remove stoker's M_MAINTAIN_RANGE We must preserve orb spiders' mechanical uniqueness of 'being incredibly annoying'. Wind blast is quite enough on its own :) Also, increase their creeping infernos' durations so that they can do something before expiring. -------------------------------------------------------------------------------- ccd5019c30 | gammafunk | 2022-05-12 09:36:50 -0500 fix: Adjust a mini vault (Lici) For dispersion_dpeg, this vault dates from when traps could work out of LOS, hence monsters inside could easily teleport if they woke up before the player reached the vault. This wasn't a great gimmick overall, and the vault's contents would be relatively hard to access without blink, apport, etc. Rework the vault to feature a guaranteed path out of the center through either nothing or non-permanent teleport traps. Also use clear walls to prevent the vault from having spoiler/autoexplore issues. At least if the monsters don't disperse from the vault before the player arrives, the player will have enough time plan out their actions before monsters reach the traps. Also simplify loot placment and reformat DES. -------------------------------------------------------------------------------- e13fd1374b | gammafunk | 2022-05-11 18:43:41 -0500 fix: Adjustments to an arrival vault (personjerry) The vault erik_arrival_cave_to_temple had an area in a subvault that could place monsters and loot fully encased in stone. Have this area always place a door, introducing some clear stone so it won't be as much of a spoiler and autoexplore trap. The other subvault for this map placed monsters immediately behind a door followed by nasty monsters and altars behind digable walls. Remove the door to improve spoilers/autoexplore, and put the nasty area behind a runed door. Tone down the Abyss monster set to not place demonic crawlers on D:1, instead placing only the 5 class demon that can generate in the abyss. Fix `no_item_gen` masking and also add `no_monster_gen` masking to this section. -------------------------------------------------------------------------------- 846e4a0bbc | advil | 2022-05-10 14:45:14 -0400 fix: use rng::UI for help lookup (gammafunk) Previously, this would use the gameplay UI. I'm not sure this was particularly exploitable without crashes or the like, but would allow the player to tweak this rng in a fairly controlled way. -------------------------------------------------------------------------------- 17b9a4b632 | advil | 2022-05-10 12:34:24 -0400 fix: remove debug code -------------------------------------------------------------------------------- 1b0d357a27 | advil | 2022-05-10 12:34:24 -0400 fix: don't let help mark unrands as existing e9b396fb1906e62 generates the unrand to show its info in help lookup, and a side effect of the generation call marks the unrand as existing in you.unique_items. In consequence, a player can force arbitrary unrands that haven't yet generated to be (potentially) converted to fallback randarts by looking them up. I'm not sure if this is good for players to do or not but it's at least a very good bug. Resolves: https://crawl.develz.org/mantis/view.php?id=12702 -------------------------------------------------------------------------------- 12a17119fa | advil | 2022-05-10 12:34:24 -0400 fix: unbreak UNIQ_LOST_IN_ABYSS A bit too late, since it's now exceptionally rare for this to come in to play, but oh well. Since 850bfe61e39c27fcd unique item status would get (incorrectly, I believe) cast down to bool when setting UNIQ_LOST_IN_ABYSS, and get converted to UNIQ_EXISTS as a consequence. This tries to clarify the current statue of the API and restores what's left of this mechanism. -------------------------------------------------------------------------------- 47a863cc1b | Nicholas Feinberg | 2022-05-08 10:32:00 -0700 New wind drake & acid dragon tiles (Sastreii) -------------------------------------------------------------------------------- 297d3b089c | hellmonk | 2022-05-07 21:14:54 -0700 buff kiku torment Don't require a corpse. -------------------------------------------------------------------------------- f1fea46640 | hellmonk | 2022-05-07 21:06:13 -0700 feat: allow ranged pain Expand Kiku's brand capstone to ranged. -------------------------------------------------------------------------------- 665335d0ad | hellmonk | 2022-05-07 21:04:34 -0700 fix: correct kiku rtorm formula It was possible for partial torment protection to roll 0 damage reduction, but give the protection message anyway. Always reducing damage by at least 1 if the kiku passive triggers seems fine. -------------------------------------------------------------------------------- d8082fcd2d | Kate | 2022-05-07 22:34:36 +0100 Remove some obsolete default runrest_ignores (gammafunk) -------------------------------------------------------------------------------- 23c34f7495 | Kate | 2022-05-07 21:57:18 +0100 Adjust AM species recommendations Don't recommend Troll (since throwing is no longer a starting option), replacing them with Gnoll (since AM benefits from training lots of skills). -------------------------------------------------------------------------------- 9e3a32f71c | Nicholas Feinberg | 2022-05-07 09:33:35 -0700 Don't claim to clatter in silence (Monkooky) -------------------------------------------------------------------------------- 3d288355ac | Nicholas Feinberg | 2022-05-07 09:27:25 -0700 Fix artefact MP prop unequip effects -------------------------------------------------------------------------------- 94e2008b86 | Nicholas Feinberg | 2022-05-07 09:20:37 -0700 Remove MP when un-equipping +MP items (ɯ|s|ı|ʍ|o|ǝ|ɯ) Encourage making choices ("do I want +MP or wizardry?), rather than swapping off your =mp halfway through every fight. -------------------------------------------------------------------------------- 6960b1960d | Nicholas Feinberg | 2022-05-05 21:43:30 -0700 Tweak Gauntlet description (jumble) The last line was intended to describe the path through the Gauntlet arenas, but came across as saying 'once you enter a Gauntlet, the only way out may be through the arenas & the minotaur'. You can see the path through the arenas once you're there, so there's no need for this text. -------------------------------------------------------------------------------- 8b6f518c11 | Nicholas Feinberg | 2022-05-05 09:37:35 -0700 Deduplicate the 'soothsayer' title (Ge0ff) Replace Ashenzari's Soothsayer title (duplicates a Nem title) with a riff on Scottish freemasonry, plus shift some stuff around. -------------------------------------------------------------------------------- 7bf7899b20 | Nicholas Feinberg | 2022-05-05 08:46:13 -0700 Reduce some paralysis durations As part of the ongoing quest to make DCSS a little nicer and reduce 'feel bad moments', reduce the max paralysis duration for the Paralyse spell and from various god wraths from 7 to 5. Also remove some dead code and simplify logic for demonic magic. This does not affect the player paralysing monsters, only the player being paralysed. -------------------------------------------------------------------------------- b2816e9c68 | Nicholas Feinberg | 2022-05-05 07:05:13 -0700 Cap Zenata summons (Ge0ff) -------------------------------------------------------------------------------- f50f0a9fbc | Nicholas Feinberg | 2022-05-04 16:51:57 -0700 Fix the build -------------------------------------------------------------------------------- 4f0bcfc870 | Nicholas Feinberg | 2022-05-04 16:33:06 -0700 Randomize Gastronok's hair This is a little silly, but so's Gastronok. Gastronaut remains a player tile exclusive. -------------------------------------------------------------------------------- c08b2e8bf8 | nicolae-carpathia | 2022-05-03 17:09:34 -0400 Add the most nicolae demonic rune vault possible (#2260) * Add the most nicolae demonic rune vault possible I have reached my apotheosis: I have put a rune in a shop. Since the demonic rune repeats if you don't pick it up, I figured it would be the best option for a rune shop. (The abyssal rune also reappears if you don't pick it up, but the theme is easier to fit into Pandemonium.) If you already have the rune, the shop instead places another kind of rarity: a figurine of a ziggurat. (The only other really rare item I could think of was a quad damage, and I've been explicitly told multiple times that I'm not allowed to use those outside of Sprint. Tyranny!) Out of 25 generated shops, the stats on the price of a demonic rune: Minimum: 3804 Maximum: 8647 Average: 6640.76 St Dev: 1412.1 I didn't check the price stats on the zigfig because the rune is the real draw here. The vault also places fat stacks of cash, three other shops, and demon-summoning monsters from other branches as visitors. Enjoy! * Make adjustments to the pan bazaar rune vault Make some changes based on feedback from the other devs: 1) If you already have the demonic rune, instead of selling a zigfig, the central shop now just sells randarts. (I had underestimated the importance of zigfigs.) 2) The difficulty has been turned up a bit. The area outside the central area places more monsters now. 3) A few of the nonruniferous shops have been tweaked. -------------------------------------------------------------------------------- 277feda236 | gammafunk | 2022-05-03 11:26:53 -0500 fix: Remove an unused variable -------------------------------------------------------------------------------- d82a6b94f7 | gammafunk | 2022-05-03 11:11:21 -0500 fix: Adjustments to an arrival vault For `spicycebolla_arrival_teleportal_tutorial`, rename this vault to `spicycebolla_arrival_transporter_tutorial`, since the feature in question is called a transporter. Add a missing level connector to the path leading from the hatch. Remove some SUBST and SHUFFLE, relying in the default undefined glyph mapping to floor as well as the natural vault rotations that occur for variation. Reglyph and reorder transporter statements to straightforward entry/dest order, so the transporter definitions are easier to read. -------------------------------------------------------------------------------- 5102b3be25 | Nicholas Feinberg | 2022-05-02 18:34:57 -0700 Remove two-headed ogres from Lodul's band It's a bit mean to toss average 5, max 10 2-headed ogres at a D:9 player, much less accompany them with friends. Let's just make em basic ogres and see how that goes. -------------------------------------------------------------------------------- 84a40017fa | Nicholas Feinberg | 2022-05-02 18:15:34 -0700 Remove scrolls of holy word Scrolls of holy word are more or less the least interesting type of scroll currently in the game. They're irrelevant for the vast majority of the game, and when they are useful later on, it's not in a particularly interesting way. They don't create exciting situations or memorable moments, just inventory clutter. Let's cut em. TSO's holy word remains in place... for now. -------------------------------------------------------------------------------- fac262f41b | Nicholas Feinberg | 2022-05-02 18:15:34 -0700 New item: scroll of poison Inspired by the late and largely unlamented 'sea of fire' Ignis ability, the scroll of poison fills every unoccupied space on the screen with poison clouds for 10-20 turns. Early on, it can be a way to escape enemies or to attack them from range with impunity, especially with a source of rPois or some !curing. Later, it can damage enemies reckless enough to advance through, block more dangerous clouds, reveal invisible enemies, be ignited with Ignite Poison, trick enemies into walking into other clouds you've placed... and so on. It also can amuse Xom. It's closest to the condenser vane in use, but unlike the vane, it doesn't place clouds directly on enemies, place non-poison clouds, scale with Evo, or recharge. -------------------------------------------------------------------------------- 06c70da812 | advil | 2022-05-02 18:09:41 -0400 fix: remove =g inscription on autopickup ignore Otherwise autopickup gets stuck. This is similar to code that removes this inscription when explicitly dropping something. There's still a weird UI interaction with [a] and items that are being targeted for autopickup only because of a =g, but one that seems mostly harmless.. -------------------------------------------------------------------------------- 91724d5b39 | Nicholas Feinberg | 2022-05-01 16:16:31 -0700 Standardize screamitis conditions (ardl) Maybe don't scream at foxfires. -------------------------------------------------------------------------------- b5314be063 | advil | 2022-05-01 10:42:12 -0400 docs: document stair delays (catern) Previously, the stair-dancing penalty on re-entering levels was not documented except insofar as it was possible to notice it from the time indicator in-game. There's some discussion in the dev channel about whether this delay "matters", but if it exists, it should be documented at least minimally. Add a note to the manual and to the hints mode stair description. -------------------------------------------------------------------------------- d956c00756 | gammafunk | 2022-04-30 23:50:47 -0500 fix: Tweak monster placement in an early vault (dilly) For `dilly_guarded_unrand_morg`, the second-highest tier monster glyph probably shouldn't be an out-of-depth necrophage on D:2-D:3 when we're also placing either Natasha or phantom, both of which are pretty strong monsters at that depth. This vault is small and already places plenty of additional monsters. Have the second-highest tier monster simply be another derived undead on D:2-D:4, using it for something stronger only when the vault is placed at higher depth. -------------------------------------------------------------------------------- adf2fefa87 | Nicholas Feinberg | 2022-04-30 16:40:44 -0700 Fix natural_leader assignments The natural_leader field claimed to affect monster behavior, leading monsters to try to 'follow their leader'. This was a lie. The only effect that the field had was to credit the band leader for kills - 'killed by a 2-headed ogre (led by Lodul)'. This commit fixes documentation & adjusts many monsters. Notables include merfolk aquamancers/impalers/javelineers, Lodul, Josephina, Ilsuiw (+credit) and skeletal warriors, alligators, spriggan defenders (-credit). -------------------------------------------------------------------------------- c2b5878c41 | Nicholas Feinberg | 2022-04-30 14:06:13 -0700 Remove item destruction (Tukima^G) It's an unecessary gotcha/feelbad for Gozagites to permanently destroy weapons they've animated with Tukima's Dance. It also invites weird tactics - tukima-ing bad weapons to turn them into gold. Instead, don't. -------------------------------------------------------------------------------- a876b22402 | advil | 2022-04-30 09:43:04 -0400 fix: tweak rest/wait with inhibited regen Background terminology: CMD_REST triggers a "rest delay" if there's hp/mp/ancestor hp/barbs to rest off (details configurable), or a "wait delay" (which lasts a fixed amount of time) otherwise. Before this commit: * if you do CMD_REST with an inhibiting monster in view that can't reach you, a wait delay is started and lasts the full wait time (unless a reachable monster shows up of course). For example, a monster across deep water with no (direct-ish) path to you. * if an inhibiting monster that can't reach you enters view during either a rest or wait delay, it counts as safe and nothing happens, so if the monster stays in view, a rest proceeds infinitely (which gets detected and triggers a crash). A wait finishes normally. After this commit: * CMD_REST doesn't work at all with an inhibiting monster in view * both rest and wait delays are interrupted by an inhibiting monster, even if it can't reach you. We'll see whether this is annoying for some reason. A more nuanced behavior would be possible if there are common use-cases for waiting with an inhibiting monster that can't reach you in view. (It may still be possible to force an infinite rest by disabling seen monster interrupts. One complication here is that there is currently no particularly good way to detect when the -Regen status actually turns on, because it all happens indirectly. But possibly the game should also detect this and send a full_hp interrupt in this case.) -------------------------------------------------------------------------------- d383c6f625 | gammafunk | 2022-04-30 02:56:29 -0500 fix: Don't consider launcher skills for ammo gifts (elliptic) Before ammo removal in a8e9c987, Okawaru could gift ammo for launchers based on skill training. The gifting code wasn't updated for ammo removal, hence Oka is gifting excessive/unwanted throwing gifts for players with launcher skills trained. Update the relevant code to only consider throwing skill. -------------------------------------------------------------------------------- 921d912d32 | gammafunk | 2022-04-29 04:01:54 -0500 feat: Some adjustments to unrand vaults dilly_guarded_unrand_throatcut: Scale the monsters better with depth. Adjust the skeleton placement so that it's spread within each of the two rooms, so that both rooms always get skeletons. dilly_guarded_unrand_morg: Adjust monster set and placement to better scale with depth. Use spectral things and simulacra and a wight band for the single "boss" monster on D:5-7, and use either skeletal warrior or less commonly a death knight for the boss monster on D:8-D:9. Give the dead trees their usual custom description, and give them special coloring for console. dilly_guarded_unrand_devastator: Rework the monster list to better connect with the themes of Devastator, and improve scaling with depth. Use ogres as the basic threat, using normal ones for D:4-6 and two-headed ogres for D:7-12. Introduce one gargoyles for D:7-D:9, adding more for D:10-12, also adding a boulder beetle for that same range. Place the unrand centrally in the vault, and make all statues use the "orb" tile, since that visually best matches the theme. Closes #2527. -------------------------------------------------------------------------------- b676c2808e | dilly | 2022-04-29 04:01:28 -0500 Some guarded unrand vaults For Morg, Devastator, and Throatcut. Committer's Note: Squashed commits and reworded commit message. -------------------------------------------------------------------------------- 5854e031c7 | advil | 2022-04-28 15:45:11 -0400 fix: ignore some disabled interrupts in rest checks Before this commit, disabling rest interrupts could result in infinite rests (and then a crash on demand in code attempting to detect them). This commit changes things so that if hp or mp interrupts are disabled, they are not factored into whether a rest can be started -- so if both are disabled, resting actually becomes impossible (and a wait will be started instead). That is, a rest that can't be interrupted is never started. I think this may still have a weird interaction with ancestor_hp, which I don't quite understand and haven't changed. -------------------------------------------------------------------------------- 2d807254ef | advil | 2022-04-28 15:36:51 -0400 fix: hardcode an activity interrupt for barb removal No rc options should be able to trigger an infinite rest, but currently because of the way resting is implemented, if the regular interrupt conditions are satisfied before the barb duration is cleared, only a message interrupt (easily disableable) remains to stop the rest, making it easy to force an infinite rest. In the past this has typically happened by accident (e.g. as in 8ed1089bbe3), but it could also be used to force a crash on demand and reset levels. This commit takes a slightly hacky approach, and sends a full hp interrupt explicitly when barbs are removed. It doesn't seem worth adding a specific barb interrupt. But as long as barbs' interaction with resting is hardcoded (see player::is_sufficiently_rested), something hardcoded needs to happen on the end of a barb duration. -------------------------------------------------------------------------------- 8ed1089bbe | advil | 2022-04-27 19:24:32 -0400 fix: don't parse bad channels as no channel in runrest rc lines This was happening because the crawl code returns nil on the error case for parsing a channel name, which is then passed to crawl.message_filter as a channel arg. Since this function supports channel as an optional arg, nil maps to no channel (-1). So the gammafunk rc line `ignore += pray:` actually sets a runrest_ignore for basically any message. After this change, the code errors and prevents the line from being used at all, in line with what happens in channel parsing in initfile.cc. Also fixes a buggy ignore involving Jiyva. (Though probably this should only look for one word channel names?) Note that this doesn't fix a larger issue leading to this commit, which is that it is still possible to write runrest_ignore_message lines that trip the buggy rest ASSERT under the right circumstances. -------------------------------------------------------------------------------- 541a27f54d | Kate | 2022-04-26 21:19:08 +0100 Destroy melded cursed items on Ash abandonment They were just falling off instead, leaving the player with cursed items in their inventory. -------------------------------------------------------------------------------- ccd5be9afd | advil | 2022-04-26 13:57:08 -0400 fix: improve arena cancel/end behavior * Remove all delays on cancelling, these are just confusing. * Show popup if any trials have occurred, even if no explicit t:1 flag has been set. I guess it may not be super informative with only one trial, but there's no other good way to see the log if you want it. This includes even the cancellation case, but only if at least one complete trial has occurred. * Add some more messaging around cancelling. I wonder if there are interesting stats the final popup could show? While testing this I noticed all sorts of other flaky behavior. Sampling: Sometimes cancelling still results in a delay with a blank screen. In console when I hit space during the first trial, there is a redraw that wipes out half the banner. Sometimes the cursor shows up in an ugly way (but sometimes it doesn't). -------------------------------------------------------------------------------- 2679155cab | advil | 2022-04-26 13:57:08 -0400 fix: more consistent right click handling in main menu As noted in #2528, a bunch of main menu popups or submenus weren't correctly handling right clicks to exit. This should standardize the behavior. (Caveats: I still don't really understand why right click is best detected using `CK_MOUSE_CMD`, and I had do something a bit dodgy to get good handling of this for the seed/arena text entry boxes. Also, what would be much better is a click outside to close behavior, similar to how webtiles mouse handling works, which would probably address the touchscreen issues in that #2528.) -------------------------------------------------------------------------------- 7bc237e783 | Nicholas Feinberg | 2022-04-24 15:23:45 -0700 Nerf Vv melee again Post-602b31c20e3eccb, Vv became a lil too lethal. Move melee down to 35/35, from 45/45. -------------------------------------------------------------------------------- 7276a9ff7f | advil | 2022-04-24 13:56:04 -0400 refactor: misc opengl comments / refactoring This is not a very focused commit, just a bunch of tweaking and some commenting I added while trying to understand parts of this code a little bit better. -------------------------------------------------------------------------------- b366d0e2d1 | advil | 2022-04-24 13:42:24 -0400 fix: tile sheet tweaks for better packing This is basically an emergency patch to get the player.png tile sheet size below height 2048, which won't work as a long term solution for the relevant issues but can be back-ported to 0.28 at least. If the tile sheet size exceeds 2048, on local tiles, it requires a 1024x4096 size texture atlas. Any modern hardware will support this, but a non-trivial amount of older or cheaper hardware won't[1]. Before 0.28, we had been able to keep most tile sheets to 1024x1024 with the exception of wall.png and player.png, both at 1024x2048. This is still not ideal (https://crawl.develz.org/mantis/view.php?id=11378), but this is something like 1% of graphics cards these days, as opposed to 6% for not supported 1024x4096. Various additions in 0.28 pushed player.png up across this threshold. In the long run, it would be much better if tile sheets were automatically split up and the implementation weren't tied to the size of the tile sheet. However, the tech cost for doing this is really painful, as the local tiles buffer implementation is really deeply tied to the assumption that each texture atlas is stored in a single 2D texture. So since I was able to tweak things to get player.png down a bit, I'm going with that for now. [1] https://feedback.wildfiregames.com/report/opengl/feature/GL_MAX_TEXTURE_SIZE -------------------------------------------------------------------------------- 370832a12f | advil | 2022-04-24 13:23:57 -0400 fix: remove lava orcs ...from the tile sheet. -------------------------------------------------------------------------------- 0917bc69df | advil | 2022-04-22 15:41:51 -0400 fix: add a missing MF_ARROWS_SELECT check (elliptic) This was correct in webtiles, missing in local menu code. Practical impact: with `menu_arrow_control=false` this lets space act as page down (where before it would be a noop under this setting). -------------------------------------------------------------------------------- cb44be3569 | advil | 2022-04-22 12:56:40 -0400 fix: force build sqlite from contribs on msys2 This addresses the following issue (in a probably non-ideal way): on current msys2 `pkg-config sqlite3 --cflags-only-I` returns `-IC:/msys64/mingw64/include`. For reasons that aren't entirely clear to me (maybe just to suppress warnings) we sed -I into -isystem. This runs right up against https://github.com/msys2/MINGW-packages/issues/10761, breaking the build in a fairly basic way. It would probably be somewhat better to find a way to allow building of sqlite3 via pkg-config, but for now I'm just going to disable this, which does fix the msys2 build in my testing. Resolves #2440. -------------------------------------------------------------------------------- 7790a0e70a | Nicholas Feinberg | 2022-04-21 21:33:47 -0700 Tweak tile saturation (ardl, others) Make salamanders slightly easier to see in lava, and wind drakes slightly easier to see in shallow water. -------------------------------------------------------------------------------- bb8214d451 | Nicholas Feinberg | 2022-04-21 21:33:47 -0700 Buff Hat of the Bear Spirit (ardl) :berserk: -------------------------------------------------------------------------------- d15c067e26 | Nicholas Feinberg | 2022-04-21 21:33:47 -0700 Make allies default to attacking One of the most confusing and annoying things for players about allies is that, by default, they will not attack enemies. If you or your ally is hit by an enemy, or if you attack an enemy or order an attack, or if you tell your allies to wait/guard, they'll attack; otherwise they'll follow you uselessly. This feels buggy to players - understandably! Change allies to default to attacking enemies instead. This is a slight buff to summoning allies out of sight of enemies & a nerf to trying to sneak around while hanging out with allies, but hopefully is a net improvement to the player experience. -------------------------------------------------------------------------------- 46f7bbceaa | Nicholas Feinberg | 2022-04-21 21:33:47 -0700 Move D enemies that encourage retreating later (dilly) Certain monsters are designed to have 'strong phases' and 'weak phases'. Sky Beasts go invisible and visible; Death Knights turn their pain mirror on and off. It's often wise for players to retreat while those monsters are in their 'strong' state & to fight again later. With the addition of 'attacks of opportunity', this is sometimes more dangerous. To compensate, move death knights & sky beasts slightly deeper. -------------------------------------------------------------------------------- a87a4c8c21 | Nicholas Feinberg | 2022-04-21 21:33:47 -0700 Don't rate Damnation's damage (particleface) It's off the charts! -------------------------------------------------------------------------------- 1716ac0dbf | Nicholas Feinberg | 2022-04-21 21:33:47 -0700 Simplify damage rating display (ebering, elliptic) The "damage per time" display was more misleading than helpful, since it didn't account for enemy AC and also rounded delay aggressively. The latter is fixable, the former isn't. Since delay is displayed on the line above, let players do the math & simplify the damage rating down to a single line. -------------------------------------------------------------------------------- e2f44be95a | gammafunk | 2022-04-20 13:15:54 -0500 feat: Rebalance the slime special room Remove the dependency on absdepth, instead using simple monster lists conditioned by branch. We don't need weight scaling by depth for a vault placing only on Lair:$ and endgame branches. Remove the endoplasms completely, since they're total chaff, using more jellies instead in Lair and more slime creatures in Slime and Depths. Likewise don't use jellies in Slime and Depths. Nerf the amount of rockslimes, treating them on par with acid blobs as the top tier threats, favoring quicksilver oozes and to a lesser extent azure jellies. This tones down the vault in Lair:6 a good deal, but you're still getting two top tier slimes on-average, decent numbers of mid-tier slimes, and the removal of endoplasms. It will remain a quite nasty (and rare) Lair:6 vault that will cause the player to abandon the level for a while in many cases. The vault should also now pose a better threat in Slime and Depths with all the chaff removed; in these places the top tier slime monsters get higher weighting. We also introduce golden eyes and shining eyes in these branches. -------------------------------------------------------------------------------- 3af9d588a4 | gammafunk | 2022-04-20 13:15:29 -0500 feat: Simplify chances for special rooms For the `special_room` vault, currently there's a 0.5% chance to place this vault in Slime, a 1% chance to place this in Orc, Spider, Crypt, and Pan, and a 3% chance to place it elsewhere. There's no reason to have different yet extremely similar chances for this vault among the non-extended branches. This commit uses a 2% chance for non-extended branches and 1% for the Hells and Pan. This will reduce the frequency of special rooms somewhat, but the vault does have `allow_dup` and hence still has a decent chance of being seen one or more times for each complete game. The 1% chance for extended branches isn't quite justified either. Arguably it might have some impact on balance for the Hells. For Pan we have potentially infinite levels, so it may be good to reduce its frequency. I'll keep it at 1% in these branches and leave any adjustment to people wanting to tweak extended. -------------------------------------------------------------------------------- 5774675eae | gammafunk | 2022-04-20 12:58:52 -0500 fix: Clean up DES syntax -------------------------------------------------------------------------------- 24ffce5b50 | advil | 2022-04-19 10:25:44 -0400 docs: update map mode help with ctrl-c change Since 4d47a7520311 this no longer forgets item info. -------------------------------------------------------------------------------- 6efceafd81 | Neil Moore | 2022-04-19 01:00:30 -0400 Simplify calls to, and defaults for, clear_map(). Make the clear_items argument default to false, since that is usually (in fact, now, always) how we call it. No one currently calls clear_map() with clear_items == true or clear_mons == false, so this could be simplified even further, but I didn't want to take that step quite yet. Specifically, I didn't want to rename the function to "clear_map_monsters()" or such, since it does also clear clouds. -------------------------------------------------------------------------------- 4d47a75203 | Neil Moore | 2022-04-19 00:55:45 -0400 Clear monsters but not items, on Ctrl-C and X Ctrl-C. The idea being that, nowadays (unlike when these commands were introduced), most items cannot be moved or destroyed once they have been seen, so there is very rarely a reason to want to forget them. Arguably these commands should also forget corpses, since they do decay. But I did not want to add that extra complexity to clear_map's interface. -------------------------------------------------------------------------------- 1ff7896281 | Nicholas Feinberg | 2022-04-16 20:22:31 -0700 Simplify Lugonu's Bend Space Remove the damage component (tiny and irrelevant) and the chance of blinking monsters away from the origin (actively counterproductive). Make it much more likely to blink monsters away from the destination. Remove invocations scaling - Lucy's other abilities offer great incentive for invo training already, so there's no particular need to complicate this one. -------------------------------------------------------------------------------- 68df138881 | Nicholas Feinberg | 2022-04-15 09:20:30 -0700 Make hell knights into priests Make them evil without making TSO celebrate the deaths of 6/7 orcs. -------------------------------------------------------------------------------- af92d4a5d6 | Nicholas Feinberg | 2022-04-15 09:03:32 -0700 Make Hell Knights evil again (catern) Lost this when they lost Pain. Slightly hacky. -------------------------------------------------------------------------------- 76187f39e0 | Nicholas Feinberg | 2022-04-15 08:59:26 -0700 Cut naga warrior hp by 20% They're by far the top killer in Snake since their buff, and players note that their tankiness to killpower ratio is a bit high. Let's dial them back some. -------------------------------------------------------------------------------- b41bcbb86e | Nicholas Feinberg | 2022-04-12 15:46:29 -0700 No Usk piety for non-hostiles (Ge0ff) "how to tele-frag Crazy Yiuf with 0 Invo: 1. summon 100 spammals and slowly build up piety..." -------------------------------------------------------------------------------- b4c28e87c6 | Nicholas Feinberg | 2022-04-12 09:05:37 -0700 Fix/simplify damage rating + ench/slay Base damage was incorrectly treated as about twice as good as it is on average. Damage rates are now about 2x mean damage. -------------------------------------------------------------------------------- 5e1b129e87 | Nicholas Feinberg | 2022-04-12 08:47:45 -0700 Fix Yara's + Petrify (various) Dispelling the 'petrifying' status should not cause 'petrified'. -------------------------------------------------------------------------------- 4a08ba55a3 | Nicholas Feinberg | 2022-04-12 08:31:40 -0700 Remove brand damage rating Think it was more misleading than helpful. -------------------------------------------------------------------------------- 52719c12eb | Nicholas Feinberg | 2022-04-11 21:10:59 -0700 Display a 'damage rating' in weapon descriptions I don't like some parts of this (the brand rating should probably live with the brand description) but it's better than nothing, maybe. Let's see! -------------------------------------------------------------------------------- 0b05bf5e21 | Nicholas Feinberg | 2022-04-11 21:07:53 -0700 Describe monster unblindability (Lici) -------------------------------------------------------------------------------- 65376010d4 | Nicholas Feinberg | 2022-04-11 20:59:33 -0700 Fix penetrating launchers + throwing (particleface) Thrown items would inherit penetration from a wielded weapon (eg, the Storm Bow), allowing them to pass through enemies and shields. Fix this. -------------------------------------------------------------------------------- bb24c3b5da | Nicholas Feinberg | 2022-04-11 20:53:47 -0700 Simplify some throwing checks -------------------------------------------------------------------------------- 28c3e03cda | Nicholas Feinberg | 2022-04-11 20:47:21 -0700 Give Usk piety for summons and such Hopefully this isn't abuseable! It seems nice, though. -------------------------------------------------------------------------------- 72f4aa029e | Nicholas Feinberg | 2022-04-11 20:27:18 -0700 Simplify -------------------------------------------------------------------------------- 7bc3a90fb7 | Nicholas Feinberg | 2022-04-11 20:00:58 -0700 Don't recommend OgHu/TrHu (ardl) Since they can't throw the game anymore. -------------------------------------------------------------------------------- 050149af67 | Kate | 2022-04-09 18:03:57 +0100 Fix Delatra's Gloves not healing on lignification quaff-id (#2521) Adds a check for whether the gloves are worn before triggering the potion effect, so that as long as they're unmelded when the potion is quaffed the player will still be healed on quaff-id. Closes #2521. -------------------------------------------------------------------------------- 68df515428 | Neil Moore | 2022-04-04 18:38:01 -0400 Fix grammar for artefact bardings with Regen (jillest) Fixes #2514. -------------------------------------------------------------------------------- f1c400731a | Aliscans | 2022-04-02 14:55:46 +0100 FIX Remove an erronous "the" from a message. The player can see invisible monsters which are bribed, charmed or hexed. When the status is lost, the monster may suddenly vanish. This changes the message this generates from "You can no longer detect the Sigmund." to "You can no longer detect Sigmund.". The "the" is retained for non-unique monsters. -------------------------------------------------------------------------------- 9f8742066b | Nicholas Feinberg | 2022-04-01 20:59:30 -0700 End the day Fly away, little mayflies. Come again another day. -------------------------------------------------------------------------------- ad05b8d819 | hellmonk | 2022-04-01 00:19:50 -0400 mayflytaurs -------------------------------------------------------------------------------- b333ed421b | hellmonk | 2022-03-31 22:39:26 -0400 delete a buggy vault -------------------------------------------------------------------------------- d16b76e6b1 | Kate | 2022-03-29 20:54:26 +0100 Stop constriction on transforming into an immune form -------------------------------------------------------------------------------- 2ae49fcbb9 | Nicholas Feinberg | 2022-03-29 07:28:01 -0700 Replace Oka's Warrior title (Ge0ff) Duplicates a Fighting title. -------------------------------------------------------------------------------- af6dd05e2f | advil | 2022-03-28 20:38:42 -0400 fix: add some 0 checks for %s in quiver code mod 0 can result in a divide by 0 error (really, it's undefined per the spec). -------------------------------------------------------------------------------- b00dd7cb4b | advil | 2022-03-28 17:37:51 -0400 fix: clarify the conditions of a movement message As illustrated in a discussion on discord this morning, this message didn't succeed in explaining what the exact problem is. Make it more specific. -------------------------------------------------------------------------------- f2db06da9e | Nicholas Feinberg | 2022-03-28 10:32:14 -0700 Allow creeping frost animation to be disabled (Lici) -------------------------------------------------------------------------------- 43bc051769 | Nicholas Feinberg | 2022-03-28 08:04:08 -0700 Correct Weak status description (dilly) -------------------------------------------------------------------------------- cbd9eb2193 | Nicholas Feinberg | 2022-03-27 14:56:41 -0700 Prevent 'failure to reach' for protected allies If you can freely shoot through Hep ancestors, Fedhas plants, etc, you should probably be able to reach through them as well. -------------------------------------------------------------------------------- d3370f49d2 | Nicholas Feinberg | 2022-03-27 14:56:41 -0700 Narrow Amaemon's range some Cut D:12, Orc:1, and Lair:4 from the spawn range. Poor fella just wasn't getting any kills there. -------------------------------------------------------------------------------- 11dafa56b2 | Nicholas Feinberg | 2022-03-27 14:56:41 -0700 Make Parghit's will indomitable 100 -> 140. Make him a lil trickier to hex. -------------------------------------------------------------------------------- 4e025c60ea | Nikolai Lavsky | 2022-03-27 09:58:00 -0700 fix: display Irradiate damage in monster descriptions -------------------------------------------------------------------------------- ecccbbdb84 | Nicholas Feinberg | 2022-03-26 14:23:15 -0700 Nerf mummies (increase consumable generation) To further compensate for attacks of opportunity & to adjust difficulty downward, generate about 18% more potions and about 12% more scrolls. Might be good to do a second pass at this point and shave down weights of 'strategic' scrolls (?ew, ?ea, ?bw, ?amnesia, ?id, ?acq) somewhat. -------------------------------------------------------------------------------- 7fa12cc219 | Nicholas Feinberg | 2022-03-26 14:06:36 -0700 Actually simplify Majin-Bo damage ??doh -------------------------------------------------------------------------------- 093c7b3b58 | Nicholas Feinberg | 2022-03-26 13:42:19 -0700 Simplify Majin-Bo vampirism Majin-Bo has a great deal of variance, both strategic (not affecting demons/undead, forbidden by good gods) and tactical (heals for 1d at a 60% chance). Simplify by upgrading the healing to a 100% chance. -------------------------------------------------------------------------------- b34f9e133a | sdynet | 2022-03-25 09:45:25 -0700 Update Korean translation (gods.txt) Closes #2497. -------------------------------------------------------------------------------- e4682ce883 | Kate | 2022-03-24 19:01:32 +0000 Fix a yellow draconian acid splash check Don't splash onto battlespheres/spectral weapons/god-protected friendlies. -------------------------------------------------------------------------------- 543d47181c | Kate | 2022-03-24 19:01:32 +0000 Reword some attack prompts -------------------------------------------------------------------------------- defda700fc | Kate | 2022-03-24 19:00:30 +0000 Don't consider avatars valid targets for Cleansing Flame (surr) Prevents battlespheres/spectral weapons from giving prompts when activating Cleansing Flame, since the effect itself already ignores them. -------------------------------------------------------------------------------- efd9c33606 | Kate | 2022-03-23 15:48:29 +0000 Prevent piety troves from generating under Yredelemnul (hellmonk) -------------------------------------------------------------------------------- 4c793a2ed2 | Nicholas Feinberg | 2022-03-23 07:39:03 -0700 Disable AF_BLINK for AOOPs Crashes if the blink frog blinks into the player. -------------------------------------------------------------------------------- 3c90f9a769 | Nicholas Feinberg | 2022-03-21 17:24:01 -0700 Increase Hexer attack speed Compensating for the loss when monster attack went to speed 1. -------------------------------------------------------------------------------- 7659ce593d | Kate | 2022-03-19 11:41:59 +0000 Remove Haste from spell libraries on ancient save transfers It crashed when cast, since it's now a monster-only spell. Also clean up some duplicate checks for other spells that have been entirely removed. -------------------------------------------------------------------------------- da187f2e07 | advil | 2022-03-18 15:28:15 -0400 docs: fix/clarify runrest prepend vs append The docs are overall not very consistent, but for options where it matters, there seems to be a preference to teach ^= as the default. I've switched runrest_stop_message and runrest_ignore_message to this, since this is what you need to do to override defaults (in fact there was a non-working snippet here following 80dc71225541). I've also tried to clarify that ^= matters for the interaction of the two. -------------------------------------------------------------------------------- 497ad06e87 | Nicholas Feinberg | 2022-03-18 08:26:51 -0700 Remove self destructs of opportunity Fix a crash with creeping infernos and generally reduce surprising weirdness. -------------------------------------------------------------------------------- 83ea962da3 | Kate | 2022-03-17 17:11:21 +0000 Mark necromancy spellbooks as evil (#2491) Closes #2491. -------------------------------------------------------------------------------- 48ae54a172 | Kate | 2022-03-17 17:11:21 +0000 Fix messaging for -Potion/Scroll durations in Hell -------------------------------------------------------------------------------- fed8413159 | Kate | 2022-03-17 17:11:21 +0000 Adjust some mutation descriptions Clarify that demonic touch grants a new aux attack instead of changing the standard off-hand punch, and remove some redundant details for claws. -------------------------------------------------------------------------------- a4d04cda05 | Nikolai Lavsky | 2022-03-17 17:01:25 +0000 fix: add a space for fellow slimes Fixes a missing space in the monster list. -------------------------------------------------------------------------------- 9d40539af8 | Nicholas Feinberg | 2022-03-17 08:59:58 -0700 Improve creeping frost animation Display it as appearing on all cells that are adjacent to walls and don't contain visible allies of the caster. This should hopefully clarify how it works. -------------------------------------------------------------------------------- 2178c42546 | Nicholas Feinberg | 2022-03-16 12:26:16 -0700 Don't tell ball lightning to rot Fix a bug in which taking stairs while adjacent to ball lightning would claim the ball lightning 'stayed behind to rot'. -------------------------------------------------------------------------------- 92b06acc75 | Nicholas Feinberg | 2022-03-16 12:19:52 -0700 Mark Anguish as dispellable (Dinky) It is magical, after all. -------------------------------------------------------------------------------- 2a1340cf14 | Nicholas Feinberg | 2022-03-16 12:18:11 -0700 Bump up shadow dragon scales AC From 10 to 11. Puts em a bit higher than storm dragon scales, but with an arguably worse innate ego, and still a point below gold dragons. -------------------------------------------------------------------------------- 41199d4a87 | Alex Jurkiewicz | 2022-03-15 11:12:25 +0200 Add MUT_DEVOUR_ON_KILL description -------------------------------------------------------------------------------- 0902485e31 | Alex Jurkiewicz | 2022-03-15 11:12:25 +0200 Convert Ghoul devour-on-kill to a mutation This behaviour was previously hard-coded. I considered an alternate implementation of creating US_HUNGRY_UNDEAD. This ended up creating a lot more code and making undead state checks more complex, so I discarded it. -------------------------------------------------------------------------------- f9362112df | advil | 2022-03-13 17:01:39 -0400 docs: improve keymap documentation in options guide The main point of this change was to add K4, which was missing entirely, but I cleaned up and clarified a bunch of other things here. -------------------------------------------------------------------------------- a02f740833 | Perry Fraser | 2022-03-12 22:16:33 +0000 fix: remove surprious space in regen description -------------------------------------------------------------------------------- 1fd2556b9a | Nicholas Feinberg | 2022-03-12 08:44:37 -0800 Prevent opportunity attacks from slower monsters When moving away from monsters that move more slowly than the player, don't allow those monsters a chance at launching an opportunity attack. Such attacks are unintuitive and don't serve any design purpose. This affects the worm vs human and most monsters vs felid/spriggan dynamic. -------------------------------------------------------------------------------- 0ef121a99b | Kate | 2022-03-12 15:48:41 +0000 Add a (redundant?) orb check Preventing pickup AI from considering orbs for two-handing/dual-wielding monsters. -------------------------------------------------------------------------------- d808a8bb3c | Kate | 2022-03-12 15:45:21 +0000 Allow gifting orbs to Beogh orcs Giving your allies orbs of mayhem is now possible, if potentially unwise! -------------------------------------------------------------------------------- 7c249980d5 | Kate | 2022-03-12 15:40:29 +0000 Update a hint To reflect the fact that orbs also take up the offhand slot, for ranged weapon users. -------------------------------------------------------------------------------- 1c2307e1b3 | Nicholas Feinberg | 2022-03-12 07:05:33 -0800 More early-game monster nerfs In the interest of adjusting difficulty, tune down base damage and/or HP slightly on adders, phantoms, scorpions, and Sigmund. -------------------------------------------------------------------------------- 1251d06ae9 | Kate | 2022-03-12 14:51:58 +0000 Don't let monsters wield two weapons and a shield No more 3-handed blademasters. -------------------------------------------------------------------------------- e21a839c99 | Nicholas Feinberg | 2022-03-12 06:43:05 -0800 Make hunters more dextrous Since that's quite important for them now. -------------------------------------------------------------------------------- 389c0b56f3 | Edgar A. Bering IV | 2022-03-08 17:28:25 +0200 docs: fix changelog (gammafunk) -------------------------------------------------------------------------------- 17cd264cf9 | Edgar A. Bering IV | 2022-03-08 17:23:29 +0200 docs: update changelog -------------------------------------------------------------------------------- 8310661d2b | Edgar A. Bering IV | 2022-03-08 16:10:51 +0200 fix: don't give frightened monsters opportunity attacks (iamserjio) -------------------------------------------------------------------------------- 84ccd498e3 | Edgar A. Bering IV | 2022-03-08 08:33:34 +0200 wip changelog -------------------------------------------------------------------------------- d4eb659eea | advil | 2022-03-07 17:16:21 -0500 fix: allow anon spectating I guess everyone assumed that this was disabled because of account hold stuff and that's why no one told me this was broken, but it was just broken by mistake. -------------------------------------------------------------------------------- 1586fc07ea | Kate | 2022-03-07 02:03:29 +0000 Adjust an ice cave entrance ice_cave_statue_garden_transporter could place fast simulacra so close to the player that they couldn't safely leave if they decided to immediately abandon the vault after entry. Put the exit adjacent to the entrance, and move some of the monsters further away. Nagas and Chei worshippers are still out of luck against harpy simulacra, but at least can't get constricted by anaconda simulacra when trying to leave. Nagas of Chei simply suffer (and maybe this and similar portal vaults should be reworked further to make leaving safely always be possible). -------------------------------------------------------------------------------- 2e7ade144c | hellmonk | 2022-03-06 20:15:57 -0500 brutally nerf baileys Baileys had a very high kill rate and closing attacks probably make it worse. -------------------------------------------------------------------------------- 5627465c62 | Kate | 2022-03-06 17:27:00 +0000 Fix Ignite Poison's targeter leaking information It displayed the locations of invisible poisoned monsters - don't count them during the spell tracer. -------------------------------------------------------------------------------- e8b325be47 | Nicholas Feinberg | 2022-03-06 07:05:14 -0800 New Vv and Zenata tiles (Sastreii) Oooooh -------------------------------------------------------------------------------- f56f883ddd | Nicholas Feinberg | 2022-03-05 11:16:01 -0800 GOOE adjustments - Remove rPois (why is it there? Predates Stone Soup) - Remove from Depths - Roughly double Vaults weight, replacing wizards Try to have em place somewhere they have a chance of working. -------------------------------------------------------------------------------- b1efcce96a | Nicholas Feinberg | 2022-03-05 11:05:07 -0800 Uncomment a very important line (Yermak) Oops! -------------------------------------------------------------------------------- d32acbc352 | Nicholas Feinberg | 2022-03-05 10:57:33 -0800 Show LRD damage in monster desc (ardl) -------------------------------------------------------------------------------- 404d694432 | Nicholas Feinberg | 2022-03-05 10:49:50 -0800 Unrand tweaks - Glaive of the Guard: ench +8 -> +5. Ludicrously strong. - Damnation: 3d14 -> 2d14. Compensation for ammo removal. (Funny alternative: drain on fire...? Probably better not.) - Gyre & Gimble: ench +7 -> +12. Make it more competitive with non-unrand short blades. -------------------------------------------------------------------------------- d12d1d25ed | Nicholas Feinberg | 2022-03-05 10:46:01 -0800 Swap radroaches and meliai in spider Latter seem more threatening in practice. -------------------------------------------------------------------------------- f2a2391c1e | Nicholas Feinberg | 2022-03-05 10:44:31 -0800 Reduce meliai Spider gen Too rude. -------------------------------------------------------------------------------- 7e222a1f62 | Nicholas Feinberg | 2022-03-05 10:39:53 -0800 Reduce merfolk net gen (meowsim) To reduce "chain netting" of the player & general overabundance of nets in Shoals, drop from a 1/4 to 1/8 chance of any given merfolk spawning in with a throwing net. Average drops from 8.4 to 4.5 nets per Shoals. -------------------------------------------------------------------------------- d469af4107 | Nicholas Feinberg | 2022-03-05 10:06:57 -0800 Implement closing attacks An experimental way to discourage long-distance luring or so-called 'pillar dancing', which tends to be rather repetitive and not very fun. Gives monsters a 1/3 chance to get a free attack when the player moves away from them. This only costs energy for enemies that attack slowly, like ogres and juggernauts. Wu Jian martial attacks & rampaging give immunity, and monsters that don't move fast enough to follow you can't attack. This should have a minimal impact on most normal fights, and even allow repositioning across a reasonable distance with adjacent enemies. -------------------------------------------------------------------------------- 7d8c13d22b | Nicholas Feinberg | 2022-03-05 10:06:57 -0800 Revert "Re-randomize energy temporarily" Obsoleted by closing attacks. This reverts commit 333b8329f1cbc402d63d599db9b7d6ba7397d29b. -------------------------------------------------------------------------------- a581b86abd | Nicholas Feinberg | 2022-03-05 10:06:57 -0800 Don't recommend pillar dancing Fie! -------------------------------------------------------------------------------- eff9672185 | Nicholas Feinberg | 2022-03-05 10:06:57 -0800 Improve characters' starting kits (Hellmonk) One of the most interesting and exciting decisions in Dungeon Crawl is when and where to use your consumable items. In the very early game, characters may not yet have any consumables, which diminishes the tactical aspect of the game. So, let's try to give most characters some options which, if used wisely, can help them with a tough situation. - All 'mages' ('pure casters') start with a potion of magic. - Gladiators get a throwing weapon; javelin, large rock or boomerangs. - Monks get a potion of ambrosia. (See, it's divine.) - Hunters get a scroll of immo. - Brigands get an additional poisoned & curare dart. - Artificers trade their xom piece for nine charges of iceblast. - Wanderers get an additional random potion or scroll. - Delvers get nothing, for now, since I'm already pretty happy with how they play. They're a challenge anyway, really. :) - Berserkers and Cinder Acolytes likewise get nothing. They already have perfectly good early game buttons. - Abyssal Knights start at 60 piety (just over 2*) instead of 38 (just over 1*). This should allow them to use Bend Space if needed. (I think they're still quite weak.) - Chaos Knights get Artificer's xom chesspiece. - Transmuters get a potion of lignification, which should work well with their unarmed combat focus. It's also very thematic. - Warpers get more boomerangs of dispersal. - Arkane Markspersons get a scroll of vulnerability. - Enchanters get another potion of invisibility. - Fighters are unchanged. This should also be a nice compensation for various recent changes that increased early game difficulty. -------------------------------------------------------------------------------- 6e15ea0a97 | Nicholas Feinberg | 2022-03-05 10:06:57 -0800 Weaken early spawns somewhat Take top killers and make em a bit less common. (Ogres, centaurs, water moccassins, 2hos, and hydras.) Also move Harold a bit deeper. Lad is a terror. -------------------------------------------------------------------------------- 614883fcd9 | Nicholas Feinberg | 2022-03-05 10:06:57 -0800 Make ogres attack more slowly To make their gimmick more noticeable and easier to reason about, make em swing at 1.5 aut/per instead of 1.3. Buff damage slightly, but not enough to fully compensate (ignoring AC). Change 2HOs, ogre mages, Erolcha, thunderhulks and Lodul to match. Considered including ettins too, but it might be a bit much... -------------------------------------------------------------------------------- 68b12284db | Edgar A. Bering IV | 2022-03-05 15:37:22 +0200 docs: update CREDITS.txt -------------------------------------------------------------------------------- 24134d049f | Perry Fraser | 2022-03-05 15:22:12 +0200 fix: make color tags render in MessageRegion [ Closes #2302. ] -------------------------------------------------------------------------------- 80730f7218 | Kate | 2022-03-04 22:09:13 +0000 Improve wording in ranged weapon descriptions -------------------------------------------------------------------------------- 811e9ec5e5 | Kate | 2022-03-04 22:09:13 +0000 Reduce the amount of wand charges in a shop The gimmick of the vault is overcharged wands, but guaranteeing the maximum number of charges is already a significant amount compared to normal generation, so giving a 66% bonus on top of that was excessive. Reduce it to 25%, and slightly reduce the prices. -------------------------------------------------------------------------------- cad78a6a97 | Aliscans | 2022-03-04 22:32:03 +0200 feat: don't highlight Vehumet offers if you also have book learning. This changes the meaning of "blue spell at the top of the list" from "spell Vehumet is offering you" to "spell which is only available because Vehumet is offering it to you". Vehumet can withdraw the offer, but you cannot lose the book. This change doesn't affect the religion screen. Co-authored-by: Aliscans -------------------------------------------------------------------------------- 3d610745aa | Nicholas Feinberg | 2022-03-04 11:33:08 -0800 Add mon-death asserts Try to hunt down an odd rare crash. -------------------------------------------------------------------------------- 0cb962c1f0 | Antanishin, Ernest | 2022-03-04 19:58:56 +0200 feat: add tile_sidebar_pixels option The option allows one to resize inventory and spells icons in local tiles. It works in the same way as tile_cell_pixels for the dungeon tiles. [ Committer's note: Closes #2147, renamed option. ] -------------------------------------------------------------------------------- e5966c3f1e | Nicholas Feinberg | 2022-03-04 06:57:57 -0800 Tweak Sheza's Dance cast messages (SpicyCebolla) -------------------------------------------------------------------------------- 1a685ed5de | Edgar A. Bering IV | 2022-03-04 16:56:40 +0200 feat: distinguish drain levels in monster list (Aliscans) Closes #2411 -------------------------------------------------------------------------------- 85c4641d08 | Aliscans | 2022-03-04 16:08:38 +0200 feat: add annotations for distracted monsters Most of the reasons for a monster_info having MB_DISTRACTED give a description when the monster is selected on the level map, but not all. This creates two flags to fill in the gap. Monsters which you can see, but which can't see you because of invisibility, are described as "can't see you" in the examine surroundings command and monster list summary. Monsters which are distracted (possibly because they are attacking a summoned monster rather than you) ar described as "not watching you" or as "distracted". Co-authored-by: Aliscans -------------------------------------------------------------------------------- 602b31c20e | Nicholas Feinberg | 2022-03-03 20:06:52 -0800 Revise new uniques I'm quite happy with how Amaemon is doing post-nerf, but the others don't seem to be all there yet. Let's adjust. - Lodul: +8 avg mhp (62 -> 70) - Parghit: +large rocks, +damage (50/40/40; was 40/35/35). - Josephina: +HD (15 -> 18), +damage (10 -> 27), +HP (130 -> 150), +cast frequency (Seracfall 24 -> 36), +flash freeze - Vv: +damage (27/27 -> 45/45), +HD (21 -> 23), +HP (210 -> 270), +Will (120 -> 140), +25% cast frequency - Zenata: -HD (18 -> 15), -HP (240 -> 180), move from Depths/Zot to Elf/Vaults/Crypt, haste dancing weapons on cast. Also fix the Sheza's Dance casting message. -------------------------------------------------------------------------------- 4b928d7a4c | Nicholas Feinberg | 2022-03-03 19:49:42 -0800 New unique tiles (Sastreii) Amaemon, Josephina, and Parghit. Also properly display weapons for the former two - I initially forgot to have them show held weapons. -------------------------------------------------------------------------------- 20d21d4356 | Edgar A. Bering IV | 2022-03-03 23:35:32 +0200 lint: checkwhite -------------------------------------------------------------------------------- 645c86315e | Edgar A. Bering IV | 2022-03-03 23:15:23 +0200 vaults: fix a typo -------------------------------------------------------------------------------- dd60b7245b | RojjaCebolla | 2022-03-03 23:01:03 +0200 vaults: two arrivals by spicyCebolla spicycebolla_arrival_teleporter_tutorial Teleporters generally only show up in dangerous scenarios; this puts a pair of teleporters into an arrival vault for people to play with. These can also be used to juke gnolls and panlords, in times of need. (Inspired by the "throwing tutorial" key holder vault in Brogue, which shows up early and often in dungeon generation, helpiing the player learn that items can be thrown to trigger traps from a distance.) spicycebolla_arrival_xxxplode Minmay style. [ Committer's note: cleaned up some des, moved organization to small, fixed a teleport closet. Closes #2458 ] -------------------------------------------------------------------------------- 0f8c3457c7 | DreamDust | 2022-03-03 22:28:46 +0200 vaults: minivaults by DreamDust dreamdust_wishing_well Mini vault featuring a wishing well with some gold sprinkled around it. There's a small chance of a scroll of acquirement generating. Partially inspired by Nethack, + some nostalgia for when we used to be able to quaff from magic fountains in Crawl. [ Committer's note: simplified the terrain, the effect will be a bit more subtle but that's fine. ] dreamdust_mushroom_princess Just a simple vault featuring a princess statue surrounded by mushrooms. dreamdust_princess_bridge A bridge over a pond and a little courtyard area off to the side. dreamdust_princess_corridor A decorative corridor with three variations: summer, fall, and abyssal. [ Committer's note: also simplify some feature renames in a previous DreamDust vault, don't want to go overboard with these. All vaults edited based on review by hellmonk. Closes #2135 ] -------------------------------------------------------------------------------- 12ad11c1a6 | DreamDust | 2022-03-03 22:28:46 +0200 vaults: a DreamDust overflow temple A fancy temple dedicated to the three good gods. [ Committer's note: converted to an overflow temple ] -------------------------------------------------------------------------------- e8bc28a0cf | DreamDust | 2022-03-03 22:27:54 +0200 vaults: float vaults by DreamDust dreamdust_dug_too_deep The dwarves dug a little too deep and unearthed... a Balrug! Even a mighty dwarf hero (with a potentially good weapon to loot!) fell in battle to the demon. RIP. Maybe this is why we don't see deep dwarves much anymore. Hmmmm... The idea behind this vault is to place a single Balrug early enough that it's a serious (but not unmanageable) threat. I added a downhatch close by if players need to escape in a hurry. There are also warning signs in advance (all the dwarf corpses and the suspicious volcanic floor tiles outside the Balrug room). [ Committer's note: Added a runed door for the balrug, adjusted transparency, traded volcanic floor for blood. ] dreamdust_wu_jian_sword_trials A Wu Jian-themed vault. Challenge three increasingly powerful sword-wielders for their increasingly good swords. [ Committer's note: Adjusted depth range, added monsters to the earlier trial, trimmed arenas, added transperency. ] dreamdust_merry_men Inspired by Robin Hood and his band of merry men. Features a forest with a bunch of archers and a good bow and aides to banditry to loot in the center. [ Committer's note: Adjusted layout to prevent teleport closets, monster counts, loot. ] dreamdust_tengu_aerie A large nest of tengus. They keep their shiny loot in the center... along with their fledglings (wait, are we the baddies??). [ Committer's note: moved the crystal walls to the middle, put the rock wall on the outside (so the reavers can bolt bounce their omnibolts), and thinned the monster density. ] dreamdust_hydra_shepherd A shepherd is raising a flock (?) of hydras down in the Depths! Some players might regret abandoning their flaming weapons after finishing Lair/Swamp, haha. [ Committer's note: upgraded the cyclops to a stone giant, added a small chance for a really high head count. ] dreamdust_elfheim The home of Duvessa and Dowan. The more-practical Duvessa has training dummies in her room, while the vain Dowan has a large mirror to admire himself with. [ Committer's note: cut down on custom tiling/colouring a bit. ] -------------------------------------------------------------------------------- 7b655af5e2 | DreamDust | 2022-03-03 20:48:24 +0200 vaults: arrivals by DreamDust dreamdust_arrival_beginning_and_end Arrival vault that resembles the central orb chamber in Zot:5. Thought it would be cute (especially for new players) to realize it at the end of the orb run. dreamdust_arrival_sigmund_warning Beware the dreaded Sigmund, slayer of noobs! (and everyone else tbh, lol) -------------------------------------------------------------------------------- 0dae59b3db | DreamDust | 2022-03-01 21:11:17 +0200 Seven new vaults [ Committer's note: Edited accounting for gammafunk's feedback, thinned monster densities in a few places. Closes #2184. ] dreamdust_cave_troll Just a deep troll tucked away in a little cave. Using orient:northwest because I like how it looks when the level generator makes a path to the vault. Feels like a nice, cozy cave deep in the rock. dreamdust_gnoll_farm Just some simple gnoll farmers trying to make an honest living. dreamdust_gnoll_shepherd A cute little gnoll shepherd and his flock of dream sheep (or herd of yaks). dreamdust_wasp_nest A wasp/hornet nest! dreamdust_looks_like_rain A portal to the elemental plane of air briefly opened and spat out some clouds and monsters! dreamdust_zin_vs_xom Zin and Xom are having a skirmish in Zot. I think it's a nice contrast between Order and Chaos. dreamdust_under_siege The general idea is that you have a chance of going down some stairs and finding yourself in a little fortress under siege (usually by a swarm of undead). -------------------------------------------------------------------------------- 1125b37a9b | Nicholas Feinberg | 2022-02-28 17:35:56 -0800 Describe eruption damage in xv (ardl) This is a hack; the correct fix would be to make a zap. -------------------------------------------------------------------------------- 162f3ce599 | Nicholas Feinberg | 2022-02-28 17:21:31 -0800 Fix @ display for launchers with armour Broken by 9445043ebcbc046d65807a91ab1288053957184b. Closes #2450. -------------------------------------------------------------------------------- 945431f764 | Implojin | 2022-02-27 21:53:51 +0200 feat: add a new randart name of @god_name@'s Attic -------------------------------------------------------------------------------- 230a35465e | RojjaCebolla | 2022-02-27 21:52:43 +0200 text: new adjective and verbs for ran dart names, plus usage * Teach Trog adjectives and verbs example item names now possible: the Foo... (general) of Hungering Death of the Rescuing Gods of the Glowing God of Uskayaw, Screaming (trog) of Glamorous Victory of the Hopping Regicide of Barnacled Death (oka) of Okawaru, Healing (xom) "Xom, Gnashing and Baking" of Healing Xom -------------------------------------------------------------------------------- ce1ebfb2c9 | robertxgray | 2022-02-27 14:45:29 -0500 Update typed-ast to 1.4.3 This is required to run the server on Python 3.10+ -------------------------------------------------------------------------------- cf85d113b3 | Diego Essaya | 2022-02-27 14:40:39 -0500 fix: click + key modifier detection in tiles Fixes #898 -------------------------------------------------------------------------------- 9cf36f4b4d | RojjaCebolla | 2022-02-27 20:20:21 +0200 feat: remove identification scrolls from troves In the past year, identification scrolls have become increasingly less important as gear now is automatically identified, and never cursed. By the time players get into a trove, they generally will have no further use for scrolls of identify, so those should be removed from the trove.good_scroll table. In their place, we now have immolation scrolls, which are a fun tool for safely fighting large armies, and torment scrolls, so that these troves can be just as fun for demons/undead as they are for other species. These two additions are equally as common as scrolls of holy word. Finally, a small chance of the very powerful summon scroll. -------------------------------------------------------------------------------- ba8e22afda | Nicholas Feinberg | 2022-02-27 10:08:25 -0800 Move mu necro enhancers earlier XL 13/26 is too late to be relevant. Shift to XL 3/13 instead. -------------------------------------------------------------------------------- 54f80b8ed5 | Elliott Bernstein | 2022-02-27 20:08:00 +0200 fix: when felid has 2 lives, show actual died-now xp needed for next life Co-authored-by: Elliott Bernstein -------------------------------------------------------------------------------- b3188875b7 | Nicholas Feinberg | 2022-02-27 08:25:02 -0800 Adjust wight/necrophage XP They're pretty similar threats. Move necrophage to about 80 XP (from about 120, higher than a black bear or ogre) and bump wights to about 75 XP (from 60ish). -------------------------------------------------------------------------------- 7cd8c5c774 | Nicholas Feinberg | 2022-02-27 08:17:44 -0800 Tweak Phial of Floods description Clarify air breathing requirement. -------------------------------------------------------------------------------- 5b244fca1f | advil | 2022-02-26 09:48:58 -0500 fix: handle undefined item slots with action_panel_glyphs=true This can specifically cause a crash when dropping an artefact and then picking up something in the same slot, where it tries to get a glyph on an undefined item_def and artefact-related properties are in an inconsistent state. Possibly a pseudo-bug that flags are not reset for this case, or that get_item_glyph tries to do something for this case? (I think otherwise, this call was mostly was stable.) Resolves #2434 -------------------------------------------------------------------------------- ceb61267dd | advil | 2022-02-25 17:02:44 -0500 fix: improve some randart name grammar seems to need a determiner or noun. (I'm still not sure this is the most coherent randart name I've ever seen.) -------------------------------------------------------------------------------- 51b9c0fbd8 | gammafunk | 2022-02-25 09:59:46 -0600 fix: Remove a ghost vault restriction For ebering_ghost_funeral_grove, remove the restriction preventing Swamp:$ placement, since it no longer uses trees for its outer border. -------------------------------------------------------------------------------- 0a02b1cf4f | Nicholas Feinberg | 2022-02-24 17:15:28 -0800 Don't spawn Amaemon on D:7 Too rude. -------------------------------------------------------------------------------- f2abdc9806 | Nicholas Feinberg | 2022-02-24 13:48:19 -0800 Tweak frog hop targeter Don't show known invalid destinations as possible (occupied by actors, such as the player, or dangerous terrain). -------------------------------------------------------------------------------- ce79c09f71 | Nicholas Feinberg | 2022-02-24 08:03:50 -0800 Remove D skeletons too Missed em in the last commit, whoops. -------------------------------------------------------------------------------- 0c351c38d6 | Nicholas Feinberg | 2022-02-24 07:31:53 -0800 Bump down Amaeemon's HP/HD He was doing a little more direct damage than I wanted. HP from 92.5 to 87.5, HD from 10 to 7 (reducing accuracy and poison damage). -------------------------------------------------------------------------------- 29cdfe4e04 | Nicholas Feinberg | 2022-02-24 07:23:26 -0800 Remove most D zombies (hellmonk) Zombies aren't very exciting enemies. They're like other, existing monsters, except they don't have any cool gimmicks or definining features that those monsters have, and they make a bunch of nice items (poison darts/spells, ice magic, necro magic) useless. They're also not great for UI - it's harder to tell at a glance what you're fighting, or how tough it is. Let's cut em from normal D spawns. This is an early-game TSO nerf, but probably an overall buff to players. -------------------------------------------------------------------------------- 17f627cfee | Nicholas Feinberg | 2022-02-23 18:59:54 -0800 Fix missing regen space (ardl) -------------------------------------------------------------------------------- c45ea81df0 | nicolae-carpathia | 2022-02-23 21:42:27 -0500 Fix an error with a generic overflow vault that is NOT how the shuffle command works, did i write this at two in the morning, damn -------------------------------------------------------------------------------- 748a509809 | advil | 2022-02-23 18:55:44 -0500 fix: sanity check item quantity surely it is safe to add such a simple sanity check to low level item code, right? -------------------------------------------------------------------------------- 18cb72b20d | advil | 2022-02-23 18:33:38 -0500 fix: more info on invalid item tags.cc crashes The error for item_def::is_valid() had messaging, but it uses dprfs so wasn't visible in crashlogs. Since the game is going to crash anyways, let's actually print out these error messages. I've also reworded a bunch of them. -------------------------------------------------------------------------------- 9445043ebc | Nicholas Feinberg | 2022-02-23 09:27:28 -0800 Don't slow clumsy bashes with armour When attacking with launchers. -------------------------------------------------------------------------------- 989f1d9ccb | Nicholas Feinberg | 2022-02-23 08:33:23 -0800 Bring back Summon Scorpions tile Forgot this when adding Amaemon, whoops! -------------------------------------------------------------------------------- 7b0a884809 | advil | 2022-02-23 09:05:10 -0500 fix: tweak wording in a rampage prompt Rampaging is in general fine for wielded_weapon_check; it's only if your rampaging would trigger an attack that this verb is used in messaging. -------------------------------------------------------------------------------- f982a884d8 | Nicholas Feinberg | 2022-02-22 22:04:18 -0800 Remove anguish on leaving levels Maybe the cause of the mystery anguish bug..? Also, I hate this switch quite a lot. -------------------------------------------------------------------------------- 4a66f2e2b5 | Nicholas Feinberg | 2022-02-22 20:59:03 -0800 Allow LRDing Vvurtles (Nomi) Oversight! -------------------------------------------------------------------------------- 235afadefe | Nicholas Feinberg | 2022-02-22 18:54:55 -0800 Update job recs for og/tr (Lici) Now that you can't start with large rocks as Hu or AM, don't recommend them to trolls or ogres. AE background rec for ogre is semi-arbitrary. Seemed to have a high recent winrate for not excessively dubious reasons (wasn't a nem choice, wasn't one player streaking, etc). Seems reasonable for apts and so on (bouncing less dangerous when you have high HP). Might add Gl as a rec if a-good-start lands. -------------------------------------------------------------------------------- 8e21839460 | Nicholas Feinberg | 2022-02-22 18:42:21 -0800 Don't mention monster ammo When cursoring over a monster, and printing something like Here: a centaur, wielding a +0 shortbow, quivering arrows Cut the bit about 'quivering arrows'. Meaningless verbiage :) -------------------------------------------------------------------------------- 7cd6805d08 | Nicholas Feinberg | 2022-02-22 18:35:08 -0800 Fix: Don't slow throws with armour (Yermak, 12688) Oops! -------------------------------------------------------------------------------- 2e1b08cf00 | advil | 2022-02-22 21:25:47 -0500 feat: readd quivering/firing ranged weapons It's proven somewhat confusing to many players that the relevant UI elements no longer worked with launchers after ammo removal. This commit restores the ability to quiver launchers, allowing them (if quivered) to be triggered on default keybinds using `f` and `p`, as well as `v` and tab regardless of what is quivered. I've restored some corresponding options as well. It's entirely possible their defaults should be different than they used to be, if these are better viewed as compatibility options now. But for now, launchers are in the fire order (this never got removed), and `launcher_autoquiver` defaults to true. -------------------------------------------------------------------------------- 015645fbfe | advil | 2022-02-22 21:25:47 -0500 feat: add an explicit toss submenu Tossing is currently in a weird state where as more and more things become quiverable, they have two types of actions that could apply, making them harder to figure out how to toss. This is all sort of still in a mess for other menus, but this (quite basic) submenu is guaranteed to always use `ammo_to_action` and therefore only throw. -------------------------------------------------------------------------------- c7997b95f3 | Nicholas Feinberg | 2022-02-22 12:05:53 -0800 Launcher reform: update sling descriptions RIP rock v sling bullet dynamic -------------------------------------------------------------------------------- 542faf17db | Nicholas Feinberg | 2022-02-22 08:10:15 -0800 Fix a Jiyva jelly crash (?) If the player is damaged by a monster that's already dead (eg a guardian golem's inner flame), don't try to point jellies in its direction. I couldn't repro the crash, so not sure about this fix. -------------------------------------------------------------------------------- 28b64116f0 | Nicholas Feinberg | 2022-02-22 07:29:36 -0800 Roll-back post-AEVP delay launcher buffs When adding AEVP to launcher delay in af6a381e141a, I'd assumed that would be a considerable nerf that called for compensation. With the change to use dex for launcher damage shortly after, however, that no longer seems called for. Revert to more or less the weapon stats from a852ce8369264a3a4759b99df0bbba7645a78c97. -------------------------------------------------------------------------------- e3fb4bd5a4 | Nicholas Feinberg | 2022-02-21 19:05:10 -0800 Re-add launcher to-hit display (pdpol) This is a bit of a hack. Closes #2438. -------------------------------------------------------------------------------- 79605ca0cb | advil | 2022-02-21 19:50:11 -0500 fix: hide account hold div on force-logout Unintentionally still displayed after an account gets force logged out when an account hold is escalated to a ban. -------------------------------------------------------------------------------- 36e498a9cf | advil | 2022-02-21 19:50:11 -0500 feat: improve account-related logging This more consistently shows the IP address, and puts a substring that is very easily matched for scripts that want to pull out account-related logging from the main log. (This only will reliably log things that happen while a player is connected, so releasing a hold or removing a ban still won't show up here.) -------------------------------------------------------------------------------- 6e3aafee17 | Nicholas Feinberg | 2022-02-21 15:00:42 -0800 Fix fix -------------------------------------------------------------------------------- a21e45360d | Nicholas Feinberg | 2022-02-21 14:58:04 -0800 Fix kaux/ckaux Broken in 4e44252f3f24252e461ee3764b93ec7b8ad007b5, 9 months ago. -------------------------------------------------------------------------------- c9553a8f79 | Nicholas Feinberg | 2022-02-21 13:03:01 -0800 Pull back slightly on SpHu (Lightli) To compensate for dex increasing ranged weapon damage, make fustibali 2-handed and 3xbows unusable for spriggans. -------------------------------------------------------------------------------- 16cad56b0c | Nicholas Feinberg | 2022-02-21 09:47:50 -0800 Maybe fix a tossing crash (ardl) -------------------------------------------------------------------------------- 299514152f | advil | 2022-02-21 12:22:16 -0500 fix: (re)allow launching from `F` Previously this was implemented via ammo, which is gone. But it seems very confusing to not have launchers selectable from this menu, which after this change became limited only to throwing. This commit is a bit of a quick hack to do this, may need some more work. This means you can't use `F` any more to toss away a wielded launcher, though this is still possible via quivering it (with `Q**`). You can still toss a non-wielded launcher from this menu. More generally, it might be good to also allow quivering newlaunchers so that they still work with `f`/`p` (especially the latter, it's confusing that CMD_AUTOFIRE no longer has a way to fire for this case), but this will not be as easy so I'm not going to get to it immediately. The division of labor for autofight/autofire introduced with quivers may need some rethinking. -------------------------------------------------------------------------------- ca6a0d2473 | advil | 2022-02-21 12:06:24 -0500 fix: reenable anonymous spectating -------------------------------------------------------------------------------- 9aa386d172 | advil | 2022-02-21 09:44:16 -0500 fix: show lobby in a stable order with account holds I only had tested this in a python version where all dicts are ordered. Also, remove some traces of a pre-py27 compatibility shim for OrderedDict. (If anyone is still running this on py26, I don't know what to say. But probably not, because webtiles.load_games already dropped this.) -------------------------------------------------------------------------------- a23d9638d5 | Nicholas Feinberg | 2022-02-20 19:04:59 -0800 Give Vv a quote (ebering) There's probably better quotes from The Fifth Season - this was the first reasonable one I found. -------------------------------------------------------------------------------- 6546220326 | Nicholas Feinberg | 2022-02-20 19:04:48 -0800 Give Amaemon a signature weapon Don't drop that whip! -------------------------------------------------------------------------------- c2a82b186b | Nicholas Feinberg | 2022-02-20 15:47:36 -0800 Re-remove HINT_SEEN_RANDART Missed a few spots in 4be7dbf86b841721fccbcb6690ed74273671146d . -------------------------------------------------------------------------------- 2ef5e920f0 | Nicholas Feinberg | 2022-02-20 14:32:13 -0800 Remove Amaemon's corpse Every person is a whole world unto himself... but perhaps not a whole species. -------------------------------------------------------------------------------- d601ab35b5 | Nicholas Feinberg | 2022-02-20 13:30:48 -0800 Revert "chore: add a trunk reminder for the 0.28 tournament" This reverts commit 03a7b78be7a97b61e3ccfaa102cec36b0ca111bc. -------------------------------------------------------------------------------- 599418656c | Nicholas Feinberg | 2022-02-20 13:28:26 -0800 Ru melee redirection refactoring -------------------------------------------------------------------------------- 65f304602f | Nicholas Feinberg | 2022-02-20 12:35:52 -0800 Unbrace files.cc -------------------------------------------------------------------------------- 9fbeeb3dcf | Nicholas Feinberg | 2022-02-20 12:33:39 -0800 More mut description tweaks Cut more mut descriptions that are (IMO) non-actionable, and add the overlooked MUT_FANGS to dataified descriptions. -------------------------------------------------------------------------------- ca93a6e943 | Nicholas Feinberg | 2022-02-20 12:33:39 -0800 Trim Jiyva mut descriptions I don't think that the details here are helpful to players. You can't really control these muts, so what do detailed numbers get you? How will you play differently? It doesn't seem like something that will meaningfully affect play. -------------------------------------------------------------------------------- b9ea505e61 | Nicholas Feinberg | 2022-02-20 12:33:39 -0800 Tweak Ru eye desc -------------------------------------------------------------------------------- 507d7b0529 | Nicholas Feinberg | 2022-02-20 12:33:36 -0800 Programmatic aux descriptions -------------------------------------------------------------------------------- b4860018a3 | Nicholas Feinberg | 2022-02-20 12:33:36 -0800 Dataify aux attack trigger chances -------------------------------------------------------------------------------- adaf126bc6 | Nicholas Feinberg | 2022-02-20 12:33:36 -0800 Fancy Lua horns description -------------------------------------------------------------------------------- bb7b57aa70 | Nicholas Feinberg | 2022-02-20 12:33:36 -0800 Beak -------------------------------------------------------------------------------- 0ef5763bac | advil | 2022-02-20 12:33:36 -0800 docs: attempt to despoiler various aux/retaliation muts I say "attempt" because this stuff is complicated enough that there may be all sorts of mistakes in here still, or even some random rolls I've missed entirely. In many cases I have chosen to give slightly round numbers (e.g. 40% rather than 38%), maybe these should be made exact. Also, this is a lot of numbers, but I think we have become pro-numbers enough for this sort of change. This commit began in response to https://www.reddit.com/r/dcss/comments/svj867/demonic_touch_utterly_useless/ where it became apparent that how this particular mut worked was completely opaque to players (especially since its behavior is pretty atypical), but once I started doing this it became clear to me that basically all of these would be better with more information. I've tried to get all of the direct combat effects in this change. Some of the Ru mutations that are responsive (e.g. no potion heal) could maybe use similar work. -------------------------------------------------------------------------------- c3e01e4e4d | Nicholas Feinberg | 2022-02-20 12:29:54 -0800 Fix Josephina vault (geekosaur) ??oops -------------------------------------------------------------------------------- fffab11c1d | Nicholas Feinberg | 2022-02-20 12:27:44 -0800 Add item descriptions to monster So no one ever has to maintain the ldb book entries ever again. This is quite ugly but mostly works? -------------------------------------------------------------------------------- cd8f6311e7 | Nicholas Feinberg | 2022-02-20 12:27:21 -0800 dgn_place_item refactoring -------------------------------------------------------------------------------- 96d55e26a3 | Nicholas Feinberg | 2022-02-20 12:26:55 -0800 Checkwhite hints changes -------------------------------------------------------------------------------- 5e4a951760 | Nicholas Feinberg | 2022-02-20 12:26:55 -0800 Add a malevolence (explore trap) hint -------------------------------------------------------------------------------- 4be7dbf86b | Nicholas Feinberg | 2022-02-20 12:26:55 -0800 More hints updates Remove references to allies stealing XP (now only true for Beogh), and rewrite HINT_YOU_RESIST to be a bit clearer (maybe!). Remove HINT_SEEN_RANDART (would generally only show up once a randart was already IDed) and tweak the description of Spellcasting skill. Don't bother noting demon tiers, and don't claim that statues are notable or hide 'special areas'. -------------------------------------------------------------------------------- 0c76a2f6e3 | Nicholas Feinberg | 2022-02-20 12:26:55 -0800 Remove HINT_FLEEING_MONSTER Mostly obsolete since 5cea4aff0001 (2012), 13c00676f0 and f1aa33a6750 (2013), and completely obsolete after b8068419c757 (2015). -------------------------------------------------------------------------------- fc0c1e2a9a | Nicholas Feinberg | 2022-02-20 12:26:55 -0800 Fixup HINT_EXCOMMUNICATE Don't claim you get wrath for abandoning a good god (or Ru) and not worshipping a new god. Also, dedent. -------------------------------------------------------------------------------- 491e7b286d | Nicholas Feinberg | 2022-02-20 12:26:55 -0800 Update HINT_CONVERT -------------------------------------------------------------------------------- bc0daef7cc | Nicholas Feinberg | 2022-02-20 12:26:55 -0800 Cleanup NEW_ABILITY_GOD -------------------------------------------------------------------------------- 477d20c3ff | Nicholas Feinberg | 2022-02-20 12:26:55 -0800 Misc hints cleanup -------------------------------------------------------------------------------- ca3a83724e | Nicholas Feinberg | 2022-02-20 12:26:55 -0800 Simplify wand use advice logic -------------------------------------------------------------------------------- 566ef67269 | Nicholas Feinberg | 2022-02-20 12:26:55 -0800 Remove HINT_SEEN_CARRION Irrelevant in a post-butchering world. -------------------------------------------------------------------------------- d8e2eab272 | advil | 2022-02-20 15:24:02 -0500 refactor: clean up `chr` chunk loading This was sort of impressively convoluted and bad: the tag code read chr chunk data directly into `you`, and then a `player_save_info` object was constructed from that. In most cases, this was wrapped in code that made a copy of `you` and then restored it after getting the info object. There were also all sorts of inconsistencies in what data was stored in this object. I'm guessing no one really wanted to mess with this old code where the cost of breaking things is high, but I'm going to give it a short here. This commit: * Cleans up `player_save_info` to exactly match the data in the `chr` chunk, aside from version info (and doll info used for tiles main menus). Add a few fields, remove one (`experience`) that seems to be completely unused. * Add a constructor to `player_save_info` to handle default values a bit more cleanly * Rewrite the tag code to read directly to a player_save_info object, and only copy data into `you` on demand * more comments, code reordering to match chunk data order, slightly better error messages in a few cases -------------------------------------------------------------------------------- 57cb919b73 | advil | 2022-02-20 15:24:02 -0500 fix: simplify and fix setup for save info CLOs `-save-version` was broken because it didn't correctly reset paths. In addition, I'm pretty sure that these don't need a full options reset. (Possibly I'm wrong, we'll see -- if there's mysterious uninitialized memory crashes, it'll probably just break the webtiles save viewer again and nothing else.) -------------------------------------------------------------------------------- 8aa3a5f11e | advil | 2022-02-20 15:24:02 -0500 fix: webtiles save info collection This broke around b939be14790 but I hadn't sat down to figure out what happened until now. (Amazed that there was never an actual issue about this that I'm aware of!) It may have been sort of a blessing in disguise as at least on CAO this callback chain has become pretty heavy and often times out. We'll see... -------------------------------------------------------------------------------- e9b396fb19 | Nicholas Feinberg | 2022-02-20 12:22:37 -0800 Allow looking up unrands in ?/I This was surprisingly annoying! -------------------------------------------------------------------------------- 8338fcb62e | Nicholas Feinberg | 2022-02-20 12:21:12 -0800 Don't let nymphs/elios port to unseen foes (dinky) That is, if you're invisible, don't let water nymphs waterport or eleionomae treeport to you. Also, dedent the water nymph logic. -------------------------------------------------------------------------------- 15338bc10e | Nicholas Feinberg | 2022-02-20 12:20:01 -0800 Tweak Merfolk weapon aptitudes (Hellmonk) Trade a point of Polearms for a point of Long Blades. At +3 polearms, Merfolk will still be extremely strong polearms users, but it'd be nice for them to occasionally have some reason to do something else. (Especially with impending changes to long blades.) -------------------------------------------------------------------------------- 32946d4e34 | Nicholas Feinberg | 2022-02-20 12:19:30 -0800 Make Jiyva less verbal Jiyva doesn't seem like much of a talker. Possible that J penance should be rethought regardless, but for now... -------------------------------------------------------------------------------- 68506e6fbd | Nicholas Feinberg | 2022-02-20 12:19:07 -0800 Disable the MCC targeter by default It seemed to mostly confuse players by leading them to think that the spell was targeted, since they could move the cursor around while in the targeter. It's also not super useful, since whatever monster is highlighted when you start the spell may not be the eventual victim. The MCC targeter can still be seen by quivering and (f)iring the spell, or by adjusting the rcfile. -------------------------------------------------------------------------------- d9437148fb | Nicholas Feinberg | 2022-02-20 12:18:29 -0800 Slot name: armour -> body armour To avoid confusion that the Armour skill only applies to the Armour slot. -------------------------------------------------------------------------------- 67d208b9ac | Nicholas Feinberg | 2022-02-20 12:16:14 -0800 Remove most uniques from Tomb Tomb has its own thing going, and most of these guys aren't really scary by the time you get there. (<0.6% recentish killratio.) Also drop Mara and Parghit from Crypt; former for killratio reasons (0.2%) and latter for thematic ones. Parghit is a winner! He's heading for the orb! No reason for him to be in the Crypt. -------------------------------------------------------------------------------- 06d020a549 | Nicholas Feinberg | 2022-02-20 12:16:14 -0800 New unique: Zenata, Seeker of Sheza Zenata is another late-game unique (appearing in Depths, Zot &c), borrowing a bit from the Desolation of Salt and putting a twist on it. She's taken the ragged hierophants' "Resonance Strike", which is like airstrike that gets bonus damage from adjacent constructs instead of from open spaces, and uses it in conjuction with a new "Sheza's Dance" spell, which summons 2-4 dancing weapons. To encourage players to kill her, she comes with a high-tier weapon with some plusses already on it. Zenata's theme is intended to expand slightly on the Desolation lore. She entered the Dungeon to look for secrets of the old Sheza/Sargol cult, the Divine Twins that ran the Desolation of Salt before it was a desolation. The bits and pieces she found required her to replace more and more of her flesh with metal to unlock their power... but hey, upgrade! :) -------------------------------------------------------------------------------- 226d363e7e | Nicholas Feinberg | 2022-02-20 12:16:14 -0800 New unique: Vv the Exile Vv is a combination of ironbound frosthearts (Creeping Frost) and Salamander Tyrants (Eruption/Pyroclastic Surge), appearing in Depths, Zot, Crypt and Tomb. She's themed as a new species, the Stoneborn, sentient earth elementals. She also has strong defenses and AF_FIRE and AF_COLD melee. I haven't yet added any loot for her, to incentivize players to tussle with her. The XP and curiosity might be enough for now. The theme is intended to push in a different direction from uniques like Parghit and Josephina. The former expand on existing lore. Vv, by contrast, expands the world of DCSS by suggesting the existence of something greater outside the game's current bounds. -------------------------------------------------------------------------------- 375cf7ae12 | Nicholas Feinberg | 2022-02-20 12:16:13 -0800 Fix new VISUAL monspeak entries -------------------------------------------------------------------------------- 69db86b63c | Nicholas Feinberg | 2022-02-20 12:16:13 -0800 New unique: Lodul the Thundrous Lodul is an ironbound thunderhulk who's been sent to patrol outside the Vaults, in late D. He's got a weaker version of Call Down Lightning (lower HD) and a big band of ogres and two-headed ogres to help him keep distance from the player. Defensively, he looks a lot like Erolcha. His loot is a big pile of gold. Nothing like cash to bribe players into potentially risky fights :) -------------------------------------------------------------------------------- 9cfbde7411 | Nicholas Feinberg | 2022-02-20 12:16:13 -0800 New unique: Amaemon the Diabolical Poisoner Amaemon is Crawl's first demonspawn unique, appearing in mid-D, early Lair and Orc:1. Alongside his orange demon companion, Amaemon summons scorpions (the classic returns!) and casts Concentrate Venom, upgrading his allies' poison into curare. To encourage players to try to kill him, he wields a demon whip of venom, with 1% chance of the unique Snakebite. -------------------------------------------------------------------------------- 618b504a9a | Nicholas Feinberg | 2022-02-20 12:16:13 -0800 New unique: Josephina the Ice-Lich As one more 'alt-timeline' unique, Josephina is an upgraded version of Josephine. She appears in late Vaults, Depths, Crypt, Tomb and Zot, and borrows Wendigo Seracfall (turning simulacrula into 3d33 bombs) to add to her classic Ghostly Fireball. She comes with a guaranteed randart ring of ice. I suspect a lot of the numbers here will need more fine-tuning. She might be a bit of a glass cannon at the moment, especially with the rF-, and I think the placement range is probably a bit off. -------------------------------------------------------------------------------- 141cb85572 | Nicholas Feinberg | 2022-02-20 12:16:13 -0800 New unique: Parghit the Mighty Following the example of Maggie/Margery, Parghit is an "alt-timeline" version of Pargi. Parghit appears in late Depths, Zot, Crypt and Tomb, and sports high-enchantment golden dragon scales (with a 1% chance of wearing the Dragon King) and an astonishing 27 HP regenerated per turn. He's definitely killable, but best not underestimated. I considered also giving him large rocks. It seemed rude, but I might go back to that if it seems appropriate. Credit Hellmonk for several parts of this idea. -------------------------------------------------------------------------------- 920eff52f4 | Nicholas Feinberg | 2022-02-20 12:15:54 -0800 Mark dummy species mons as NO_GEN_DERIVED Don't spawn Palentonga zombies in Crypt. They're not real monsters! -------------------------------------------------------------------------------- 1eaea45740 | Nicholas Feinberg | 2022-02-20 12:12:34 -0800 Change the Woodcutter's Axe into a battleaxe Pushing back a bit on the original design principle, make skill matter a bit more (multiplying a higher base damage & augmenting a lower base accuracy), and add another tradeoff (2-hander status). I'm not adding save compat, so anyone upgrading from an older version can have both an off-hand and the woodcutter's axe until they unequip something. Bonus! :) -------------------------------------------------------------------------------- e3029af5aa | Nicholas Feinberg | 2022-02-20 12:05:40 -0800 Make ranged weapons use dex instead of str for damage After e08ca24d97b194, strength became extremely valuable for ranged weapons. It increased damage quadratically: not just multiplying the base damage of the weapon, but also increasing attack speed while wearing armour. This isn't the end of the world, but it does seem more intuitive that dexterity should be the desirable stat for ranged weapons. So, let's make ranged weapon damage scale with dex instead of str. Str is still quite valuable for ranged characters to allow them to use heavier armour, just a bit less so. -------------------------------------------------------------------------------- 85b37ae345 | Nicholas Feinberg | 2022-02-20 12:05:40 -0800 Make blades use dex instead of str (hellmonk) To differentiate long blades further from other weapon classes, make Dex increase their damage instead of Str, in exactly the same way. It would feel very weird if lbl used dex but sbl still used str, so change sbl to match as well. Possible that some sbl nerfs could be called for after this? Probably it's fine. -------------------------------------------------------------------------------- 7cd8695230 | Nicholas Feinberg | 2022-02-20 12:05:40 -0800 Ammo removal: more hints updates -------------------------------------------------------------------------------- af6a381e14 | Nicholas Feinberg | 2022-02-20 12:05:40 -0800 Add AEVP to ranged weapon delay Ranged characters in Crawl generally feel rather similar to melee characters. Other than dealing with ammo - which tends to be mostly busywork, rather than a meaningful or interesting set of choices - ranged characters feel like polearm users with a very very long pole. This is not great for variety, and it's also not very intuitive. A player could reasonably expect that a ranged character should look different from a melee character - Robin Hood and Legolas aren't running around in plate armour! So, let's fix that. As of this commit, AEVP is now added to missile weapon attack delay. As usual, this is reduced significantly by Str and slightly by Armour skill. Some sample numbers: - Starting human hunter in leather: +0.042 delay - Starting human hunter in plate: +0.864 delay - 30 str, 16 armour, plate: +0.253 delay - 50 str, 27 armour, plate: +0.097 delay - 50 str, 27 armour, crystal plate: +0.159 delay - 5 str, 0 armour, crystal plate: +2.645 delay - 20 str, 10 armour, swamp dragon: +0.066 delay (Delays below 0.1 are randomized with every attack. For example, an added delay of 0.042 has a 42% chance of slowing an attack by 0.1.) In compensation, ranged weapons' have gotten various buffs; most weapons have seen their base damage has been increased, and slings have seen their base delay decreased. The expectation is that players will be encouraged to choose somewhat lighter armour than they might otherwise, making ranged characters feel more different from melee. It also makes ranged weapons somewhat less attractive as a swap for melee characters. All numbers subject to change. -------------------------------------------------------------------------------- 34d9ade26b | Nicholas Feinberg | 2022-02-20 12:05:40 -0800 Update the quick-start guide for ammo removal -------------------------------------------------------------------------------- b9b4b4cd67 | Nicholas Feinberg | 2022-02-20 12:05:40 -0800 Give kobolds +3 xbows As something they're better at than other races (being mechanically inclined), it's nice to accentuate that strength a little more than their former +2. Plus, it's funny to give a race that has a big obvious disadvantage for ranged combat (reduced LOS) a great apt for it - creates a different kind of experience! -------------------------------------------------------------------------------- 216ade4d86 | Nicholas Feinberg | 2022-02-20 12:05:40 -0800 Remove an unused variable (Aliscans) -------------------------------------------------------------------------------- ed46df0f1f | Nicholas Feinberg | 2022-02-20 12:05:40 -0800 Mark launcher ammo as removed (Aliscans) -------------------------------------------------------------------------------- a852ce8369 | Nicholas Feinberg | 2022-02-20 12:05:40 -0800 Play with ranged weapon stats more Following some thinking about ranged weapons, here's a new set of ammoless stats. Philosophy: - Slings are high-skill 1-handers. Hunting slings are vaguely like war axes, and fustibaluses are no longer ultra-rare but are now more like broad axes. - Bows are high-skill 2-handers. - Crossbows are lower-skill - it takes fairly little to get the hand crossbow or the arbalest to mindelay. The triple crossbow is still high-skill, but it's quite rare, so doesn't define the 'feel' of the class, much as you can't rely on finding a triple sword as a lbl user or an exec axe as an axe user. (Unless a gifting god gets involved.) If we're going to keep all these item classes, it would be great to have some more obvious and pronounced gimmicks. I suspect we'll end up merging or removing some of these at some point, but that's a larger project than I'm ready for right now. TODO: make fustibali spawn at a higher rate - right now they're about 1/5th as common as I'd like. -------------------------------------------------------------------------------- 9b9ebdfc37 | Nicholas Feinberg | 2022-02-20 12:05:40 -0800 Remove launcher ammo from the \ menu (Aliscans) -------------------------------------------------------------------------------- a30ec57329 | Nicholas Feinberg | 2022-02-20 12:05:40 -0800 Remove throwing weapon hunter start (Aliscans) Throwing weapons were always an odd fit for the hunter background. They aren't a primary playstyle or 'killdudes' method like ranged weapons, but they were presented in the same way. Now that hunter's lost its short sword, it's an especially odd fit. Let's cut the throwing start for now. I think in the near future we might bring back additional throwing ammo as a supplement to another background, either Gladiator or Brigand (or perhaps both?). -------------------------------------------------------------------------------- cb38ff9839 | Nicholas Feinberg | 2022-02-20 12:05:40 -0800 Remove webtiles launcher quiver -------------------------------------------------------------------------------- d562ef3a11 | Nicholas Feinberg | 2022-02-20 12:05:40 -0800 Remove the short sword from the hunter start No longer needed. -------------------------------------------------------------------------------- 39307501d7 | Nicholas Feinberg | 2022-02-20 12:05:40 -0800 Adjust ranged weapon stats post-ammo Mostly reduce numbers across the board, since players are no longer constrained by ammo. Slings are a little sad about the loss of sling bullets and so don't get hit quite as hard as the others. I playtested these and kept turning numbers downward until just mashing o-tab on a HuHu would get me killed somewhere in early-mid D. (With no numerical tweaks, it was pretty trivial to reach Lair, and probably to just win.) -------------------------------------------------------------------------------- 3bbc7b7260 | Nicholas Feinberg | 2022-02-20 12:05:40 -0800 Remove ammo from vaults, sprints & the tutorial -------------------------------------------------------------------------------- 13dfb44323 | Nicholas Feinberg | 2022-02-20 12:05:38 -0800 Adjust item gen for ammo removal Drop non-vault loot proportionate to the weight of old arrows, bolts, etc. Counting vaults, overall game loot will be slightly higher - maybe about 2%? -------------------------------------------------------------------------------- 4fc27e4f60 | Nicholas Feinberg | 2022-02-20 12:04:49 -0800 Allow firing with v Since launchers no longer use ammo, there's no reason for them to interact with the quiver system. Instead, make them fire using 'v', like polearms or other melee weapons. Tab also works. If people request, maybe there could be an option to have 'f' always fire a held ranged weapon, rather than using the quiver. -------------------------------------------------------------------------------- a8e9c987b8 | Nicholas Feinberg | 2022-02-20 12:04:47 -0800 Remove launcher ammo Ranged weapons in Crawl have long contained a painful tension. On the one hand, their design suggests that the player is expected to use them as their primary means of killing enemies. They have dedicated weapon skills, imposing a substantial strategic cost to reach mindelay with any given type, and there's a tactical cost to switching between them and melee weapons. On the other hand, the limited ammo supply suggests the player is expected to conserve ammo in some way. The only real way to do this is to use other means (i.e. melee weapons) to kill some enemies. However, there's still more than enough ammo to kill any really threatening enemy, and later on there tends to be more than enough ammo to make its limitations meaningless, especially for followers of Okawaru. Thus, ammo currently provides no really interesting tactical or strategic decisions, just busywork. It seems that ammo should either be made much more restrictive, so that the player is rewarded for engaging with it, or removed. If we made ammo much scarcer, such that players could only kill a few very dangerous enemies with it, players would generally be forced to train something else as their primary 'killdudes' skill, and use ranged combat as a supplement. This would end up looking quite a lot like Throwing or Evocations, but with a worse UI, since players would need to switch weapons rather than just pressing 'F' or 'V'. This seems uncompelling. As such, let's cut ammo entirely. Monsters *already* had infinite ammo, and players can follow suit. Subsequent commits will deal with the small print. -------------------------------------------------------------------------------- d09b832af6 | Nicholas Feinberg | 2022-02-20 11:48:37 -0800 Remove launcher ammo acquirement This will be meaningless very soon. (See following commits.) -------------------------------------------------------------------------------- 8efb068a30 | advil | 2022-02-19 14:01:43 -0500 feat: indicate stateful ?tele behavior in ItemUseMenu The stateful behavior of scrolls of teleportation is kind of easy to forget about, and also unique (I think) among consumables. Because of this, it seems helpful to indicate if it will cancel an existing teleport explicitly. I've done this in the `r` menu, another place this could be done is in the item description itself. -------------------------------------------------------------------------------- ba4477c8fd | Nicholas Feinberg | 2022-02-19 07:47:14 -0800 Add Ignis to db_lint (SpicyCebolla) -------------------------------------------------------------------------------- 4040846114 | Nicholas Feinberg | 2022-02-18 21:46:58 -0800 Fix Throatcutter player tile (Gwynnette) -------------------------------------------------------------------------------- 06d03a830b | Nicholas Feinberg | 2022-02-18 12:21:35 -0800 Remove a spurious tracer check Didn't quite think that one out. -------------------------------------------------------------------------------- 097e55589a | Nicholas Feinberg | 2022-02-18 12:20:20 -0800 Fix quiver/summon warnings (CarefulOdds) Don't check for interactions with ongoing AOE attacks (OTR, Polar Vortex, &c) when you're just quivering a summon spell. Only check on cast. Closes #2429. -------------------------------------------------------------------------------- 99c160cdfe | Nicholas Feinberg | 2022-02-18 11:01:33 -0800 Fix Shilleiagh noise (frdfg) When Devastator was added in 9cc3ee3f91d, it was intended to make 7 noise with every hit. However, since it was an explosion, it accidentally made 15 noise instead, and hence the wiki noted it as making 'fireball-level noise'. This continued for 10 years until 58ad9d9fa3b, which accidentally muted it while trying to make Irradiate silent. This commit restores Devastator to its intended 7 noise per hit. -------------------------------------------------------------------------------- 5b5bac981a | advil | 2022-02-18 10:14:58 -0500 feat: a means of preventing player ghosts from held accounts This is implemented a bit generally for maximum compatibility, but because it uses the new `-no-player-bones` option, a held account will not be able to start games with crawl binaries that do not support this. This applies both to old versions and forks. I will cherry-pick the options commit to a few stable versions back. Should have no impact on servers that aren't using account holds. -------------------------------------------------------------------------------- abffb2d2b2 | advil | 2022-02-18 09:28:53 -0500 feat: add a CLO to prevent writing player bones This is not really intended as a player facing feature (it doesn't prevent ghosts from being generated or anything like that), but as an option to support community management features on webtiles. Implementing as a separate commit to make it easier to backport. -------------------------------------------------------------------------------- 078de9bc30 | Nicholas Feinberg | 2022-02-17 19:49:28 -0800 Display irradiate damage in monster (ardl) -------------------------------------------------------------------------------- 501f64c9ef | Edgar A. Bering IV | 2022-02-18 04:39:55 +0200 feat: smooth early super ood cap and document In des syntax the glyph `8` means depth * 2 + 4. A "super ood". The glyph `9` means depth + 5, a "moderate ood". Both of these are constrained in D:1-8 at present, the maximum vault OOD is depth * 2 over D:1-8. This cap expires after D:5 for `9`, but continues to impact the meaning of `8` until D:8. The result is that from D:8 to D:9 there's a large jump in difficulty of vaults. This commit smooths things, so that the additive term goes up by 1 for each floor afte D:8 until reaching its full value by D:12 (at which point `8` means max depth since the cap of D's OOD table is 27). -------------------------------------------------------------------------------- baf749a769 | CipHuK | 2022-02-16 19:39:45 -0800 Fix: Don't warn on trying to summon rPois allies This is quite fragile, but maybe it's less annoying than the alternative. It'd be good to do the same trick for toxic bog and fliers. [Committer's note: did various cleanup and fixes.] Closes #2424. -------------------------------------------------------------------------------- 189f89ecda | advil | 2022-02-16 17:53:56 -0500 fix: check webtiles db flags more consistently and act on them This improves the handling of using the cli to change the ban/hold state of players who are currently logged in. The main change to db access is that the flags are updated when starting a game, and changes (in either direction) should take effect immediately. To get this to work I had to improve some of the logout handling (which previously relied on a reload, and couldn't be triggered from the server). Hopefully the I/O cost of this extra db check on I/O-bound servers isn't impactful, we'll see. This commit also fixes a bug where a held account that tries to spectate got the error info through the wrong message (well, the right one didn't exist yet) causing the user/password boxes to reappear. -------------------------------------------------------------------------------- 613497d651 | advil | 2022-02-16 17:01:34 -0500 feat: add a cli command to list only account holds In a real server in practice, the bans list can get pretty nsfw / unpleasant to see. So it's useful to have a way to look only at account holds for normal maintenance. -------------------------------------------------------------------------------- dac63da4db | advil | 2022-02-16 15:39:14 -0500 fix: allow disabling yaml games definitions Since these aren't templated on dgl setups, they are a bit of a pain to deal with even if the goal is just to remove the default one from trunk or prevent its installation. This commit provides another approach, where you can set the directory to `None` and skip loading yaml game definitions altogether. -------------------------------------------------------------------------------- 0523dad39a | gammafunk | 2022-02-16 11:55:29 -0600 fix: Add a missing vault definition and refactor For bailey_polearm_vampire_castle_hellmonk, one of the vampire weapon definitions was missing its vampirism ego, which the others all had. Also reformat the monster definition, simplify NSUBST syntax, and align indent. -------------------------------------------------------------------------------- 0a07039d5a | Nicholas Feinberg | 2022-02-15 21:23:51 -0800 Tweak branch entrance noise messages (Booper) "Less far" is very awkward. Closes #2427. -------------------------------------------------------------------------------- 6e81df9875 | Nicholas Feinberg | 2022-02-15 20:46:08 -0800 Fix an typo (FizzleBang) -------------------------------------------------------------------------------- 4b50743c59 | hellmonk | 2022-02-15 20:13:30 -0500 nerf vampire castle bailey -------------------------------------------------------------------------------- 37f86683bf | advil | 2022-02-14 18:34:46 -0500 feat: webtiles reload on SIGHUP This is a long requested feature whose implementation is made more tractable by the separation of config.py and the webtiles.config module. I'd still definitely put this in the "experimental features" category. It will probably go badly for at least some options, but I've tested it on the account disable-type features I added recently, and it works well for those. Game data reload looks to work fine but I haven't tested it very carefully (e.g. no idea what would happen if someone is playing a game that got removed, etc.) The implementation is tied to an option and disabled by default, both because I'm not sure how well it will work in practice, and because I have the impression some dgl setups may have used SIGHUP to stop the server at some point, and enabling this by default would break init.d scripts. -------------------------------------------------------------------------------- 45d3ea808a | advil | 2022-02-14 18:11:52 -0500 feat: various account management enhancements Nick restriction improvements: * Allow defining a custom name check function in config. Some things are a bit easier to do this way than with a regex. Two restricted registration modes: * set `new_accounts_disabled` to disable new account creation altogether. This is a bit quick and dirty, and users currently don't get an error until they hit the submit button. * set `new_accounts_hold` to allow new account creation, but mark any new accounts with an "account hold" flag. This flag: - prevents login via ssh, where relevant. (It just sets the ban flag, so messaging to players may be confusing..) - prevents the account's games from appearing in the lobby or being spectated. - prevents the account from using chat. - prevents the account from spectating altogether. (Of course they can log out and spectate as anonymous.) - Players with this flag can still play games. - This flag is implemented as a new dgamelaunch db flag. Since dgl itself hasn't added any flags in like 15 years, hopefully this is safe. The account hold flags can be set and cleared via the wtutil.py command line tool. I'd like to add an admin panel interface too, but that isn't done. Ths flag, if set, has an effect even when the new account hold mode isn't enabled, so it can also be used as a kind of soft ban if someone is causing trouble in chat but for whatever reason isn't judged to merit an outright ban. -------------------------------------------------------------------------------- 0f647bec9a | advil | 2022-02-14 09:38:39 -0500 fix: check ban flag for token logins I think I didn't add this before because it is awkward to check at the point of login without adding another db call. However, user flags are collected from the db shortly after the point of checking the token, so this is a perfectly workable point to check the ban flag again. (Some of this code could perhaps be consolidated.) -------------------------------------------------------------------------------- 60f898f876 | advil | 2022-02-13 17:12:39 -0500 feat: more verbose new account logging This information was accessible, but needed digging in the logs by cross-referencing a socket, or digging in the db. I could see an argument that the email value is better not reported in a logfile, but I'm going to include it for now. -------------------------------------------------------------------------------- 80d8537514 | advil | 2022-02-13 17:11:19 -0500 fix: handle nonexistent accounts in ban checks This was crashing on None values and therefore not displaying the "login failed" message. -------------------------------------------------------------------------------- 25f29fbe20 | advil | 2022-02-13 15:18:29 -0500 fix: stabilize serpent of hell placement The previous code was a bit of a pain to understand, and also seems to have never been updated for pregeneration. This simplifies the calculation, and restructures it to not rely on player exploration. It is still entirely possible for hell end vaults to mess this up. -------------------------------------------------------------------------------- 88c9fad16d | hellmonk | 2022-02-12 23:37:05 -0500 Unthin early D loot This was reduced as part of D:1 item gen changes but seems to have been unnecessary. Taking this back up to prior levels. -------------------------------------------------------------------------------- 93358da72b | hellmonk | 2022-02-09 21:59:09 -0500 feat: Xom orb gift speech -------------------------------------------------------------------------------- 6187a340c9 | hellmonk | 2022-02-09 21:28:40 -0500 slightly nerf bailey_axe_minmay_hex_keep -------------------------------------------------------------------------------- 258763100d | hellmonk | 2022-02-09 21:26:26 -0500 fix floor tiles in a bailey -------------------------------------------------------------------------------- 1f87ffd4f4 | hellmonk | 2022-02-09 21:24:55 -0500 fix: Nightstalker stealth Give 50 stealth at mutlevel 3 instead of 48. -------------------------------------------------------------------------------- ee772dd00f | advil | 2022-02-08 10:38:20 -0500 fix: regularize confused self-attacks (perryprog) Previously, there was basically one way where a monster could accidentally hit itself while confused (with a number of other rare special cases): if it targeted another monster, `mmov` would be reset after the `fight_melee` call, and then the later there's an additional 1/6 chance for a self-attack. There's code that appears intended to handle a similar player case in `_monster_move`, as well as a chance on top of the monster rolling mmov as 0,0, but these were unreachable due to variously an earlier batch of code that handles attacking the player, and an early return if `mmov.origin()` is true. This commit regularizes things to what appears to be intended. Further tweaks may be justified, and in particular I'm not sure the purely random chance of self-attacking is needed. After this commit: 2/3 chance of stumbling, with a 1/n chance of rolling 0,0 (n=habitable spaces), and then a 1/6 chance of a self-attack. So *probably* rare enough to be not worth kiting to get. If the monster targets another monster, or (now fixed) the player: a 1/6 chance of a self-attack on top of the swing. Oddly (?), this doesn't change energy and the monster always gets a swing for this case, so they attack twice for the usual energy cost. As noted in the comments, I'm interpreting this as a kind of slapstick effect. But it might be more consistent if that 1/6 roll attacked themselves *instead* of the intended target, not sure. -------------------------------------------------------------------------------- debf4667c2 | advil | 2022-02-06 12:40:32 -0500 fix: don't crash on theft during EquipOnDelay Hopefully the reference `equip` is ok in this case, but it seems to work in testing and this is how EquipOffDelay handled it. Relevant crashlog: https://crawl.project357.org/morgue/cpf86/crash-cpf86-20220206-105923.txt -------------------------------------------------------------------------------- c37658a0fe | advil | 2022-02-05 15:34:50 -0500 fix: invert some mistaken transparency logic This seems to be the opposite of what was intended in 7e0d850643. On top of the wrong transparency logic, the fact that these vaults can get a transparent tag added if they are used in vaults was generating false positives in seed testing (where the transparent tag persists to a later run). I'm not actually sure its great for the vaults layout code to force-add `transparent` like that (even though I probably added it), but I'm leaving that alone for now. -------------------------------------------------------------------------------- 01c6783841 | robertxgray | 2022-02-05 18:22:06 +0100 Merge branch 'master-upstream' -------------------------------------------------------------------------------- f8c823261f | advil | 2022-02-05 10:38:52 -0500 fix: various dancing weapon death message issues * give the "strangely unrewarding" message in the abyss (and other no-xp scenarios). Also applies to simulacra. * Don't give a goldify message in the abyss (and other no-xp scenarios). * Handle goldify better for a couple of spell special cases as well. Also, add an explicit ASSERT in dancing weapon tile code based on a recent crash report. -------------------------------------------------------------------------------- 03a7b78be7 | advil | 2022-02-04 14:47:43 -0500 chore: add a trunk reminder for the 0.28 tournament -------------------------------------------------------------------------------- 2e6bf50d99 | Nicholas Feinberg | 2022-02-04 08:16:33 -0800 Add Oozemancy ability tile (Sastreii) -------------------------------------------------------------------------------- 95d2506d3f | Nicholas Feinberg | 2022-02-04 08:02:31 -0800 Post-final changelog updates (Ge0ff) -------------------------------------------------------------------------------- 58af29d98f | gammafunk | 2022-02-04 08:48:45 -0600 Update the Debian changelog for 0.28 (cherry picked from commit c65acfa365c381bc93a5adae01e2246700b84dc4) -------------------------------------------------------------------------------- da9a4e44c3 | gammafunk | 2022-02-04 08:48:32 -0600 Final 0.28.0 changelog (cherry picked from commit 1f18f1326188bb30cc2e2468d6abd7c50934ed76) -------------------------------------------------------------------------------- 93cd696043 | gammafunk | 2022-02-04 08:48:19 -0600 Checkwhite (cherry picked from commit 5a74557163c3c3b12ce7de0173ff567a5bd4a380) -------------------------------------------------------------------------------- 837932c90e | Edgar A. Bering IV | 2022-02-03 18:53:05 -0500 docs: update CREDITS.txt -------------------------------------------------------------------------------- 2c38d6c9ec | Kate | 2022-02-03 23:48:24 +0000 Fix a crash on Jiyva jelly spawns Caused by damage from YOU_FAULTLESS (such as a guardian golem's clouds) triggering a jelly to try and spawn with a dummy monster set as its foe. -------------------------------------------------------------------------------- 3050e97935 | Edgar A. Bering IV | 2022-02-03 15:03:58 -0600 tiles: jiyva oozemancy tile Some slime wall in the invocations lozenge. Could use improvement. Closes #2394 -------------------------------------------------------------------------------- ad4ee0f8b3 | RojjaCebolla | 2022-02-03 14:37:04 -0600 text: add descriptions to mutations.txt for no-skill-training mutations for Demonspawn cloud immunity for Engulf and Noise Suppression for various Ru sacrifice muts [ Committer's note: Squashed and rebased, removed removed mutations. Closes #2391 ] -------------------------------------------------------------------------------- 66d9a3572a | RojjaCebolla | 2022-02-03 14:37:04 -0600 fix: a typo in the description of repulsion field -------------------------------------------------------------------------------- d89ecb8dae | Edgar A. Bering IV | 2022-02-03 14:36:22 -0600 fix: tweak staff of Olgreb description To make it clear it is used via the 'a' menu now. Closes #2400 -------------------------------------------------------------------------------- de281f79f8 | Edgar A. Bering IV | 2022-02-03 14:36:22 -0600 docs: update the manual -------------------------------------------------------------------------------- c270d1dad5 | Nicholas Feinberg | 2022-02-03 09:05:12 -0800 Changelog tweaks -------------------------------------------------------------------------------- c5fe22d4ff | Perry Fraser | 2022-02-03 07:45:21 -0800 fix: correct hint for stat increases per 6 levels Change introduced in 03ef38a. -------------------------------------------------------------------------------- 85bba54663 | gammafunk | 2022-02-03 07:44:43 -0800 Update the changelog Near final for 0.28.0, but probably more tweaks to this to come. -------------------------------------------------------------------------------- 1732ff48e7 | Edgar A. Bering IV | 2022-02-02 23:19:51 -0600 fix: default runrest ignore transformation ending messages As reported in #2189 the default options repeatedly interrupt resting for transmuters, and this is particularly noticable in the early game when spell power is low. This commit adds a default ignore for all transformation-expiring-soon messages and for transformation end messages for all good forms. Wisp, Bat, Pig, and Tree form still interrupt rest, as these are far more likely for the player to want to rest off. This commit does entail a tradeoff: it makes the experience smoother for newer players in the early game at the expense of requiring a player who wants to remain in a form while auto-exploring/auto-traveling to edit their rc. It's not clear to me that there's a way to easily satisfy both use cases, someone will need to edit their rc. This change shifts the onus to do so to what are probably more experienced players. Closes #2189 -------------------------------------------------------------------------------- e854522c82 | Edgar A. Bering IV | 2022-02-02 23:19:51 -0600 fix: prefer foes for default inner flame target (12676) -------------------------------------------------------------------------------- 0c4cd36759 | Edgar A. Bering IV | 2022-02-02 23:19:51 -0600 fix: allow trog (and other divine allies) to spawn in clouds (12675) Removes an ancient and undocumented hack to avoid placing divine allies in particular in clouds (except with Xom). Since summons from other sources can appear in clouds just fine, let's go with the simpler, consistent approach here. -------------------------------------------------------------------------------- 81e803b10a | advil | 2022-02-02 23:42:39 -0500 fix: update some mac plist stuff I have no idea why LSRequiresNativeExecution was previously being ignored (the 0.27.1 release has this set and runs fine under Rosetta), but as of the 0.28-b1 release artifacts, it is *not* being ignored and this prevents it from running under Rosetta. I'm not sure why this was even set in the first place. I've also adjusted the minimum version field to what we actually build for. Probably more values here need a pass, e.g. the bundle id is pretty outdated. -------------------------------------------------------------------------------- e7179d36cc | advil | 2022-02-02 21:01:04 -0500 fix: adjust mouse hover suppress timing (ebering) This was mainly tested in firefox, which takes about 10-20ms to deliver mouseevents to the menu after a scroll, so 80ms seemed nice and conservative. However, in Safari, the timing seems to be more on the order of 100ms. (Maybe it's intentionally delaying them if they result from rendering rather than actual mouse movement?) I've upped this timeout to 200ms. Even with a value that might in principle be noticeable, I wasn't able to generate any intentional physical motion that revealed the suppression when trying to use a mouse. Unfortunately this change does make it a lot easier for the timeouts to overlap, which a simple bool doesn't handle very well, leading to the more involved approach here. -------------------------------------------------------------------------------- 1d65ae1bb4 | advil | 2022-02-02 16:01:02 -0500 fix: handle webtiles SIGHUP messaging differently SIGHUP indicates that something killed the process. While this can happen for various reasons, it mostly happens on some form of disconnect. If the player is around to see this message (as in Mantis 11595), they probably hit the back button or something, and it's misleading to describe this as a crash ("Unfortunately your game terminated due to an error."). In any case, there's no crash report on a SIGHUP. This commit adds a new message in client.js that'll require caches to catch up, but until then the default case message is fine, and prints the exit reason. More or less resolves https://crawl.develz.org/mantis/view.php?id=11595 -------------------------------------------------------------------------------- b207118a1a | Kate | 2022-02-02 20:31:37 +0000 Reduce Wucad Mu's channeling effectiveness (atomjack) The new formulae resulted in Wucad Mu scaling much more strongly than intended, up to approximately a 99% chance to make spellcasting free at 27 Evocations skill. Ideally the formulae will be reworked in the longer term to also make the effect scale better for regular orbs of energy at lower skill, but in the meantime reduce the ceiling by counting Wucad Mu as 1.5 sources of channeling instead of 2, and removing the stacking effect of multiple sources on the backfire rate. -------------------------------------------------------------------------------- 3f3a666523 | advil | 2022-02-02 15:14:16 -0500 fix: further issues with non-casting monster descriptions df0a5da549d686d didn't get this case right -------------------------------------------------------------------------------- 139f01a7f8 | advil | 2022-02-02 15:14:16 -0500 fix: scroll more sanely in webtiles Page up/down was overshooting. This commit seems to bring it to a better place (although the interaction with the shade is messy). I'm not sure why this code was previously commented, as far as I can tell (aside from compensating for the shade) it was correct, so hopefully there isn't some problem I didn't find. Resolves https://crawl.develz.org/mantis/view.php?id=12193 -------------------------------------------------------------------------------- 28f407b12d | Edgar A. Bering IV | 2022-02-02 14:04:40 -0600 fix: inform the player that using yaras on fedhas summons doesn't work (12670) -------------------------------------------------------------------------------- 0a91294c2c | Edgar A. Bering IV | 2022-02-02 14:03:14 -0600 fix: don't double prompt for monsters with Yara's (12669) Using stop_attack_prompt and firing a tracer is overkill. The former uses a better verb and works well with modern hitfuncs. The latter includes a self-damage check. It would be great if the former could be converted but that's not a small task and is likely to introduce a bunch of new double prompt bugs. For now I've gone with checking for self-damage separately. -------------------------------------------------------------------------------- 9d6eb31067 | Edgar A. Bering IV | 2022-02-02 13:47:22 -0600 fix: account for guile in ctouch display (dilly) -------------------------------------------------------------------------------- 2e2478e390 | advil | 2022-02-02 14:18:54 -0500 fix: handle a few more numpad keys in menus Resolves https://crawl.develz.org/mantis/view.php?id=12641 (and a few others that I spotted). -------------------------------------------------------------------------------- df0a5da549 | advil | 2022-02-02 13:59:38 -0500 fix: handle webtiles spellset parsing a bit better The webtiles code replaces the spellset in a monster description body with a placeholder. Previously it did this by regenerating the full spellset string and doing a simple `replace_all`. This obvious relies on deterministic behavior for `describe_spellset`, something not true of spells that have some random elemental coloring. This webtiles code could probably use some major refactoring, and possible the spellset should be separated out at the level of monster_info fields, but to fix this for release I've done something a bit simpler (and hackier). When generating a spellset description for webtiles, the monster description code inserts some delimiters, and these delimiters are used to insert the placeholder. I've also inserted some code to explicitly detect this sort of bug both when inserting the placeholder, and in the webtiles js code that was going wrong as a result of this bug. (For the latter, the colour string markers that remained in the body were getting parsed as tags by the browser, or maybe jquery, and wiping out the div where the real spellset was supposed to be inserted.) -------------------------------------------------------------------------------- a2763057c1 | gammafunk | 2022-02-02 10:45:19 -0600 feat: Updates to octagon-themed float vaults For minmay's set of octagon vaults, namely `minmay_shoctagon`, `minmay_roctagon`, `minmay_firetagon`, and, yes of course, `minmay_coctagon`, updates to placement, monster sets, loot, and syntax. These vaults all have a lower-tier monster set that places 8 monsters on-average along with a single out-of-depth "boss" monster, but the monster sets don't change much with depth. I've updated the maps to have appropriate monsters for earlier Dungeon (either D:10-D:12 or D:12-D:13, depending on the map), late Dungeon, Elf, and Depths. For Depths, all vaults can now place on every level of that branch. I've replaced `ident:type` with `ident:all` in all cases. Simplify the loot/monster placement logic to not have a rare chance to add a lot more of either monsters or loot. Nearly doubling the loot doesn't work well in a vault where the loot is already generous and every loot item is thematic. Remove these rare substitutions in the common setup function. Tweak the NSUBST to place a few more monsters so we keep the same average. For the unrand weapon item, follow the lead of `minmay_coctagon` and have thematic randart weapons of the same weapon class but of subtypes different from the unrand. This way we're not placing e.g. the Arc Blade 100% of the time, like a guarded unrand vault. Also add to these vaults some other thematically appropriate unrands with randart alternative to these vaults in cases when unrands exist. -------------------------------------------------------------------------------- d243af8c8e | gammafunk | 2022-02-02 10:45:00 -0600 feat: Update a vampire-themed float vault For `lemuel_vampire_tower`, revamp the vault to have better monsters that scale with depth of placement. We remove the down-hatch, since it served little purpose other than limiting placement. Move the guaranteed altar to where the down hatch was, and put a superb_item on the altar to go along with the other two loot items. Allow the vault to place on the final levels of Dungeon, Depths, and Crypt. Rework the monster tiers to follow a more logical progression, using monsters appropriate for placement depth. For the vampire boss, place a vampire for earlier Dungeon, upgrading to a vampire knight, with a placement of either Jory or a vampire knight decked out with thematic equipment of high quality for Crypt and Depths. -------------------------------------------------------------------------------- 292b7dfcfe | gammafunk | 2022-02-02 10:29:20 -0600 feat: Update a Depths float vault For `gammafunk_depths_water_palace`, update the monster list to be more current with the Depths roster. Instead of solo water elementals at certain locations, use merfolk exclusively, but have a chance for two of these locations near the central chamber entrance to be elemental wellsprings. Reglyph a bit as necessary. -------------------------------------------------------------------------------- 727057aadf | gammafunk | 2022-02-02 10:29:20 -0600 fix: Wrap a DES line -------------------------------------------------------------------------------- 10b4fd4ada | gammafunk | 2022-02-02 10:29:20 -0600 feat: Update a Depths float vault For `lightli_eight_chambers`, make the monster sets more appropriate for Depths, removing the orc and poison themed sets, which don't really have appropriate monsters, replacing them with earth, tengu, and spriggan themed ones. Revamp the other sets to be more coherent in terms of threat level. -------------------------------------------------------------------------------- c803637380 | gammafunk | 2022-02-02 10:29:20 -0600 feat: Update a Depths float vault For `hangedman_six_sided_sadism`, update the monster lists to remove some of the less interesting monsters from outside the branch. Use an appropriate SUBST to thin out two of the monster sets instead of having `nothing` in the monster list. -------------------------------------------------------------------------------- f436032661 | gammafunk | 2022-02-02 10:29:20 -0600 fix: Clean up syntax of a float vault -------------------------------------------------------------------------------- 05b2614ef2 | gammafunk | 2022-02-02 10:29:20 -0600 feat: Update a fire-themed float vault For `lemuel_flame_loot_2`, replace teleport closet areas with simple lava. The vault requires flight or translocations to reach, and said closets didn't add anything to the vault aside from requiring `no_tele_into` masking. Add depth scaling, adding more monsters and loot as placement depth increases. Use two tiers of fiery monsters, with a single boss monster and a lower tier of support monsters. Allow fire monsters to generate as level lava spawns, but turn off level monster gen elsewhere in the vault. -------------------------------------------------------------------------------- 0f297cac12 | gammafunk | 2022-02-02 10:29:20 -0600 feat: Update placement of a float vault For `onia_ninara_swampy_vault`, don't place this vault in Depths, since there's not an appropriate set of Swamp-themed monsters that are appropriate difficulty for Depths. Refactor syntax and glyph usage. -------------------------------------------------------------------------------- 695ac6beb5 | gammafunk | 2022-02-02 10:29:20 -0600 feat: Update a troll-themed float vault For `lemuel_troll_bridge`, make the monsters scale better with depth. For later Dungeon, upgrade yaks to death yaks and upgrade trolls. For Depths, we replace the timid yak genus monsters with wizards, since it seems like wizards would be scared of being eaten by trolls. Place fewer monsters at earlier depths, since 10 trolls guaranteed on D:9 is a little much. -------------------------------------------------------------------------------- 14386d3767 | gammafunk | 2022-02-02 10:29:19 -0600 feat: Update a Depths mummy-themed vault For `lemuel_minitomb`, update the vault to monsters that are appropriate challenges for Depths, and revamp the appearance, layout, and loot. Don't use plain mummies, using spectral things at the low end, along with guardian mummies and mummy priests to go along with the single royal mummy. Replace some of the gold in the final chamber with super and star item loot, which is a more meaningful award. Use tomb-theme wall and floor tiles, and make the layout more favorable to monsters in the final two chambers. Allow the vault to place in all of Depths and Crypt. -------------------------------------------------------------------------------- 6705b9cb7d | gammafunk | 2022-02-02 10:29:19 -0600 feat: Update a Depths float vault For `minmay_skeletal_surprise`, use a better substitution setup and add more Depths-appropriate nasties monsters. Namely mix in a small chance for ancient/dread liches, keeping averages the same. For the nastier monsters that place in the gold rooms, place a superb or star item instead of just more gold. -------------------------------------------------------------------------------- e7567d4e05 | advil | 2022-02-02 11:07:07 -0500 fix: fix a rounding issue in webtiles bars This fixes the specific issue reported, but I couldn't swear that there are still no overflow issues. What was happening is that at the exact hp values reported in the issue, the main bar was 96.88% and the decrease bar ended up as 3.13%. Resolves #2384 -------------------------------------------------------------------------------- 69f475c709 | advil | 2022-02-02 10:29:52 -0500 docs: changelog updates Mostly editing/expanding UI/options bullet points -------------------------------------------------------------------------------- 72cdf85f72 | wheals | 2022-02-02 10:51:39 +0200 fix: ASSERT tripped with targeted destruction cards -------------------------------------------------------------------------------- 62a80824bf | Edgar A. Bering IV | 2022-02-01 22:56:19 -0600 fix: always give a message when a net trap fails to trigger For clarity. -------------------------------------------------------------------------------- 9fc6a9d840 | Nicholas Feinberg | 2022-02-01 15:57:34 -0800 Remove a reference to exploration traps C.f. 86c161e70f1664227c2cfe580500b2e3d2ef0146. -------------------------------------------------------------------------------- 89e12c0570 | Nicholas Feinberg | 2022-02-01 09:42:45 -0800 Fix toxic bog XP (Oneirical) It passed you->as_monster() into the temp map marker code (which is null), instead of the expected MID_PLAYER. -------------------------------------------------------------------------------- 8eb35efe60 | advil | 2022-01-31 22:58:10 -0500 fix: eliminate a bad memory access When the player had no wieldable inventory items, toggling the show all mode could lead to the deleted inv_header being modified. Write a custom clear() function for this class that explicitly sets nullptr. (Some day it would be nice if Menu classes used shared_ptrs or something...) -------------------------------------------------------------------------------- 581ba40fa7 | advil | 2022-01-31 16:16:31 -0500 docs: more color diagnostics for terminal These are intended to flag to putty users using certain options that their terminal is misconfigured. (I have *absolutely no idea* why putty is misrendering either of these. It's not impossible that at least the two block one is a low-level bug in our curses code? -------------------------------------------------------------------------------- a1db9ad13e | advil | 2022-01-31 16:16:31 -0500 fix: color spell letters by utility in more menus This was already done in the memorize menu. It looks more consistent overall, and also draws less attention to whatever is going on with putty's bg color swapping in blink_brightens_background mode. -------------------------------------------------------------------------------- 2ed287c6d8 | advil | 2022-01-31 16:16:31 -0500 fix: indicate compatibility mode for putty in more cases This was getting suppressed for players using blink_brightens_background, but the results of this mode are (currently) kind of odd, so we need to print the info about compatibility mode even then. Wording tweaked slightly in consequences. -------------------------------------------------------------------------------- b1d7ae0460 | wheals | 2022-01-31 20:16:04 +0200 fix: Numpad '*' and '+' in newgame menu (#12666) -------------------------------------------------------------------------------- ccf83627c4 | wheals | 2022-01-31 19:57:20 +0200 feat: allow closing the webtiles chat with F12 (Yermak) -------------------------------------------------------------------------------- 190321e9dd | advil | 2022-01-31 12:21:03 -0500 fix: restore item class hotkeys to id menu (Lici) No guarantees this behavior will stay forever, but it was unintentionally remove in fc454544111 so I'm restoring it for now. -------------------------------------------------------------------------------- 0a9fdd57f5 | advil | 2022-01-31 11:43:50 -0500 fix: menu selection for `prompt_invent_menu`s (gressup) These menus do manual keyhandling (which should eventually be refactored) and so CK_ENTER needed its own manual handling here. Affects most noticeably fire menu, but maybe all sorts of other misc ones. -------------------------------------------------------------------------------- 93984085d6 | wheals | 2022-01-31 18:28:56 +0200 fix: select all menu items when pressing a type shortcut Because the second iteration of the loop did not have the MF_SINGLESELECT check, using a non-primary hotkey to select things you had already scrolled past did not reliably select all items. The best way to reproduce this was to have several weapons in your inventory, scroll down past them on the (d)rop screen, and then press ). The topmost weapon would not be selected. (More specifically, I suspect it was being selected twice, leading to it being deselected.) -------------------------------------------------------------------------------- 238b2ceb19 | wheals | 2022-01-31 18:01:49 +0200 fix: time out drain when returning to a level (#12663) Wasn't updated when monster drain was made temporary. -------------------------------------------------------------------------------- 0aac2aca22 | wheals | 2022-01-31 17:57:46 +0200 fix: easy_floor_use when your (sub-)inventory is empty (#12667) -------------------------------------------------------------------------------- 171a82f519 | wheals | 2022-01-31 17:49:07 +0200 fix: restore spacebar behaviour in autoexplore autopickup prompt (#12671) -------------------------------------------------------------------------------- 15a0a6fec6 | wheals | 2022-01-31 17:19:41 +0200 fix: standardize penance piety display (#12565) Webtiles showed the piety rank even under penance, but console/local tiles did not. -------------------------------------------------------------------------------- 236b832b77 | wheals | 2022-01-31 17:14:28 +0200 fix: scroll of fear success chance (#12665, Yermak) The targetter did not properly reflect the power cap. The same bug probably also affected Anguish and Discord. -------------------------------------------------------------------------------- 9887b6b090 | wheals | 2022-01-31 17:04:59 +0200 fix: on the spellcasting menu casts the last spell again This was broken for both menu_arrow_control = true and false. The previous behavior was restored if arrow control is off; if arrow control is on, the menu automatically defaults to hovering over the last-cast spell, which means that pressing enter will cast that spell. Either way, the last-cast spell is shown with a '+' after the hotkey instead of a '-'. This does not restore the behavior when the player knows only one spell; that was mostly for newbies who are presumably keeping the default of true for arrow control. -------------------------------------------------------------------------------- 7f48f510a0 | Nicholas Feinberg | 2022-01-30 12:30:15 -0800 Fix (?) orb of wrath uselessness check Match the call to go_berserk() in melee-attack.cc triggered by you.angry() (which is the effect of an orb of wrath). -------------------------------------------------------------------------------- e4388f8e44 | advil | 2022-01-30 12:28:15 -0500 fix: correct shopping list menu more lettering This was doing the wrong thing on letters > 'z', which resulted in invalid UTF-8 and prevented the menu message from ever getting to the webtiles client. Resolves https://crawl.develz.org/mantis/view.php?id=12672 -------------------------------------------------------------------------------- a79f92ac9c | Nicholas Feinberg | 2022-01-29 14:47:47 -0800 Remove explicit fix slot support Unused since bf516ccc1f22f3449c9dce1c7828d97747f247d2 (2007) and unlikely to be used in future. -------------------------------------------------------------------------------- bf593b16ee | Nicholas Feinberg | 2022-01-28 17:25:33 -0800 Fix negative energy mutation description -------------------------------------------------------------------------------- e65d7fc6d1 | RojjaCebolla | 2022-01-28 19:25:24 -0500 fixup! Add descriptions for a few resistance mutations continuing to noodle on this. advil: "add explicitly any relevant abbreviations" -------------------------------------------------------------------------------- e889dcbc7e | RojjaCebolla | 2022-01-28 19:25:24 -0500 Add descriptions for a few resistance mutations Filling some holes in mutations.txt -------------------------------------------------------------------------------- ef7f3e67aa | advil | 2022-01-28 12:46:25 -0500 docs: a few more species mutation descriptions Also, tweaked hop to have more detail. Some of these touch on related fakemuts that wouldn't otherwise be currently described. -------------------------------------------------------------------------------- 9e681642b6 | Nicholas Feinberg | 2022-01-28 09:28:44 -0800 Tweak Mlioglotl Make him demonic holiness to better match player expectations (re vulnerability to holy word), and make his Lugonu abilities priestly rather than magical. -------------------------------------------------------------------------------- b194023da8 | advil | 2022-01-28 11:48:09 -0500 fix: don't list removed muts in describe debug code Also, put a static inside its only direct consumer. -------------------------------------------------------------------------------- 2e94016dc0 | Implojin | 2022-01-28 11:40:34 -0500 fix: lowercase help lookup on ctrl-o The keybinds shown on ctrl-o were outdated, this aligns it with how help lookup currently works. -------------------------------------------------------------------------------- 60158a2511 | Nicholas Feinberg | 2022-01-28 07:50:19 -0800 Add missing dj species mut descs (advil) -------------------------------------------------------------------------------- 13803eac2f | advil | 2022-01-28 10:44:29 -0500 feat: debug code to display muts without a description This is pretty spammy so not enabled by default. I've also restored the debug build `validate_mutations` call to the describe mut menu, if this was intentionally removed (it's a bit spammy too) it could be gated behind the new DEBUG_MUTATIONS define. -------------------------------------------------------------------------------- 59a240f8a5 | advil | 2022-01-28 10:22:38 -0500 fix: adjust some casing in mut short names These short names are being used as popup titles for `A` screen popups, and given this it is better to systematically uppercase relevant abbreviations. Because this field was designed for the % screen list, there was mostly a lowercase convention for these fields (with a few exceptions), but it doesn't seem to matter in any technical way if this casing is adjusted; db lookup is case insensitive. They look ok in the short list too, and a few things were already cased there. (Also because these have been designed for brevity, they often don't work well as titles, and I think in the long run it may be good to have an explicit "title" field of some kind in this data that allows writing a better one. But that's a bit of a project.) -------------------------------------------------------------------------------- e4976b13b8 | advil | 2022-01-28 10:00:28 -0500 fix: don't show (level 1/1) in mutation descriptions This seems to me more confusing than useful, I guess one might argue with this though. -------------------------------------------------------------------------------- a75d3d97ab | advil | 2022-01-27 20:52:29 -0500 fix: update SECURITY.md Someone needs to remember to do this again in a few weeks. Resolves #2107 -------------------------------------------------------------------------------- 08fb2288ea | advil | 2022-01-27 20:45:25 -0500 fix: quivering ammo from item description This call needed to correctly handle the ammo quiver (and the inscribe check), and to avoid code duplication I pulled similar relevant code out of ActionSelectMenu into its own call. Overall, this whole setup could possibly use some simplification at this point, it was written to support arbitrary numbers of quivers but I am not sure that's ever going to be realistic. Resolves #2257 -------------------------------------------------------------------------------- 022ca4c890 | advil | 2022-01-27 14:15:01 -0500 fix: suppress mores during describe actions This prevents graphical glitches in console and a hard-to-spot key input prompt in webtiles. Just suppressing the more is not an ideal solution as it can make you miss force_mores, but I'm not sure there's an alternative that wouldn't take some major refactoring. (I could imagine an RAII object that instead of suppressing output, collected it in a message tee and showed a popup if there was a force_more. But this is definitely in non-freeze territory.) Resolves #2232 -------------------------------------------------------------------------------- 0446c0dae4 | advil | 2022-01-26 23:07:21 -0500 fix: use menu api instead of deleteAll in a few menus -------------------------------------------------------------------------------- 068bf27d47 | advil | 2022-01-26 23:00:18 -0500 fix: reset scroll on spell search If the scroller was sufficiently far down, a search could result in no menu lines visible in console because the scroll didn't get adjusted. I haven't quite figured out why the Scroller m_scroll sanitization, which appears to be correctly implemented, doesn't kick in until a manual scroll. Maybe there's a missing _allocate? In any case, this commit explicitly manages the scroll for spell search, trying to keep it on the same spell if possible, but otherwise resetting to the top. Resolves #2303 -------------------------------------------------------------------------------- a859fcf985 | advil | 2022-01-26 16:57:37 -0500 ci: reset cache for mingw builds Or rather, change the cache key, which is apparently the way to do this right now. (The old cache gets erased if not accessed in 7 days.) -------------------------------------------------------------------------------- b8ed39c57d | Alex Jurkiewicz | 2022-01-26 16:16:26 -0500 Change return signature for set_rc Return boolean success. Also add a missing import used in on_message. Fixes #2382. -------------------------------------------------------------------------------- b0e57e52b4 | advil | 2022-01-26 12:43:07 -0500 fix: explicitly set UI_NORMAL before load_level in webtiles Messaging from portals happens during load_level, but on new char creation, UI_CRT is set by the character selection popups, and wasn't cleared in webtiles until load_dungeon. Since this state change is what is required for the initial show() call to the `normal` div in webtiles for this case, a more triggered during load_level would still wait for input but with the entire game div invisible. This is what led to the delver bug when landing on a level with a portal. Arguably it is also a bug that this messaging happens so early on initial load, but this seems extremely hard to change (marker init can't be moved later without what I seem to remember is complete disaster, so it would require deferring marker init messaging somehow). Resolves #2318, mantis 12343. -------------------------------------------------------------------------------- 53e83337bc | Alex Jurkiewicz | 2022-01-26 09:37:48 -0500 Use append for lists, not add Fixes #2380. -------------------------------------------------------------------------------- 12fcac58f8 | Nicholas Feinberg | 2022-01-25 18:03:19 -0800 Fix: clarify Conjure Flame description Try to explain how a rather complex spell works, without misleading newer players into thinking that re-casting the spell is the only way to get the embers to burn. -------------------------------------------------------------------------------- f2d273c862 | advil | 2022-01-25 15:51:46 -0500 fix: add a missing from future import (TZer0) -------------------------------------------------------------------------------- 94f35f3178 | advil | 2022-01-25 13:28:47 -0500 docs: remove a reference to CRD in the release guide since we haven't been doing that in as long as I've been a dev. -------------------------------------------------------------------------------- f1a7530480 | advil | 2022-01-25 13:04:53 -0500 fix: reenable * in UseItemMenu Probably broken in 673f3e5d658 -------------------------------------------------------------------------------- 87a8dc699f | advil | 2022-01-25 12:57:32 -0500 fix: make the unwield menu item usable Previously, this menu item was basically cosmetic, and didn't have a hotkey, preventing it from being hovered (in local tiles at least). This commit turns it into a real menu item that can be selected. While I was at it I improved some of the visuals of this item -- it uses form/species custom unarmed attack strings (though a lot of forms simply prevent this menu altogether), and indicates visually if unarmed is currently chosen. To match previous behavior, this menu starts with the first real item selected. We'll see if this is confusing or not. -------------------------------------------------------------------------------- 6d66802b9f | advil | 2022-01-25 11:22:10 -0500 fix: improve all items known case in KnownItemsMenu This fixes up the keyhelp to not show the toggle key, and absorbs the '-' keypress rather than just exiting the menu. This code needs some work still... -------------------------------------------------------------------------------- 2dc3af7c02 | advil | 2022-01-25 11:12:37 -0500 fix: adjust local tiles mouse hover behavior * get hover switching section to work in use and quiver menus, bringing these in line with webtiles * with arrow selection on, don't lose hover on MouseLeave * ignore mouse click keycode except on noselect menus. (Generally, this keycode only seems to happen when clicking outside of a window, which is extra confusing for anything else.) * don't draw hover for MF_NOSELECT menus, it makes the user think they can click and do something -------------------------------------------------------------------------------- 9123634e07 | advil | 2022-01-24 20:39:05 -0500 feat: quiver menu lettering improvements A long-time complaint about the newquiver menu is that the hotkeys are fairly arbitrary. This is challenging to resolve, since things that appear in this menu come from items, spells, and abilities, and there are likely to be collisions past the most basic of characters. A lot of players with this complaint have their preference for which lettering is the most important (I think that team item is the most vocal, because the old quiver menu just used item lettering), but these can't be mutually resolved. This commit attempts to use some of the fancier technology from UseItemMenu to resolve this problem. It adds a new mode to the quiver menu that focuses in on one of the three categories and uses the lettering from that category; the UI improvements from UseItemMenu hopefully make it easier to switch between the categories (e.g. arrow keys move smoothly between them, mouse hover changes categories*, and there's a toggle key as well. Focus mode on/off is implemented via a persistent option, so while you can manually set the rc option, it just remembers whatever mode you last had it in. Within a single play session it also remembers the section while in focus mode. So a typical use case for someone who doesn't quiver anything except items would be to hit ! to put the menu in focus mode, and not think about it ever again (until they upgrade, I suppose). This commit also involved a bunch of related fixes for stuff in Menu and UseItemMenu, as well as moving the quiver menu keyhelp to the footer. [*] n.b. there's been a regression somewhere along the line where this stopped working on local tiles, I'll deal with that separately. -------------------------------------------------------------------------------- cc9c2818f3 | advil | 2022-01-24 19:40:21 -0500 fix: guard against potential recursion in UseItemMenu Discovered while working on the quiver menu. I think this actually prevents some hover glitching at the moment. -------------------------------------------------------------------------------- 508f987c07 | advil | 2022-01-24 17:31:20 -0500 fix: fix some webtiles color string bugs This code didn't handle hand-generated nested color strings very well. More exactly recreate the stack algorithm from the crawl binary (still a bit different though). Should now work for any amount of foreground nesting, at least. -------------------------------------------------------------------------------- c496ab42f3 | advil | 2022-01-24 13:52:44 -0500 fix: correct exit logic for ability quiver submenu (Aliscans) -------------------------------------------------------------------------------- f64c0c316f | advil | 2022-01-24 13:52:43 -0500 feat: quiver menu section headings This is an old wishlist item and now that the cycle_header call and support code exists, becomes a lot more practical. Some minor other visual improvements to this menu as well. -------------------------------------------------------------------------------- cc732e7c34 | advil | 2022-01-24 13:01:45 -0500 refactor: clean up some messy quiver menu code Refactor a bunch of checks into the menu class, improve api for checking whether there are actions to quiver. Should not change behavior. -------------------------------------------------------------------------------- 283549b12f | advil | 2022-01-24 11:24:54 -0500 fix: fix use item section toggle with arrow control off -------------------------------------------------------------------------------- 673f3e5d65 | advil | 2022-01-24 11:05:06 -0500 fix: clean up some messy use item menu code This simplifies the use item menu so it doesn't have to entirely rebuild the menu every time the section changes. Rather, this commit adds an enable/disable toggle at the MenuEntry level that suppresses all hotkeys when disabled, and then changes this for relevant entries when switching sections. It also generalizes the section-switching code using the newer cycle_headers pattern. In addition, a minor visual tweak: indent non-hotkeyed items in these menus so that there horizontal position doesn't change on section change. -------------------------------------------------------------------------------- 55149d5790 | advil | 2022-01-24 11:05:06 -0500 fix: default `easy_floor_use` to false This option applies the action (read, wield, etc) to the floor item immediately on pressing ',' in the relevant menu if there is exactly one item of the right type on the floor. This behavior is really inconsistent with how menus work in general, and with what ',' does when there's more than one item. I'm keeping the option since it's been a default for a very long time. If people really don't like this new default I'm open to doing something further; one idea might be that if there's one item, assign it an actual (non-comma / non-letter) hotkey. -------------------------------------------------------------------------------- f728b707aa | Perry Fraser | 2022-01-23 13:46:06 -0800 fix: set FTILE in kennysheep_arrival_seaside stair -------------------------------------------------------------------------------- c66546352e | advil | 2022-01-23 11:10:02 -0500 fix: initialize a bool (Goratrix) This was resulting (depending on random local circumstances) in the first viewmap command sometimes being dropped spuriously. -------------------------------------------------------------------------------- 6e7a31e4fc | advil | 2022-01-23 10:58:36 -0500 fix: map touch input backspace to esc The lack of esc is one of the more immediate issues for using an on-screen keyboard, and using backspace seems like a workable solution. Backspace is prominent on these any touch virtual keyboard I've seen and would otherwise just go (almost) unused on touch input (in fact sending a fairly useless ctrl-h, which maybe needs a webtiles workaround in general). This only affects key input events handled via the mobile input button, so doesn't affect normal play or touch devices with physical keyboards. -------------------------------------------------------------------------------- e5bbfea7ee | advil | 2022-01-23 10:19:52 -0500 feat: use DESC_INVENTORY_EQUIP for carried stash search results Suggestion from u/SvalbardCaretaker -------------------------------------------------------------------------------- ee65da1d57 | advil | 2022-01-23 10:06:59 -0500 fix: select first travelable item in stash search Some players use this menu as a quick shortcut while collecting items that they are sure already exist, and I guess having to hit ','+enter is too much work. This lets enter immediately travel to the first travelable item. I'm undecided as of yet what to do with the lettering: I respect that many players have some muscle memory for ctrl-f a, but on the other hand, I don't think the fact that a kind of dodgy UI decision is enshrined in people's muscle memory is a good reason to keep it. I'm definitely opposed to making items on the current position fully unselectable in this UI, as was done (for carried items) in response to https://crawl.develz.org/tavern/viewtopic.php?f=8&t=20374. This makes the whole UI less usable and there's a ton of players who don't need or want the reversion that was (rather unconstructively) advocated for in that old thread. -------------------------------------------------------------------------------- 820543e53a | advil | 2022-01-22 19:38:17 -0500 fix: enable feature actions in full square describe Under this one code path (which happens with multiple describable things on the same square) a bool was not correctly applied. -------------------------------------------------------------------------------- 70179d601d | advil | 2022-01-22 19:22:08 -0500 fix: further fix describe item actions (perryprog) inventory items can't be expected to have a valid item index relative to env.items. -------------------------------------------------------------------------------- c30f734a66 | advil | 2022-01-22 16:14:06 -0500 fix: remove debug code -------------------------------------------------------------------------------- 86ee99c729 | advil | 2022-01-22 15:52:08 -0500 fix: parens -------------------------------------------------------------------------------- d457d2bfb3 | advil | 2022-01-22 15:42:00 -0500 fix: expand item index check from b35b39474d43 Reading and quaffing shouldn't work for this case either (and will crash). -------------------------------------------------------------------------------- b35b39474d | advil | 2022-01-22 15:11:05 -0500 fix: prevent pickup of non-env items via describe actions If an item_def is otherwise valid but is a copy of a real item in `env.items`, and the player is in the right position, this code would allow trying to pick it up and then crash. Add a check for a valid index. (The logic here is patterned off of `invalid_monster_index`.) The immediate effect is on descriptions accessed via stash search, and it would be better to actually allow the (g)et to work in this case, but it may be somewhat unavoidable that stash search is working with copies, so getting (g)et to work will be a bit of a project. -------------------------------------------------------------------------------- a0c2dbb3aa | advil | 2022-01-22 14:54:55 -0500 fix: reentrant calls to show_map via descriptions When viewing a staircase description, you can now use ]/[ in the description popup to go right to the map view on the other side. Since description popups are possible in `X` view, this could lead to weird stacking of map view UIs that were really not designed to happen. There was also a (possibly independent, but I'm not entirely sure) set of bugs where exiting the describe popup wasn't handled right and made the player travel to the stair location. This commit fixes all of this by refactoring `show_map` to allow graceful reentry without creating a new map view layer. Well, the behavior is graceful, the code isn't, but it'll do for now. -------------------------------------------------------------------------------- af8930e228 | nlavsky | 2022-01-22 10:52:22 -0600 fix: unmute the horn of Geryon "A hideous howling noise" was a lie: the horn has never produced a sound. This commit gives the horn a proper noise. -------------------------------------------------------------------------------- 050a50673c | Edgar A. Bering IV | 2022-01-21 15:26:51 -0600 fix: turn down wretched stars corrupting pulse a bit more Temporary mutations were turned down as they don't expire while in the Abyss. Even with that change, a handful of wretched star encounters could quickly add up. A handful of temporary mutations is an interesting challenge to overcome; receiving all of them gets to be a bit much. This commit reduces the casting frequency again, and also makes the chance to apply a temporary mutation scale down with the number of temporary mutations. -------------------------------------------------------------------------------- 3197508d1c | advil | 2022-01-21 15:42:09 -0500 fix: autocreate dgl status file dir (Pinkbeast) On default settings, this is automatically created on login or account creation, but until this happens a lot of warnings are generated by the timeout. I couldn't think of a good reason not to just create it if needed. -------------------------------------------------------------------------------- 8b1c90781f | advil | 2022-01-21 15:14:35 -0500 docs: update webtiles docs (WSL, other tweaks) * Incorporate Pinkbeast's discussion from: http://crawl.montres.org.uk/wsl-webtiles.txt. * Restructure prerequisites vs actually running the server * Note about UTF-8 * Other editing -------------------------------------------------------------------------------- daab1c2f9b | Nicholas Feinberg | 2022-01-20 13:47:34 -0800 Increase flam.wav damage by 20%ish dde70e7af44 was a well-deserved nerf, but overshot somewhat. Let's dial it back the other way. Average damage per round (pre-AC): 0 power 100 power Original 5 25 Post-nerf 4 14 Current 4 17 Easy to make further adjustments. -------------------------------------------------------------------------------- a624279079 | advil | 2022-01-20 16:05:37 -0500 fix: linebreak Y/N popup prompts (ebering) It is very unclear to me whether adding automatic linebreaking would be a good idea to MenuEntry items (which are used for many things), so I added a convenience function that only does this happen on demand, and used it for `yesno` calls. N.b. it works fine on Menu titles, but console regular menu entries do not work with multiline text. I also did a bit of relevant MenuEntry refactoring. -------------------------------------------------------------------------------- 47742a1d20 | advil | 2022-01-20 16:04:46 -0500 fix: tweak console hover rendering on yes/no prompts There is a difference in how hovers render for formatted vs non-formatted menus; this basically results in the hover being the width of the menu for non-formatted ones. Since yes/no menu prompts are pretty variable, this can sometimes be odd (and it's worse if someone overflows the terminal width). So, as a quick workaround, just mark this with MF_ALLOW_FORMATTING. -------------------------------------------------------------------------------- ae24e75c0c | Edgar A. Bering IV | 2022-01-20 14:14:50 -0600 feat: print what can't be picked up when prompting Could be verbose on large stacks with very greedy autopickup, but it's been a big screw for me to not know what is in the cell and have to stop and examine it before answering the "couldn't pick up" question. -------------------------------------------------------------------------------- 2a4342cb04 | Monkooky | 2022-01-20 14:14:50 -0600 feat: prompt to disable autopickup items of a type during autoexplore [ Committer's note: Re-wrote the patch to use more crawl codebase idioms and the new ask_always parameter to yesno previously implemented. Closes #2367. Closes #1873. ] -------------------------------------------------------------------------------- 4ed01045b5 | Edgar A. Bering IV | 2022-01-20 14:14:50 -0600 feat: removed unused yesnoquit It was partially provided to the lua API in 2008 when implementing toll zigurats for prompting if the player wanted to pay. Or at the same time, that ended up using yesno. Subsequently it slowly rotted against the weight of the FIXME: looking to be a real mess and disuse in the main codebase. This might be a pain point for some clua users, but yesno is quite full featured and ternary decisions (yes/no/quit) can be factored into nested binary decisions by those downstream users. -------------------------------------------------------------------------------- fa79eddd99 | Edgar A. Bering IV | 2022-01-20 14:14:50 -0600 feat: add "always" prompting to yesno There's one place in particular where we ask the player a specific question about a one-time situation that we can generalize both technically and sensibly for ui: "Could not pick up an item here" prompts. There may be others, so I've implemented this as a way to prompt for either a one-time or global change. Previously, a general [A]lways prompt was available via yesnoquit, but that has been unused for 6 years, has a FIXME for being a mess, and is missing some updates and modernizations of yesno. -------------------------------------------------------------------------------- 4b4a722d26 | advil | 2022-01-20 13:25:02 -0500 fix: further adjust some format specs `%llu` produces warnings on mac/linux, and the exact definition of size_t is not guaranteed by anything, so use the `%zu` format spec instead. -------------------------------------------------------------------------------- 886a180965 | Zarchan | 2022-01-20 11:46:42 -0600 feat: no more accidental lava related item destruction. Checks if the tile a player is on will destroy items, and if so prompts the player before continuing. [ Committer's note: Closes #2353. Tweaked and specialized the prompt. ] -------------------------------------------------------------------------------- 932a3574db | Zarchan | 2022-01-20 10:22:51 -0600 docs: update monster_list_colour documentation -------------------------------------------------------------------------------- ec4c6a5604 | advil | 2022-01-20 10:45:04 -0500 fix: tweak webtiles mouse hover behavior with multiple popups Previously, if you open a popup over a menu, and closed the popup, the mouse position at the time would determine hover, which can be a bit confusing (especially big menus where the mouse is likely to be somewhere in the menu, and especially for arrow key selection). This keeps hover on the previously hovered item (if any) when focus is returned. We'll see if something even more fine-grained would be better, e.g. suppress hover if previous item was not selected by mouse. It's also still TBD under what conditions if any a pure mousemove (with no leave or enter events) should set the hover, right now it doesn't. -------------------------------------------------------------------------------- 16e8fc0620 | Chris Landry | 2022-01-20 09:26:38 -0600 fix: update wizard armor gen with new egos [ Committer's note: Checkwhite and made consistent with weapon egos. Closes #2373. ] -------------------------------------------------------------------------------- a69ad8bafb | Aliscans | 2022-01-20 09:26:38 -0600 fix: correct spelling of skilful Was "skillful", but this is not a valid spelling according to https://www.australian-dictionary.com.au/wordcheck/. Closes #2372. -------------------------------------------------------------------------------- 83964af658 | Aliscans | 2022-01-20 09:26:38 -0600 fix: correct spelling of wilful Was "willful", but this is not a valid spelling according to https://www.australian-dictionary.com.au/wordcheck/. -------------------------------------------------------------------------------- d61996a82c | Aliscans | 2022-01-20 09:26:38 -0600 fix: pluralise ghosts with the same name as "2 ghosts called " The previous version gave "2 's ghosts", which was poor English. This form of words makes sense if they are ghosts of the same character or of different ones. -------------------------------------------------------------------------------- 903a904aa7 | Chris Landry | 2022-01-20 09:26:38 -0600 fix: some numeric compiler warnings Closes #2369 -------------------------------------------------------------------------------- 4a4240be9d | Aliscans | 2022-01-20 09:26:38 -0600 fix: a compiler warning In _genus_factoring(), mon is set in a loop. This is always set as "types" and "genera" are set in _count_monster_types(), which builds them both from the same list of monsters. This is not apparent to a code coverage tool, so set it to nullptr. Closes #2371 -------------------------------------------------------------------------------- d6fec0f1ec | Edgar A. Bering IV | 2022-01-20 09:26:38 -0600 docs: update CREDITS.txt -------------------------------------------------------------------------------- a72db329a9 | advil | 2022-01-20 09:59:04 -0500 fix: prevent webtiles mouse hover from scrolling This commit tweaks two related pieces of mouse hover behavior: * don't snap a mouse-hovered item into view; this was kind of confusing when it happened (by hovering a partly visible menu element). * apply a tiny bit of margin to what counts as partly visible for mouse hover purposes. This is very heuristic so it may need some tweaking or adjustment for different resolutions. Without this, it's sometimes possible to be hovering something you can't even tell is there. I first consider just making partly visible elements unhoverable by mouse, but this was also confusing. -------------------------------------------------------------------------------- a885d4b3d6 | advil | 2022-01-19 22:14:03 -0500 fix: tweak popup window heights This accomplishes two things: * prevent overlapping with the chat box in most regular browser circumstances, which has bugged me for a while * provide a workaround for the 100vh issue on iOS Safari, by simply leaving more blank space There might be better workarounds available. We'll see if people find the extra vertical space too much, or if it needs some more responsivity. -------------------------------------------------------------------------------- a88e694cbd | advil | 2022-01-19 22:14:03 -0500 fix: exert more control over iOS virtual keyboards The behavior is still somewhat flaky (a few bugs noted in comments), but this commit brings improvements. Basically, it tries to never let anything else but the mobile input box have focus, while the keyboard is displayed -- this is apparently what it takes on iOS to keep the keyboard up. Once it's down, focusing a text input doesn't bring it back up, and despite trying many recipes, I could not find a way to programmatically bring it back up. This prevented several alternative approaches that I considered, e.g. using a timeout. The focus control involved here is quite aggressive and hopefully won't break anything on Android. This also does some better styling of the mobile input box, rather than relying on the browser focus highlight. -------------------------------------------------------------------------------- d61c85c099 | advil | 2022-01-19 22:14:03 -0500 fix: clicking in multiselect webtiles menus Because there were previously no multiselect+ arrow menus, the code was sending enter (which only works for singleselect). For now send space; this commit is a placeholder for a non-keycode-based solution. -------------------------------------------------------------------------------- 6000d10c1c | advil | 2022-01-19 22:14:03 -0500 fix: make canvases non-selectable On touchscreens (ios), it is a bit too easy to long tap and select the canvas, which is then somewhat annoying to undo. This commit isn't a real solution because it is still possible to long top the canvas, but it prevents the canvas itself from being selected. (In my testing, some very thin element to the left of the canvas gets selected?) This means that if you tap the canvas itself the selection disappears. -------------------------------------------------------------------------------- 0a9ec5b959 | advil | 2022-01-19 22:14:03 -0500 fix: suppress click after touchend clickoutside At least on iOS, the click was still getting processed after the popup was closed, leading to spurious things happening. -------------------------------------------------------------------------------- 9c9f7e8d09 | advil | 2022-01-19 22:14:03 -0500 fix: let webtiles mouse dungeon clicks interrupt travel/repeats Previously, the click was just discarded during interruptible travel/repeats. This change will let the fake key enter the key handling queue, and `kbhit()` return true, which is the main check for interrupting such things. I think it's ok to return a keycode unconditionally for click handling, and CK_MOUSE_CLICK is innocuous, but we'll see. -------------------------------------------------------------------------------- 8cf2c06242 | advil | 2022-01-19 22:13:37 -0500 fix: improve mobile input box behavior This commit should prevent spurious shifting (which I believe was happening because the first letter of the input box is capitalized), and hide autocomplete/spelling suggestions at least on iOS. It also attempts to hide the cursor, and uses a placeholder instead of text. (Since anything that tries to edit the box is prevented, this should always be visible, I hope.) -------------------------------------------------------------------------------- 7722353844 | robertxgray | 2022-01-19 22:10:13 -0500 feat: better support for mobile browsers This is a minimum set of features and fixes to make the WebTiles interface playable on mobile browsers. - Added an optional auxiliary input field that can be focused to enable virtual keybards. - Added a new option tile_web_mobile_input_helper to enable or disable the input field. - Fix touch zoom and scroll disabled when a popup is shown. - Allow popups to be closed with touch events. - Fix some minor display issues on small screens. [Committer's note: squashed and edited commit message. Several tweaks aimed at iOS follow in subsequent commits from me. -advil] Closes #2221, closes #2332 -------------------------------------------------------------------------------- ee0477cf1a | Edgar A. Bering IV | 2022-01-19 20:40:53 -0600 fix: a typo (ManiacJoe) -------------------------------------------------------------------------------- 623ef8b387 | Crestwave | 2022-01-19 20:26:13 -0600 fix: add support for Haiku These are patches applied by upstream packagers. -------------------------------------------------------------------------------- 72eb5c4738 | Edgar A. Bering IV | 2022-01-19 19:53:49 -0600 docs: update CREDITS.txt -------------------------------------------------------------------------------- 12e810a91a | Edgar A. Bering IV | 2022-01-19 19:49:35 -0600 fix: update runrest_stop defaults for modern times and old doors Closes #2346, Closes #2368 -------------------------------------------------------------------------------- e87ddf7535 | Edgar A. Bering IV | 2022-01-19 18:54:23 -0600 feat: give out some fancy shields in Snake Give Naga Warriors a chance of getting a good_item shield. Overall this will result in an average of 2-3 good shields per Snake. With the lootfeel shifts of Spider and Swamp, and Shoals' throwing items, Snake was already somewhat distinguished by the chance of getting a kite or tower shield off of a Naga warrior. Adding a small chance for the shield to be fancy should make this pop a bit more as lootfeel. -------------------------------------------------------------------------------- 477bb3ace5 | hellmonk | 2022-01-19 18:43:26 -0600 feat: two new spider ends Adds a broodmother end and a themed ending that only places non-spiders. -------------------------------------------------------------------------------- acdfd95529 | hellmonk | 2022-01-19 18:29:16 -0600 feat: update floodkiller_spider_rune_tomb Add new monsters and some loot, cut density a bit. -------------------------------------------------------------------------------- 1478b6322d | hellmonk | 2022-01-19 18:29:16 -0600 feat: adjust arachne_lair spider end Reglyph and add new monsters and loot, fix some substs. -------------------------------------------------------------------------------- dbc70543e1 | hellmonk | 2022-01-19 18:29:16 -0600 feat: update grunt_spider_rune_island Add new monsters and loot, reglyph. -------------------------------------------------------------------------------- 9ca27bf259 | hellmonk | 2022-01-19 18:29:16 -0600 feat: adjust grunt_spider_rune_parallel add new monsters and loot, reduce density slightly. -------------------------------------------------------------------------------- 46fceaadd4 | hellmonk | 2022-01-19 18:29:16 -0600 feat: adjust guppyfry_spider_rune add new monsters and loot -------------------------------------------------------------------------------- 86b270519b | hellmonk | 2022-01-19 18:29:16 -0600 feat: adjust grunt_spider_rune_circles Add worms and loot, rewrite some of the monster randomization. -------------------------------------------------------------------------------- 85af5c1198 | hellmonk | 2022-01-19 18:29:15 -0600 feat: update and reglyph spider_rune_water Add a few of the new monsters, change trash mob randomization, add some loot. -------------------------------------------------------------------------------- dee6c067ee | hellmonk | 2022-01-19 18:29:15 -0600 feat: loot function for spider ends Not in use yet, but soon? -------------------------------------------------------------------------------- c6f6baafec | hellmonk | 2022-01-19 18:29:15 -0600 feat: two spider minivaults featuring some of the new monsters -------------------------------------------------------------------------------- aeca334d3e | hellmonk | 2022-01-19 18:20:09 -0600 feat: adjustments to non-end spider vaults -------------------------------------------------------------------------------- 9e22a525d0 | hellmonk | 2022-01-19 18:20:02 -0600 feat: two new spider entry vaults -------------------------------------------------------------------------------- 88295113b6 | hellmonk | 2022-01-19 18:19:57 -0600 feat: update spider entry vaults -------------------------------------------------------------------------------- 77cbbf62ba | Aliscans | 2022-01-19 10:58:41 -0500 fix: Make space toggle the selected item in shop menus. Pressing either Space or Return had attempted to buy the selected items. This changes Space to match the effect '.' has, which matches the behaviour b5dea8a184 added to various other prompts. The effect of the space bar remains undocumented. -------------------------------------------------------------------------------- 1695149f81 | Kate | 2022-01-19 06:27:41 +0000 Checkwhite -------------------------------------------------------------------------------- e73e3526bd | Nicholas Feinberg | 2022-01-18 22:03:15 -0800 Cleanup meatsprint des We no longer need to specify ident:all or no_pickup, since both are always true. -------------------------------------------------------------------------------- 95a8017c83 | advil | 2022-01-18 21:00:48 -0500 feat: arrow key navigation for the memorize As a bonus, I made left and right work to move between menu panes, as it felt fairly natural. At some point I'll experiment with generalizing this beyond this menu. -------------------------------------------------------------------------------- 7369b063a1 | advil | 2022-01-18 20:50:27 -0500 feat: arrow selection for spell cast/describe menu Also some minor formatting tweaks. There's still one extremely minor issue I can't track down, where this menu's with changes on ! in webtiles. -------------------------------------------------------------------------------- 52c9ff9b3a | advil | 2022-01-18 20:15:09 -0500 feat: enable arrow selection for ability menu Pretty straightforward, no special tweaks needed that I'm aware of. -------------------------------------------------------------------------------- 2eedf47f95 | advil | 2022-01-18 20:11:35 -0500 fix: improve webtiles menu pageup In menus with variable height menu items, this was occasionally overshooting the last visible. This commit fixes the problem, but for pageup maybe the relative hover position should be handled differently. -------------------------------------------------------------------------------- 99ac4a3411 | advil | 2022-01-18 20:11:35 -0500 feat: stash search menu improvements The ultimate aim of this is to make this menu workable with arrow key selection. Previously, carried item results weren't hotkeyed at all (presumably because travel is pointless), but this didn't quite work for arrow selection. * All stash search results are selectable. * Visually, items at the player's feet and in their inventory are grouped together, and the former are now clearly indicated in the menu. A hotkey (,) quick-moves the menu between these sections. * In travel mode, selecting an item at the player's position doesn't do anything; previously this was true for carried items (because they weren't selectable) but did open for things on the ground. Possibly it would be clearer to do something in this case, maybe a message? Or open a description? These items are also greyed out in travel mode. * Subheads are now cyan for better readability * Various supporting Menu API improvements (including some bits that are probably extremely useful in the future but didn't end up fully needed here.) It would be possible, but I found it a bit confusing on first implementation, to start the menu with the first item not at the player's position selected. Will revisit this on feedback. I think with the , hotkey this isn't as important. Other TBD improvements: the keyhelp could be improved and standardized, I think it might be good to support right click to describe in this menu. -------------------------------------------------------------------------------- 060a6a1bfc | Kate | 2022-01-18 17:22:39 +0000 Fix some spell description typos -------------------------------------------------------------------------------- 417bf1fd16 | Edgar A. Bering IV | 2022-01-18 09:03:21 -0600 fix: a teleport closet (12658) -------------------------------------------------------------------------------- cbc3b0e11f | Edgar A. Bering IV | 2022-01-18 09:00:01 -0600 docs: changelog through 0.28-a0-1557-g548886b -------------------------------------------------------------------------------- 548886b2ed | Edgar A. Bering IV | 2022-01-17 21:53:49 -0600 feat: slightly increase the orb floor drop rate Since orbs, unlike shields, don't come as monster gear currently. -------------------------------------------------------------------------------- 303e8cf5e6 | Edgar A. Bering IV | 2022-01-17 21:53:49 -0600 fix: tune down guile a lil bit -------------------------------------------------------------------------------- 9ae15a6949 | Nicholas Feinberg | 2022-01-17 18:42:51 -0800 Move Passwall check to a better place The confusingly similarly named casting_ and _spell uselessness checks are for different things - casting_ is only for costs, Ru sacrifices, and a few other broad things, whereas whereas spell_ checks everything else. -------------------------------------------------------------------------------- 6f2a123a96 | Nicholas Feinberg | 2022-01-17 18:42:28 -0800 Make Call Imp fight alongside you Typo in 877f77fdfb4cba3a06bde7f51e1239edfa655e6c . -------------------------------------------------------------------------------- 6a8d134351 | Edgar A. Bering IV | 2022-01-17 20:38:49 -0600 fix: restrict passwall's constriction restriction to passwall -------------------------------------------------------------------------------- ad4bc827a9 | Edgar A. Bering IV | 2022-01-17 20:26:09 -0600 text: clarify transmutations spell power effects -------------------------------------------------------------------------------- 877f77fdfb | Edgar A. Bering IV | 2022-01-17 20:00:32 -0600 text: clarify the spellpower dependence of Summonings spells (10906) -------------------------------------------------------------------------------- eb7d2789bd | Edgar A. Bering IV | 2022-01-17 19:03:05 -0600 feat: stop teleporting passwall obstructing monsters (5107, 12041) The player has paid the MP and delay cost, if we can't shift the target abort. The lack of space only occurs in packed vaults and specific vaults and allows for cheesing more than it adds gameplay. Closes #2127 -------------------------------------------------------------------------------- 753840947a | Edgar A. Bering IV | 2022-01-17 18:21:26 -0600 fix: trigger explore traps on passwall end immediately (12647, 11952) The "free turn" exempting players from traps was unintuitive and surprising. Unlike doors and fog, which do bring new tiles into view, remaining completely in place and triggering a trap in a subsequent turn breaks the feel and expectation of trap effects. -------------------------------------------------------------------------------- a3b06d5894 | Edgar A. Bering IV | 2022-01-17 18:04:44 -0600 fix: prevent passwall while constricted Constriction interrupts passwall, but then you can just start again. Not that it's a good idea often, but for consistency with stair delays constriction blocks passwall. -------------------------------------------------------------------------------- 15810a7b44 | Edgar A. Bering IV | 2022-01-17 17:25:48 -0600 fix: treat Passwall like stair and shaft-self delays Treating Passwall like a usual delay, as opposed to a multi-turn move commitment like shaft self and stairs, created all sorts of weird things as documented in Mantis #12239, #11825, and #10961. Treating it like a stair or shaft self delay makes it behave more like "movement" and gives it a consistent set of rules. -------------------------------------------------------------------------------- 957fa82e37 | Edgar A. Bering IV | 2022-01-17 17:25:36 -0600 fix: adjust some inapprorpiate uses of force interrupts -------------------------------------------------------------------------------- 945cd3f27e | Nicholas Feinberg | 2022-01-17 13:35:51 -0800 Fix thunderhulk armour (Nomi) -------------------------------------------------------------------------------- ef8730868c | Edgar A. Bering IV | 2022-01-17 15:15:57 -0600 fix: respect FTILE when destroying terrain Closes #1628 -------------------------------------------------------------------------------- e92cbb8f83 | Edgar A. Bering IV | 2022-01-17 14:20:18 -0600 fix: enrage elven twins taken to duel If a player duels one sibling have the other react as if they're already dead. This is because there are only three ways out of the arena for the player - their death (so who cares) - the death of the elven twin they're dueling (so the twin's gonna be mad when they get back) - renouncing okawaru within the arena to escape (twin's still mad that you dared do such a thing, also a ridiculous edge case) Closes #2325 -------------------------------------------------------------------------------- 7dfede7c9b | Edgar A. Bering IV | 2022-01-17 13:52:20 -0600 fix: the build -------------------------------------------------------------------------------- eb816f4f03 | Edgar A. Bering IV | 2022-01-17 13:34:55 -0600 fix: set pet_target when using a LOS attack spell Relevant for Hepliaklqana followers in the days of shooting through your Hep ancestor. Closes #2256. -------------------------------------------------------------------------------- 4c6099d30f | Edgar A. Bering IV | 2022-01-17 13:34:55 -0600 fix: don't offer to throw_item_no_quiver if you're a cat Closes #2348. -------------------------------------------------------------------------------- b657c59d09 | Edgar A. Bering IV | 2022-01-17 13:34:55 -0600 fix: keep grey dracs unbreathing in dragon form Since everyone else keeps their breath weapon and grey dracs don't get one they should get this! Closes #2349 -------------------------------------------------------------------------------- 933e3b857f | Edgar A. Bering IV | 2022-01-17 13:34:55 -0600 fix: add breaks to a switch statement 467f337aae6 did not intend these fallthroughs. Closes #2350. -------------------------------------------------------------------------------- 9ba09be145 | Edgar A. Bering IV | 2022-01-17 13:34:55 -0600 fix: don't try to die repeatedly if pending revival Prevent reflection and other misc bound soul related crashes when the revival is triggered by something on the monster's turn. Closes #2323. -------------------------------------------------------------------------------- 5967ad2b6c | Edgar A. Bering IV | 2022-01-17 13:34:55 -0600 fix: don't offer unavailable gods in interlevel travel Closes #2315 -------------------------------------------------------------------------------- a1f3fc70dd | Edgar A. Bering IV | 2022-01-17 13:34:55 -0600 fix: correct the Xom webtiles moodmeter Closes #2186 -------------------------------------------------------------------------------- 811ca023a5 | Edgar A. Bering IV | 2022-01-17 13:34:55 -0600 fix: a teleport closet in an arrival Closes #2151 -------------------------------------------------------------------------------- ee5c5fb8bb | advil | 2022-01-17 14:04:51 -0500 fix: re-allow `w-` Originates from fc4545441119, because of the new tag, `-` in this menu needed a menu-specific check. Also, generalize this code a bit, and add the macro submenu to the list as well. Resolves #2363 -------------------------------------------------------------------------------- 570b316de1 | advil | 2022-01-17 13:58:17 -0500 fix: default for menu_arrow_control intended to be true, oops -------------------------------------------------------------------------------- 866c7d65e6 | advil | 2022-01-17 13:44:10 -0500 docs: remove a spurious plural I already fixed one mismatch between this heading and ToC but missed the plural. -------------------------------------------------------------------------------- 7af6551d5a | advil | 2022-01-17 13:35:47 -0500 feat: option to disable arrow key menu control I admit that 50% of the reason I'm adding this is so that the 1% of the player base that is enraged by >90s UI features will stop bugging me. But I suspect it could also be useful for accessibility purposes to be able to disable hover in console -- for example I doubt it works well with screen readers without some specific effort that I don't really know how to do. As a side effect this option does disable arrow control for all menus that had it added in the 0.27 cycle. -------------------------------------------------------------------------------- be3f6fb03a | advil | 2022-01-17 11:25:42 -0500 docs: move auto_hide_spells to a different section I think this was probably in 3-a because its consequences do happen during pickup, but I think it's probably more intuitive for it to be in the "Command Enhancements" section with most other spell options. -------------------------------------------------------------------------------- 8903882b62 | advil | 2022-01-17 11:15:20 -0500 fix: swap order in add_alias calls oops -------------------------------------------------------------------------------- 6c7bc2a1f9 | advil | 2022-01-17 11:07:18 -0500 refactor: rename `.._brand` options to `.._highlight` I assume there's some charming retro-roguelike and/or Australian explanation for the use of "brand" here, but it seems completely non-standard now and extremely confusing. I chose "highlight" as a much more intuitive name. I also rewrote a fair amount of the options guide for these beyond the name, partly with an eye towards including all the search terms I initially tried when looking for this code the other day. This is a full internal rename as well. The actual implementation of these options is very odd and could use some refactoring, but I'm not going to do that right now. Needs testing on Windows (CI should be enough). -------------------------------------------------------------------------------- 7e9bcdcf84 | advil | 2022-01-17 10:09:11 -0500 feat: add shift-left/right as line up/down menu shortcuts This is because in my testing I've found terminals that by default only define shift left/right and not up/down, and shift left/right weren't doing anything at all in any menus. For completeness I added this in webtiles also, though shift up/down already worked there. -------------------------------------------------------------------------------- 066c4f1fa3 | advil | 2022-01-17 10:09:11 -0500 fix: correctly handle console shift arrows if defined Previously, the crawl binary got ncurses keycodes that were not ignored by the binary but not interpreted properly. This translates the keycodes to crawl's internal scheme, so that they are recognized by e.g. the menu code. If people had macros for these keycodes they will need to remap. Worth noting that these being correctly produced is pretty variable. E.g. in my testing, iTerm defines all of them, mac terminal defines only left and right, and putty defines none of them. Usually (always?) what happens instead is that the terminal sends the escape codes for regular arrow keys. It would be possible to configure them in at least some terminals using the escape codes that I noted in the comments. -------------------------------------------------------------------------------- e72afd5fc6 | Kate | 2022-01-17 06:53:36 +0000 Don't let monsters try to re-polymorph a polymorphed player Fixes monsters wasting charges and turns emptying their wands of polymorph after already having succeeded at polymorphing the player. -------------------------------------------------------------------------------- 5f3ffaac98 | Kate | 2022-01-17 06:53:36 +0000 Let monsters use spell_logic for zapping wands Doesn't have any effect currently, but makes it possible to add better logic for deciding whether to zap a wand where needed. -------------------------------------------------------------------------------- 8550a1e9b9 | Kate | 2022-01-17 06:53:36 +0000 Mark confusion beams as harmless to monsters with clarity -------------------------------------------------------------------------------- 870370a84a | Kate | 2022-01-17 06:53:36 +0000 Remove Mephitic Cloud's damage It did 0-2 damage, which was mostly insignificant but resulted in it not being consistently marked as useless against targets with clarity (with a hack for the player to mark it harmless unless below 2HP). Instead remove the damage and handle clarity properly. -------------------------------------------------------------------------------- c3277d3759 | hellmonk | 2022-01-16 21:24:36 -0500 tweak some spider monsters Make some of the new spider enemies a little frailer. -------------------------------------------------------------------------------- c307741d3e | hellmonk | 2022-01-16 20:49:56 -0500 feat: tweak layout_spider_delve Adjust parameters to avoid generating big open levels so frequently. -------------------------------------------------------------------------------- be868bca14 | advil | 2022-01-15 22:20:35 -0500 fix: tone down default `may_stab_brand` (G-flex) This was set to yellow, which by default on most terminals is extremely bright as a background color, with poor contrast with many foreground glyph colors. Most players were either used to this and didn't notice, or playing in 8 color putty where this comes out as `brown`, not the brighter yellow that putty is also capable of displaying (but doesn't on default settings). I think `brown` (which is typically a sort of mustard color) has much better contrast on terminals I've tried anyways, and it's not otherwise used for a monster highlight, so let's go with that. -------------------------------------------------------------------------------- 020f416216 | advil | 2022-01-15 21:55:53 -0500 fix: revert main menu hover changes Using lightgrey with a manually inverted foreground color seems safer overall in terms of contrast since this menu doesn't need to ever change foreground color; unfortunately the implementation (which I've just restored) is all a bit ad hoc. Possibly this hover scheme could be better generalized. -------------------------------------------------------------------------------- 37088b3766 | advil | 2022-01-15 21:55:53 -0500 fix: tweak hover color for 8 color consoles This moves it from lightgray to blue, since the latter has much better overall contrast with all foreground colors. -------------------------------------------------------------------------------- 81556d0073 | advil | 2022-01-15 21:55:53 -0500 feat: color/display diagnostic popup The somewhat odd situation has emerged several times recently that console players don't realize that their terminal is running in some variant of an 8 color compatibility mode. First, when allow_extended_colors=true was made the default and people thought 16 color mode was "new", and then more recently, when putty users have been complaining about the new menu hover being too non-contrasty. (I'll actually change that, but this isn't that commit.) This popup provides in-game information that is mostly relevant to console players about what their terminal and options are actually doing. It's largely aimed to make it clear to putty users that something is wrong, but should be more generally useful. For other build targets most of the information isn't relevant, but it still shows the color palettes corresponding to the 8/16 ANSI colors. The popup is slightly hidden, under `?!`. I can imagine a later approach where it is under an "advanced" submenu of the game menu, especially if it eventually becomes an interactive popup. But for now this also lets it be used at the main menu. Still needs testing on windows. -------------------------------------------------------------------------------- 3e5f17529f | advil | 2022-01-15 21:55:53 -0500 feat: support background colors in formatted_string This is not something that I think we should start using much, or really even at all, but it's very useful for diagnostic purposes. -------------------------------------------------------------------------------- e4f4046303 | Kate | 2022-01-15 22:42:27 +0000 Don't allow attempting to enter Malign Gateway portals It was very rarely possible to even try since usually the portal would be blocked by the tentacle, and having it deal a small amount of damage and blink the player is unnecessarily complicated compared to just treating it consistently as a solid feature. -------------------------------------------------------------------------------- 142ac7cd73 | Kate | 2022-01-15 22:42:27 +0000 Don't use Malign Gateways as walls for Creeping Frost (#2359) They're sort of solid for most purposes, but shouldn't be valid targets for Creeping Frost. Closes #2359. -------------------------------------------------------------------------------- 0647d9364e | Kate | 2022-01-15 21:31:10 +0000 Refactor piety gain prevention in the Abyss Fixes a number of bugs: Ru and Ashenzari will no longer offer new sacrifices/curses from exploring or killing monsters in the Abyss, but if the player enters with one already available, they can still gain piety from taking it. Gods in general will no longer give misleading messages about accepting your kills in the Abyss. Beogh will no longer gift new followers or upgrade weapons/armour/classes of existing followers, but will still give existing followers healing. Hints mode won't give a hint about gaining XP for killing a monster in the Abyss. Yredelemnul piety will be properly tracked on gaining zombie followers. Converting to Lugonu or picking your first god as a monk in the Abyss will properly give bonus piety. -------------------------------------------------------------------------------- d0f6b136d3 | hellmonk | 2022-01-13 23:31:53 -0500 feat: shrink some spider bands Make the monster density a little less overwhelming. -------------------------------------------------------------------------------- 5ff2a343f8 | hellmonk | 2022-01-13 23:19:47 -0500 rework orb of destruction damage formulas Removes a secret hidden power stepdown and makes the formula linear. The new formula is roughly equivalent damage to the old at low power, somewhat worse at about 100 power, and very slightly worse at 200 power. Additionally, to emphasize the positional aspect of the spell, change the damage dropoff at low distance to more harshly penalize point-blank iood casts. Distance 1 now deals a wimpy 30% damage (was 50%) and 60% at range 2 (was 70%). Range 3 and above are unchanged. Can be adjusted further if this is an overnerf. -------------------------------------------------------------------------------- 054e75b119 | Kate | 2022-01-14 01:03:26 +0000 Reword an ushabti cast message -------------------------------------------------------------------------------- b10ca78fad | Kate | 2022-01-14 01:00:15 +0000 Fix inventory menu colouring not being used in item menus Possibly the new item selection menus could use a new menu_colour category, but previously they used the inventory category so keeping that behaviour seems reasonable. -------------------------------------------------------------------------------- 3893175d92 | Nicholas Feinberg | 2022-01-12 22:10:48 -0800 Add Summon Hell Sentinel description (Nomi) Oversight in ff29be1aa77. -------------------------------------------------------------------------------- 8c907de6ad | advil | 2022-01-12 19:12:58 -0500 fix: memorise menu ui tweaks * convert to keyhelp, remove custom set_more calls, make keyhelp more consistent with others. * fix various spacing issues, including interactions of search and divine exegesis, search width in local tiles, column alignment consistency. * Indent the more if the title is indented (both tiles targets). I'm not actually sure I like how this looks but it leads to a more consistent UI behavior with console spacing. It also prevents window size jumping in local tiles in various cases. What would be better is if the more column width itself could be adjusted, but that seems extremely hard. The code to generate this menu's keyhelp remains an unholy mess of c and c++ style string formatting. -------------------------------------------------------------------------------- 839a4452db | Nicholas Feinberg | 2022-01-12 11:25:18 -0800 Turn Spider noise back down (ardl) It was quieted down back when web sense was removed, but Spider monsters are a lot more lively now - players don't need as big a party to have fun. We can re-revert this if spider feels too lonely with normal noise. -------------------------------------------------------------------------------- 9e29e62679 | Nicholas Feinberg | 2022-01-12 11:24:43 -0800 Revert "REVERTME: increase orb rate for testing" Initial testing is done. This reverts commit 8dc402e3264e5ac93cec5fabe3b95c5186369434. -------------------------------------------------------------------------------- 98be2d08f0 | Nicholas Feinberg | 2022-01-12 11:24:32 -0800 Revert "force Spider generation for testing" Initial testing is done. This reverts commit be321230710a090a0a22678120c99eebdee71df4. -------------------------------------------------------------------------------- 99b08493b7 | Nicholas Feinberg | 2022-01-12 11:24:19 -0800 Revert "REVERTME: Make infusion gloves very common" Initial testing is done. This reverts commit e3c729c0851fa3275ad841092a6c6a803fe431f6. -------------------------------------------------------------------------------- 21c982267c | Nicholas Feinberg | 2022-01-12 11:04:02 -0800 Halve Anguish damage (ebering) It was a bit much. -------------------------------------------------------------------------------- f88bddc06d | advil | 2022-01-12 13:41:39 -0500 fix: fix hover colors on 8 color consoles and standardize On 8 color consoles, a darkgrey background color as hover shows up as black. This commit uses lightgrey in an 8 color setting instead. Otherwise, I think darkgrey looks better, though it's possible opinions may differ. (If they do, we'll find out soon, since I've applied this standardization to the main menu as well -- it used its own custom hover color.) -------------------------------------------------------------------------------- 61e5acc4d9 | advil | 2022-01-12 13:41:39 -0500 doc: further clarify some console color logic Add a contenful comment to the relevant code, and restructure the options documentation. -------------------------------------------------------------------------------- ab9d7fee88 | Edgar A. Bering IV | 2022-01-12 10:26:41 -0600 feat: reduce poison dart quantity At current quantities a character can always have a mega ammount past the early game, and is incentivsed to use them whenever they lack a stronger ranged alternative at minimal cost. Let's lower the stack size to put a bit more strategic pressure on their use. Poison darts are in a bit of an awkward place relative to their other thrown siblings, it might make more sense to move the poison brand to boomers and have darts only be specialty items, but that's for a future consideration. -------------------------------------------------------------------------------- 3c2d7996e7 | Kiëd Llaentenn | 2022-01-12 09:38:14 -0600 fix: make Trog tantrum if orb of energy is used An orb of energy is primarily used for enhancing spellcasting, so it makes sense that it should be considered a wizardly item and thus that Trog should frown upon its use. -------------------------------------------------------------------------------- 5f9446187d | nlavsky | 2022-01-12 09:37:25 -0600 feat: don't grant explore piety to Jiyva worshippers in the Slime Pits Granting exploration piety in the Slime Pits encourages Jiyva worshippers to fully explore this threat-free branch. A dozen tests show that if the player dives the Slime Pits and joins Jiyva on the last floor, they'll have 63-105 piety from auto-exploring the rest of the branch. The average is 86 piety, which is three stars. Joining Jiyva before entering the branch guarantees that the player will get to 100+ piety and reach four stars after fully exploring the Pits. -------------------------------------------------------------------------------- 253b278887 | Edgar A. Bering IV | 2022-01-12 09:36:08 -0600 fix: throatcutter doll tile -------------------------------------------------------------------------------- 08698888e4 | Edgar A. Bering IV | 2022-01-11 22:14:14 -0600 feat: an untended Ignis altar temple 12 altars with nice plants and roaring votive fires, plus an Ignis altar and some ecumenical altars with sputtering smoke and cobwebs. Less dramatic than pdpol_scorched_temple to tell a more subtued ecumenical story about abandonment. -------------------------------------------------------------------------------- 7e3bb95383 | paul | 2022-01-11 22:14:14 -0600 feat: a rare Ignis-themed temple [ Committer's note: Closes #2219. Tweaked the lava lake room and the tile and console colours, used granite statues instead of stone arches for the broken pillars for consistency. Added water to the smaller rooms and wall contrasts. ] -------------------------------------------------------------------------------- 7d64a5f647 | paul | 2022-01-11 22:14:14 -0600 fix: an off by one error in a temple vault altar count It looks like minmay_temple_bridge_d expects to place 17 or 18 altars but there are only markers for 16 or 17. -------------------------------------------------------------------------------- a01311f068 | paul | 2022-01-11 22:14:14 -0600 fix: a comment on pow_rolls default value -------------------------------------------------------------------------------- a6001f96d0 | advil | 2022-01-11 19:52:28 -0500 feat: add `bold_brightens_foreground=force` Recently it came up that it can be helpful for console readability to be able to use bold weight on bright colors even on modern terminals, not just as a workaround; people (and by people I mean ebering) had been doing this just by using 8 color mode. This commit provides an option to not ignore bold_brightens_foreground in 16 color mode. -------------------------------------------------------------------------------- 24bb901ea4 | advil | 2022-01-11 19:52:28 -0500 fix: more consistent shopping list menu keyhelp Move the shopping list keyhelp to the more, make it more consistent with other keyhelps (especially shops). This also fixes a number of misc base class issues: * correctly handle default keyhelp more init * spacing in default keyhelp * generalize some code for lettering in keyhelps * update_more timing -------------------------------------------------------------------------------- 0a3215c577 | Edgar A. Bering IV | 2022-01-11 17:40:07 -0600 fix: don't feel guilty for choppin firewood Don't cause Anguish damage when attacking firewood. -------------------------------------------------------------------------------- 8196b01e9b | Kate | 2022-01-11 07:31:45 +0000 Fix Xom granting ~4 potions of experience at once Caused by !XP now caring about effect power. -------------------------------------------------------------------------------- 077359a4bf | Perry Fraser | 2022-01-10 20:44:47 -0600 fix: display_bar should clamp negative values * fix: display_bar should clamp negative values If a bar was displayed of something with a negative value (like with EV) then text such as "EV: none (normally )" could be displayed. This function is only used for values that aren't meaningful when negative, so let's clamp any negative values to zero. -------------------------------------------------------------------------------- a4b24466b4 | Edgar A. Bering IV | 2022-01-10 19:31:10 -0600 fix: an anguishing crash -------------------------------------------------------------------------------- da10c1d967 | Edgar A. Bering IV | 2022-01-10 18:44:32 -0600 tiles: throatcutter and maulers (Sastreii) Closes #2322 -------------------------------------------------------------------------------- fc45454411 | advil | 2022-01-10 18:51:03 -0500 fix: disable item class hotkeys in UseItemMenu This adds nothing except surprises, especially the case noticed by ebering, where an optimistic person might imagine that the `r` menu has a help dialog and instead read the first scroll. Implementation is ugly.. -------------------------------------------------------------------------------- 7509e2a2af | Perry Fraser | 2022-01-10 17:22:17 -0600 fix: phial should always engulf the center target Previously, if the phial of floods knocked a target back onto a non-floor or water feature like a staircase, then no flooding would generate at that location (fine) and consequently no waterlogging/engulfing (not fine). Let's instead make create_feat_splash return a set of coordinates, and add back the center location before iterating over monsters to waterlog. Closes #2331. -------------------------------------------------------------------------------- 744777c2d9 | advil | 2022-01-10 18:20:58 -0500 feat: enable arrow keys for shopping list menu Also, improve the behavior of a subprompt for long item names. -------------------------------------------------------------------------------- 74d9c6da68 | advil | 2022-01-10 18:20:58 -0500 fix: show hover by default for shop menu -------------------------------------------------------------------------------- 486f26dfa3 | Edgar A. Bering IV | 2022-01-10 17:19:12 -0600 fix: an intermittent levelgen crash An operator precedence bug. The necessary check is covered by !feat_is_gate in the changed conditional. -------------------------------------------------------------------------------- 273aa18710 | advil | 2022-01-10 17:35:54 -0500 fix: don't check gold for MSG_NOTHING_CARRIED -------------------------------------------------------------------------------- 7cf701f5d5 | advil | 2022-01-10 17:35:54 -0500 fix: don't crash when cycling hover on an empty menu This is an old one, but I guess it's harder to trigger without item menus. -------------------------------------------------------------------------------- 6dc9c6bb35 | Perry Fraser | 2022-01-10 16:31:03 -0600 fix: properly describe moving staircases When you climbed down a staircase while Xom was sliding them around, you could get the message " slides away from you right [...]". The stair was being described by feature_description_at which only uses the player map knowledge, which means the staircase would be DNGN_UNSEEN. This uses feature_description instead to get around that. -------------------------------------------------------------------------------- 56126dae6c | advil | 2022-01-10 17:24:17 -0500 fix: properly sync non-templated mores to webtiles -------------------------------------------------------------------------------- 62e843ad78 | advil | 2022-01-10 17:07:09 -0500 fix: crash during settings_db initial generation Reported by @Walther in #2332 -------------------------------------------------------------------------------- 442d625886 | advil | 2022-01-10 17:06:53 -0500 fix: don't send crash milestones over webtiles sockets This appeared in 6ef7baa362 but shouldn't be applied to the case of crash milestones. (a) this code is super heavy and not safe after a crash, and (b) it has timing issues with the socket closing, and so was causing recursive crashes on a dead socket. (This is why no crash milestones have appeared for the last couple weeks, they've all been recursive crashes which don't generate milestones.) To be clear, after this commit crashes will still be written directly to the milestones file. -------------------------------------------------------------------------------- 981f6e296f | robertxgray | 2022-01-10 15:43:02 -0600 fix: check negative energy resistance when casting vampiric drain The game doesn't warn the player when casting vampiric drain on natural monsters with immunity to negative energy (Josephine). -------------------------------------------------------------------------------- 841984c3b6 | Aliscans | 2022-01-10 15:33:48 -0600 fix: stop artefact amulets of faith from flashing on first worshipping Gozag The game checked ignore_faith_reason() when a non-demigod puts on an amulet of faith, and checked is_useless_item() when one committed to a god. These give different results for artefacts (which are never considered "useless"). It now checks ignore_faith_reason() in both cases, and there is no special message when a character wearing an amulet of faith worships Ashenzari, Gozag or Ignis. Co-authored-by: Aliscans -------------------------------------------------------------------------------- 8b0d500728 | Aliscans | 2022-01-10 15:31:07 -0600 feat: mark identify scrolls as useless once everything is identified. Create a "have identified all potions and scrolls" prop. Scrolls of identify are treated as useless if it is set. It's updated on game load if the version has changed, and also whenever set_ident_type() changes something. This also refactors several checks for complete identification to check this prop. [ Committer's note: Closes #2244. Added Mu special casing. ] -------------------------------------------------------------------------------- 6790c33dfa | advil | 2022-01-10 15:57:59 -0500 fix: don't divide by 0 in keyhelp rendering missed because clang doesn't crash, gcc does -------------------------------------------------------------------------------- 1e88248612 | advil | 2022-01-10 15:04:48 -0500 fix: update acquire menu to work with item menu changes The acquire menu had its own custom keyhandling for some reason; this commit removes this and uses the `Menu` default keyhandling. It also updates this menu's keyhelp to use the new API (and fixes some issues in that API that I had missed). -------------------------------------------------------------------------------- 30118fcd2b | advil | 2022-01-10 15:04:48 -0500 fix: remove old cursor code This has been semi-broken for some time, completely broken on webtiles, and was also a fairly bad implementation of the idea to begin with. It is superseded by the new hover code, so let's just kill it completely. -------------------------------------------------------------------------------- b5dea8a184 | advil | 2022-01-10 15:04:48 -0500 feat: arrow key controls for item menus This ended up being a fairly big change that needed to be mostly done at once. This affects every item menu except stash search and shopping list (which I'll do in a later commit). Because this affects a *lot* of different UI elements, there may be some more testing needed... Menu-general changes: * Arrows controlling hover is fully implemented for multiselect menus (previously only for singleselect menus). In webtiles and tiles, shift+arrow have the old behavior, but I haven't gotten this to work on console. * MF_ALWAYS_SHOW_MORE is removed; a more is now visible iff it is non-empty. * New flag, MF_INIT_HOVER: if set, show hover on initial display. Previously menus have needed to manually call `cycle_hover`. This is on for all item menus except the regular inventory. * New virtual method, get_keyhelp: generate a keyhelp more for both the case of a menu with scroll bars, and a menu without. Designed to be overridden, see the known item menu for an example. * scroller keyhelp is shown in more cases and fully implemented in tiles targets (before it was only complete for console) * Many hover issues fixed and tweaked, especially in webtiles * Old multiselect cursor stuff is disabled, will be removed in a separate commit * In multi-select menus '.' does not change the hover. (If people want a key that does this it could be arranged, but it isn't so clear anyone has been using the old cursor -- it was broken on webtiles anyways.) Item menu changes: * MF_ARROWS_SELECT is on for any item menu unless it is MF_NOSELECT * Bugs in multiselect category selection fixed, category selection snaps category into view UseItemMenu: * better indication of `easy_floor_use`. (Though, from a UI perspective, I'm not a fan of this being on by default, it's not very consistent...) * hovering can cross that inv/floor boundry and reletters items when it does so. (Needs to ping the server on webtiles unfortunately.) -------------------------------------------------------------------------------- cdc11d4697 | advil | 2022-01-10 15:04:48 -0500 refactor: remove `easy_quit_item_prompts` (wheals) Since c5434703b61cb9, these prompts have been quite hard to get to, and are perhaps on the verge of disappearing altogether. I think this option may have also targeted worry about some potential item-wasting cases (maybe enchant scrolls and the like), but if so, these cases are long gone as well. At this point, this micro-option doesn't serve much purpose, so remove (retaining the current default behavior). -------------------------------------------------------------------------------- 20fba0d420 | advil | 2022-01-10 15:04:47 -0500 refactor: simplify drop ui Previously, the drop menu would let you drop to a prompt by hitting enter with nothing selected. This is not very useful, and the code was a mess; plus I plan to change the behavior of enter somewhat in a later commit. (I guess there may be players out there who will need to remap enter+letter to letter+enter at the worst?) If there's really demand for the prompt mode it may be better to integrate it with prompt_invent_item and get a working codepath for the toggle. But for now just make this function much more straightforward -- as of this commit, enter with nothing selected just exits. -------------------------------------------------------------------------------- 95bfa34988 | advil | 2022-01-10 15:04:47 -0500 feat: clean up and generalize menu keyhelp code This commit generalizes the keyhelp code and makes most of it less client-specific: * show scroll keyhelp on all clients * refactor the templating code for adding in the percent so that it can be used on local tiles and is a bit less ad hoc (it's still weird though). * refactor so that keyhelp can be overridden. -------------------------------------------------------------------------------- 84980b0d82 | advil | 2022-01-10 15:04:47 -0500 fix: adjust shop keyhelp The right-click hint is only accurate for local tiles; for webtiles any click outside will work but a right-click inside will not -- too complex to describe, but also now standardized. -------------------------------------------------------------------------------- 370c3107d9 | advil | 2022-01-10 15:04:47 -0500 fix: modernize some inventory code -------------------------------------------------------------------------------- dc4cd7eb33 | Edgar A. Bering IV | 2022-01-10 13:53:10 -0600 fix: don't scan for unlinked items midway through abyss vault generation -------------------------------------------------------------------------------- 66ff00425e | Goratrix | 2022-01-10 11:01:11 -0600 fix: small tweaks to crystal spear projectile tiles Correct size and remove stray pixel in crystal_spear1.png and clean up the rest of the tiles. -------------------------------------------------------------------------------- d6a3831c70 | Nikolai Lavsky | 2022-01-10 10:54:02 -0600 feat: display potion/scroll rarity on the item knowledge screen As a followup to 2f15ad60, this commit makes it easier to compare potion/scroll rarities by displaying all of them on one screen. When deciding which unidentified consumables to use in order to survive, players often check the `\-` screen to see possible outcomes. So it makes the item knowledge screen a perfect place for this information. -------------------------------------------------------------------------------- aeb352d00f | Perry Fraser | 2022-01-10 10:35:06 -0600 fix: skip title on tiles integration tests -------------------------------------------------------------------------------- 78a2654a08 | Edgar A. Bering IV | 2022-01-10 10:30:02 -0600 text: update some Yred translation keys -------------------------------------------------------------------------------- 374218e70b | Zhang Kai | 2022-01-10 10:29:21 -0600 text: update Chinese translations of ability.txt Add translations. 增添翻译。 [ Committer's note: Fixed whitespace, Closes #2203. ] -------------------------------------------------------------------------------- 9084b0ae73 | Aliscans | 2022-01-10 10:11:47 -0600 fix: remove references to Hell from feat_is_branch_exit() Delete DNGN_ENTER_HELL, as the function returns false whether it's listed separately or not. Delete DNGN_EXIT_HELL and feat_is_hell_subbranch_exit(), and adjust the callers to accommodate this. This should not affect game behaviour. Also remove feat_is_hell_subbranch_exit() from is_feature_fudged(), as is_feature() now returns true for these and CMD_GO_UPSTAIRS. -------------------------------------------------------------------------------- a2056f7337 | Aliscans | 2022-01-10 10:11:47 -0600 fix: remove references to Hell from feat_is_branch_entrance() feat_is_hell_subbranch_exit() can simply be deleted, as the function returns false whether it's listed separately or not. The response to DNGN_ENTER_HELL changes from false to true, so change the functions which call it to accommodate this. The things which should behave differently are: - Hints mode now treats DNGN_ENTER_HELL as a branch entrance. - In lua (dlib), is_branch_entrance() now returns true for DNGN_ENTER_HELL. This isn't used in the Crawl source at present. -------------------------------------------------------------------------------- 2965a4dc42 | Aliscans | 2022-01-10 10:11:47 -0600 refactor: split DNGN_ENTER_HELL into one feature per destination Replace DNGN_ENTER_HELL with DNGN_EXIT_COCYTUS, DNGN_EXIT_DIS, DNGN_EXIT_GEHENNA or DNGN_EXIT_TARTARUS for gates leading out of those branches. This means that the descriptions for these are more appropriate, and makes it easier to change how one of them looks in a console build. [ Committer's note: Closes #2173. Tweaked descriptions and made these PORTAL_EXIT features. ] -------------------------------------------------------------------------------- b131497017 | Edgar A. Bering IV | 2022-01-10 09:31:43 -0600 fix: ensure Mennas never speaks across attitude changes Closes #2330 -------------------------------------------------------------------------------- a049f037fa | Edgar A. Bering IV | 2022-01-10 09:27:31 -0600 feat: some bound Donald dialog -------------------------------------------------------------------------------- c586ae71bd | Edgar A. Bering IV | 2022-01-10 08:29:55 -0600 fix: clarify shallow water's effect on large movement Closes #2345 -------------------------------------------------------------------------------- a5a8893891 | Edgar A. Bering IV | 2022-01-09 17:46:38 -0600 fix: a teleport closet in Nemelex: the Gamble Closes #2138. Closes #2126. -------------------------------------------------------------------------------- 47dfaac58e | DreamDust | 2022-01-09 17:23:04 -0600 fix: prevent breaking level connectivity (#2137) Closes #2039 Adds extra padding to nicolae_take_the_stairs -------------------------------------------------------------------------------- 108eccecdf | Aliscans | 2022-01-09 17:21:26 -0600 fix: use the standard names for monsters in "comes into view" messages. (#2132) Change the "comes into view" messages to use the names the game normally uses for each monster by preference, rather than a name based on the monster type. This particularly affects dancing weapons and ugly things. The game still uses different names (based on the "genus") when a lot of different monsters come into view at once. This should fix bug #0012649. Co-authored-by: Aliscans -------------------------------------------------------------------------------- 6c55d0bc0c | Edgar A. Bering IV | 2022-01-09 16:07:00 -0600 feat: display to hit chance for targeted drac breath weapons Closes #2165. This also resolves some internal todos around zap mappings for breath abilities. -------------------------------------------------------------------------------- c9894997ea | Kate | 2022-01-09 21:27:37 +0000 Adjust Kiku book gift logic Add Anguish as an option to the second book, move Agony from the second book to the first, and rework the logic for picking spells. The first book now guarantees Animate Skeleton, and then picks 3 spells at random from Pain, Corpse Rot, Sublimation of Blood, Vampiric Draining, and Agony. The second book guarantees Animate Dead, then picks 4 from Anguish, Dispel Undead, Borgnjor's Vile Clutch, Excruciating Wounds, Death Channel, and Simulacrum. This simplifies much of the logic while retaining the guarantee of a corpse-using spell in each book, and slightly increases the variation in spell choices for each book. -------------------------------------------------------------------------------- de96f65983 | Kate | 2022-01-09 21:27:37 +0000 Update options_guide defaults -------------------------------------------------------------------------------- 6bfe6b3ffa | Kate | 2022-01-09 21:27:25 +0000 Apply coding conventions -------------------------------------------------------------------------------- 6a3f3e4ae6 | Nicholas Feinberg | 2022-01-09 12:48:20 -0800 Fix a crash? -------------------------------------------------------------------------------- 7e5176108a | Nicholas Feinberg | 2022-01-09 11:48:21 -0800 Fix a name mispelling For years, I was very confident I knew how to spell Yred's name. For years, I was wrong! Oops. -------------------------------------------------------------------------------- 467f337aae | Nicholas Feinberg | 2022-01-09 11:34:41 -0800 New spell: Anguish (L4 Hex/Necro) With Yred's Injury Mirror ability removed, the design space of 'retalation damage' that it occupied has become open. Anguish puts a different spin on that idea, causing affected monsters to take twice the damage they deal for the duration of the affect. Assorted notes: - The theme is 'haunted by the damage you've done'. Horrible, supernatural visions of the wounds you've caused appearing on your own body, that kind of thing. - For flavour reasons, it doesn't work on mindless creatures, but it does work on intelligent demons and undead. - It's not a straight port of Injury Mirror as a player-based duration, largely because, without the piety cost of Injury Mirror, it'd suffer from the 'buff problem' of something you'd want to have online at all times. Probably there's some way to deal with that, but in general, Crawl spells work better as things you cast on enemies. - It's taken Corona's spot in the status effect icons, because Corona is now a somewhat uncommon effect on monsters (mostly just from Ru retaliation?) and not that important. We should strongly consider refactoring the status effects to not be packed into a single int, either by adding a second int (lol) or by using a list like sane people. We don't need to scrounge for a few dozen bytes per monster... it's 2022, for heaven's sake. - It's Hexes because it checks Will and I wanted to make a hex, and it's Necromancy for flavour (somewhat difficult to conceptualize as pure hexes) and to suggest fun synergy with undead allies. (Enemies hitting your zombies triggers anguish too, which is big thematic!) - I'm very unsure about balance. Lots of levers and knobs to pull, so let's try it out! -------------------------------------------------------------------------------- af83eef3db | Nicholas Feinberg | 2022-01-09 09:55:52 -0800 Remove support for Yred injury mirror Since it was removed in b4513a33dfc258858182bc1aa8ffa57d82efba1c . -------------------------------------------------------------------------------- aff854cc17 | Nicholas Feinberg | 2022-01-09 07:39:54 -0800 Give XP for frenzied monsters' deaths Frenzied monsters (from orbs of mayhem, Discord, or datura darts) gave no XP due to a detail of their implementation. In general, it's better for players to get XP for their kills (mostly for reasons of 'fun'), so let's fix that here. Balance issues are best handled through other mechanisms. -------------------------------------------------------------------------------- 82390b3a13 | Edgar A. Bering IV | 2022-01-08 11:31:44 -0600 fix: don't strip ashenzari abandoners naked (Aliscans) -------------------------------------------------------------------------------- 0490bf50c2 | Nicholas Feinberg | 2022-01-08 09:20:02 -0800 New hats (CanOfWorms) This code is very bad. -------------------------------------------------------------------------------- ec1d49878b | Nicholas Feinberg | 2022-01-08 08:34:59 -0800 Woodcutter/dreamshard tiles (Sastreii) Like a dream... keep trying, skeleton -------------------------------------------------------------------------------- 39c23d704c | Nicholas Feinberg | 2022-01-08 08:30:36 -0800 Update waypoint docs (Slacking) Don't claim that show_waypoints exists; it hasn't for quite some time. (Since f2373cbd01457d94902, 2016.) -------------------------------------------------------------------------------- 3e8e36ac5f | Edgar A. Bering IV | 2022-01-08 10:06:31 -0600 fix: nerf seracfall Reviewing tvs and play data, wendigo had big assists with shard shrikes (whose prevalence was turned down). Cocytus remained an outlier among the hells, with wendigo getting the lion's share of hell kills. So let's tone down seracfall damage a bit. -------------------------------------------------------------------------------- a82b073101 | Edgar A. Bering IV | 2022-01-08 09:43:47 -0600 fix: use abyss regeneration for wizard level regeneration Closes #2342 -------------------------------------------------------------------------------- f3d713df7a | Edgar A. Bering IV | 2022-01-07 14:43:57 -0600 refactor: give !xp power scaling -------------------------------------------------------------------------------- d764ef0d23 | Edgar A. Bering IV | 2022-01-07 14:43:57 -0600 feat: give an XP reward for the abyssal rune With the abyss now stripped of most rewards, let's give the rune a stronger incentive. It gives a potionlike effect for potions of XP equivalent to two potions of XP (due to how its implemented it gives slightly less skill XP than quaffing two !xp, but it's still a nice blob of skill XP and two XLs). -------------------------------------------------------------------------------- d21ca1c0ff | Kate | 2022-01-07 14:43:57 -0600 feat: make Abyss exits and staircases slightly more common With the changes to prevent scumming for XP or items in the Abyss, make exits slightly more common to try and make Abyss trips tend to be shorter (especially for characters that reach/are pulled to greater depths). -------------------------------------------------------------------------------- 6c1bee596d | Kate | 2022-01-07 14:43:57 -0600 feat: reduce wretched star malmutation rate Since it's no longer possible to work off temporary mutations while in the Abyss, make wretched stars only ever apply 1 bad mutation at a time with Corrupting Pulse, and reduce its casting weight so that it's more likely to be possible to deal with them without racking up a huge amount of bad mutations for the current Abyss trip. -------------------------------------------------------------------------------- 010f2a2272 | Kate | 2022-01-07 14:43:57 -0600 feat: don't grant piety in the Abyss Alongside XP gain and item generation, it also shouldn't be possible to gain piety in the Abyss, or to goldify corpses under Gozag. Uskayaw is an exception, since the piety isn't persistent, and likewise Yredelemnul still works normally. -------------------------------------------------------------------------------- 3b305989a8 | Edgar A. Bering IV | 2022-01-07 14:43:57 -0600 feat: increase abyss plunge rate The chance to fall deeper into the abyss is meant to increase the challenge, discourage scumming at high levels, and speed strong characters to the rune encounters. The chance is a bit low, this tunes it up. -------------------------------------------------------------------------------- 578a0bbfb4 | Edgar A. Bering IV | 2022-01-07 14:43:57 -0600 feat: remove abyss random item generation The second half of abyss scumming, collecting consumables on Abyss:1 and departing promptly on the first offered XP gate exit. Again, this has historically been regarded as not-worth-the-risk, but the shifting nature of the end game means that balance has changed. Vaults can still place items, but vaults are scary and sufficiently rare that this should be low enough percentage to be not a good idea to scum. -------------------------------------------------------------------------------- fcf540680d | Edgar A. Bering IV | 2022-01-07 14:43:57 -0600 feat: prevent gaining experience in the Abyss Abyss scumming has been present in the game for a long time, a lingering design wart where the running thinking is that the risks outweigh the benefits. With the changes to the Hells and Tomb this wisdom is a bit lackluster; indeed the strategic damage of the Hells can be countered by "working off" the stat and HP drain in the abyss. This commit locks out progress towards all XP-gated effects except the abyss progress timer. The player gets messaging to show Abyss monsters grant no rewards. -------------------------------------------------------------------------------- 19973ebb7a | Nicholas Feinberg | 2022-01-07 11:29:03 -0800 Fix some mutation comments -------------------------------------------------------------------------------- 79b0f14e7e | Nicholas Feinberg | 2022-01-07 11:27:09 -0800 Fix a mutation crash? -------------------------------------------------------------------------------- a4934feff6 | Kate | 2022-01-07 18:27:16 +0000 Remove the strength bonus from bite damage It was the only attack remaining with a special-cased stat bonus on top of the regular stat multipliers, and it was mostly an insignificant bonus. Increase base bite damage by 1 for bite attacks (which does include VS bite bite although this didn't previously benefit from the strength bonus), and give Dragon Form an effective extra 2 levels of fangs since this would be the main case where the strength bonus was actually noticeable. -------------------------------------------------------------------------------- ed6f2ea202 | Nicholas Feinberg | 2022-01-07 09:45:50 -0800 Remove a misleadingly named function undead_mutation_rot sounded like it would rot the player for trying to mutate. But it was just a thin alias over a bool check! -------------------------------------------------------------------------------- 8ce13c4dff | Nicholas Feinberg | 2022-01-07 09:43:38 -0800 Simplify delete_mutation() (gammafunk, Sauken) Replace a complex and hard-to-reason about loop with some classic unweighted reservoir sampling. -------------------------------------------------------------------------------- 082bef1587 | Nicholas Feinberg | 2022-01-07 08:02:30 -0800 Remove many diverse spells (dilly) RIP big spellbooks. -------------------------------------------------------------------------------- 7c84da036a | Nicholas Feinberg | 2022-01-06 18:33:56 -0800 Remove most angel sInv (Yermak) Largely redundant with haloes. Seraph keeps it as a 'boss', and profane servitor of course has an unhalo. -------------------------------------------------------------------------------- c19253909b | Nicholas Feinberg | 2022-01-06 18:17:08 -0800 Remove sInv from guardian mummies (kate) Plenty of other Tomb enemies still have it, and it's odd for guardian mummies to keep sInv while the 'higher threat' mummy priests don't. -------------------------------------------------------------------------------- 493c1fd462 | Nicholas Feinberg | 2022-01-06 18:09:36 -0800 Strip sInv from various enemies Now that Invisibility isn't a player-castable spell, we can dial back on monster sinv and prune it off some monsters. This cuts sInv from: - shrikes (both) - orc high priests, deep elf high priests, mummy priests, hierophants - water nymphs - ancient zymes, worldbinders, tentacled starspawn - jiangshi - shadow imp, chaos spawn, sun demon, ynoxinul - mlio minderbender, grinder, rupert Things that still have sInv: - spriggans, nagas, trolls and jellies - vault guards - "wizards" (some) - high-tier demons & all angels - some statues and some other stuff Plausible that more pruning is called for in future. -------------------------------------------------------------------------------- f95308ed99 | Kate | 2022-01-06 04:12:50 +0000 Add an ability targeter for Hepliaklqana Idealise -------------------------------------------------------------------------------- a4a8cb2b72 | Nicholas Feinberg | 2022-01-05 19:50:16 -0800 Remove the Tomb of Dorokhle Enormously complex, very weird (it'd turn into Blink in various cases?), and rather pointless. -------------------------------------------------------------------------------- 445fb3080f | Nicholas Feinberg | 2022-01-05 19:41:24 -0800 Add Enfeeble tile (Sastreii) -------------------------------------------------------------------------------- 32e282a20f | Kate | 2022-01-06 02:17:53 +0000 Simplify Jiyva tendril disarm chance To not check strength/dexterity - just use a straight monster HD check, and don't give "fighter" tagged monsters a bonus to their HD. -------------------------------------------------------------------------------- 0b286ecb3d | Kate | 2022-01-06 02:12:11 +0000 Fix retaliation dealing 0 damage with Confusing Touch active -------------------------------------------------------------------------------- 2894324c5e | Kate | 2022-01-06 02:12:11 +0000 Adjust Minotaur retialiation chance To be based on XL instead of stats, as with other incidental strength and dexterity checks. Now grants around a 25% chance to retaliate at XL1, and around a 50% chance at XL27, which is comparable to the previous chances for a Minotaur with average stats. -------------------------------------------------------------------------------- a8dd43b1d0 | Edgar A. Bering IV | 2022-01-05 11:34:09 -0600 tiles: radioactive spikes (Sastreii) -------------------------------------------------------------------------------- 7885d49575 | Edgar A. Bering IV | 2022-01-05 11:17:34 -0600 fix: account for orbs in invis_allowed (#12662) -------------------------------------------------------------------------------- 4df0f3684d | Edgar A. Bering IV | 2022-01-04 22:05:20 -0600 fix: spacing -------------------------------------------------------------------------------- ffcb275ae5 | Kate | 2022-01-05 02:18:06 +0000 Increase kite shield and tower shield encumbrance They were tuned a little low with the new formula. Tower shields now have similar penalties (for normal-sized species) to before the rework, and kite shields still have lower penalties until around 8 skill. -------------------------------------------------------------------------------- ee2755802b | Kate | 2022-01-05 01:41:15 +0000 Refactor aux attack accuracy Factor in some accuracy bonuses/penalties that previously weren't handled for aux attacks (palentonga roll/transformation/halo bonuses, and invisibility/umbra penalties), and don't make Confusing Touch affect aux attack accuracy or damage. -------------------------------------------------------------------------------- 4b82a7ed23 | Kate | 2022-01-05 01:41:15 +0000 Rework offhand punch checks Simplify the check for offhand punches and make them overall slightly more likely to trigger - don't make heavy armour reduce the chance of punching, and get rid of Octopodes' improved chance for offhand punches (they still the benefit of being able to punch with a shield/two-handed weapon). All species instead have a 5% chance to trigger an offhand punch that scales with unarmed combat skill to a 50% chance at max skill (compared to a a 33% chance previously at 20 UC or higher). -------------------------------------------------------------------------------- 3a1cdb9d31 | Kate | 2022-01-05 01:41:15 +0000 Base aux attack chance on XL instead of str+dex Aux attacks had a fairly obscure chance to trigger based on str+dex, followed by various other specific checks depending on the type of attack. Simplify by making the initial check depend only on XL, scaling from just over 50% at XL1, up to near 100% at XL27. -------------------------------------------------------------------------------- 7b68f1b707 | Kate | 2022-01-05 01:41:15 +0000 Rework shield penalties To remove the hard skill thresholds for shield skill training, rework shields to use a similar formula to armour encumbrance, with the penalties being fully removed at 27 skill. The new formula is: 2/5 * shield_penalty^2 / (20 - 3 * racial_factor) * (27 - shield_skill) / 27 where shield_penalty is 5 for bucklers, 9 for kite shields, and 13 for tower shields, and racial_factor is -2 for large species and formicids, 0 for medium species, 2 for kobolds, and 4 for spriggans. -------------------------------------------------------------------------------- d379f8d934 | Nicholas Feinberg | 2022-01-04 17:26:20 -0800 Remove an unused attack field -------------------------------------------------------------------------------- 2cf8304be8 | Kate | 2022-01-05 00:53:55 +0000 Fix halo descriptions on '@' Broken since 44cf67ff301, oops. -------------------------------------------------------------------------------- dcb3f3653b | Kate | 2022-01-04 17:59:36 +0000 Update the quickstart guide It's an ancient relic either way, but still! -------------------------------------------------------------------------------- 4f6bc678fa | Nicholas Feinberg | 2022-01-03 14:44:42 -0800 Remove to-hit penalties from armour & shields These were so small as to be unnoticeable in almost all plausible cases. There are already many interesting tradeoffs from wearing heavy armour & shields; we don't need to complicate things further. -------------------------------------------------------------------------------- c92c38d8fe | Nicholas Feinberg | 2022-01-03 14:02:34 -0800 Fix to-hit display of armour/shield penalties What a ridiculous bug! This has been broken for the last 1.5 years, since I added it in 5b8897f42da . Simply too many randoms... -------------------------------------------------------------------------------- bd29554cb1 | hellmonk | 2022-01-03 16:34:23 -0500 reduce meliai frequency in spider -------------------------------------------------------------------------------- b5fd6dc846 | Nicholas Feinberg | 2022-01-03 11:05:40 -0800 Don't allow omnireflecting vampiric draining (Grit) Your +3 warlock's mirror {reflect} reflects the Vampiric Draining! INVALID YOU_FAULTLESS draws life force from the deep elf death mage! Would be nice to fix this instead, though I'm not sure what the correct behaviour would be. Would need to poke at _vampiric_draining_effect for a bit. -------------------------------------------------------------------------------- cbb8a028cc | Nicholas Feinberg | 2022-01-03 11:00:05 -0800 Allow scorch recasts to refresh duration (Snakku) -------------------------------------------------------------------------------- fede4e8891 | Nicholas Feinberg | 2022-01-03 10:53:02 -0800 Remove old shaft immunity Obsoleted by the removal of multiple explore traps per branch (in 2ccdadd). -------------------------------------------------------------------------------- c726bef33b | Kate | 2022-01-02 19:24:15 +0000 Simplify Gozag gold distraction (hellmonk) Instead of using bernoulli trials and reducing the chance to gain stacks depending on the number of current stacks, make gold distraction a simple 3% chance per stack to distract, capped at 10 stacks, and with all valid kills increasing the stack count. -------------------------------------------------------------------------------- 3b246a18e6 | Kate | 2022-01-02 18:46:36 +0000 Reduce Ashenzari's skill boost (again) It was still very overtuned after the previous reductions (and is probably still pretty generous even after this change) - 4 boosts are now equivalent to the old fully bound boost. -------------------------------------------------------------------------------- 3a22ab9bdc | Nicholas Feinberg | 2022-01-01 14:31:22 -0800 Restore 0.26 acquirement frequency (perryprog) Looks like it got drastically boosted at some point. Not clear how. -------------------------------------------------------------------------------- 95c3d9ec3d | Kate | 2022-01-01 22:12:49 +0000 Let autofight target frenzied monsters (nicolae) -------------------------------------------------------------------------------- cb2c1687f3 | Nicholas Feinberg | 2022-01-01 13:57:53 -0800 Add some lovely puppies (Sastreii) New tiles for Pharaoh Ants, Jorogumos, and Broodmothers. -------------------------------------------------------------------------------- b830f16b3f | advil | 2022-01-01 14:24:28 -0500 feat: improve mouse handling for message pane input * Don't lose focus when clicking on random stuff. Before you could click on e.g. the dungeon and nothing would happen, except that the input would lose focus. * With tile_web_mouse_control, right click exits a prompt by sending esc. (This could also accept left click, maybe outside of the message pane, but in my testing this seemed too prone to misclicks.) * Smooth over trading focus with the chat pane -------------------------------------------------------------------------------- 7516f22de0 | advil | 2022-01-01 14:24:28 -0500 fix: add a missing Error instance in webtiles -------------------------------------------------------------------------------- 92835e5c71 | Kate | 2021-12-31 21:11:24 +0000 Add some newlines in ammo descriptions -------------------------------------------------------------------------------- 5f6e48996a | Kate | 2021-12-31 21:10:36 +0000 Make blindness, frenzy, antimagic and daze dispellable Partially going back on a previous commit (8836bdb7) - frenzy was made undispellable since various other dart effects were also undispellable, but this approach doesn't really work consistently, since most monster enchantments can be applied by multiple different sources (eg frenzy can be applied by Discord as well as orbs of mayhem and darts of datura) and it's unclear why effects like this wouldn't be considered dispellable. -------------------------------------------------------------------------------- dd239049a3 | Kate | 2021-12-31 20:21:56 +0000 Allow attacking frenzied monsters normally Unlike regular neutral monsters, they don't turn hostile when attacked, so there's no reason to have any restrictions on attacking them. -------------------------------------------------------------------------------- bf4c3871c4 | advil | 2021-12-31 14:29:09 -0500 fix: don't ignore game menu exit button Yet another fix of a fix -------------------------------------------------------------------------------- 9884ec658a | advil | 2021-12-31 14:24:25 -0500 refactor: consolidate help lookup to one UI This commit entirely removes the message pane UI for help lookup, replacing it with the menu-based version added in 4c3c5a04a9. Along the way I did a bunch of tweaking and testing of this menu; main secondary changes: * submenus have arrow key navigation enabled * exit menu is the last item, not the first * some error popups clarified and improved, fully works on webtiles * the key to open this popup from the game menu is now `/`, for consistency with `?/`. * use the search icon introduced in 4c3c5a04a9 across the board instead of the circled i icon. Some of these could be adjusted further if desired. -------------------------------------------------------------------------------- 39bde7bcfb | advil | 2021-12-31 12:23:09 -0500 fix: further fix game menu fallthrough behavior Generalize a75cb3825e and fix the save command. In local games, this was crashing at the main menu when used, with a segfault in UI code. (Possibly indicates a bug there? But it's safest just to exit the popup anyways.) -------------------------------------------------------------------------------- b870ddcdaf | advil | 2021-12-31 12:23:09 -0500 fix: use correct save and X wording in game menu That is, don't mention the "main menu" if the game is in a state where one won't be used. -------------------------------------------------------------------------------- 9cff2364a1 | gammafunk | 2021-12-31 01:47:45 -0600 feat: Nerf ghost moth melee a bit These currently hit for up to 76 damage. Compare to emperor scorpions, a top-tier melee-only threat, that do up to max 60 damage with the same monster speed of 12. The increased ghost moth damage was to allow af_drain_stat to apply more often, but it had the side effect of turning them into the HULK (which is hard to program). Nerf their (28, 28, 20) melee attacks down to (24, 18, 18) for now. Some play-testing shows them still able to drain stats in honorable single combat versus a shield-equipped HuFi possessing sInv. The stat drain I got while testing was fairly minor; typically a few points in a couple stats after one fight. If we'd like the drain to become more relevant, it may be best to increase the amount of stat drain applied per successful hit, since it's clear that the stat drain will still get applied with these nerfed numbers even against characters with strong defenses. -------------------------------------------------------------------------------- a75cb3825e | advil | 2021-12-30 22:04:12 -0500 fix: correct a fallthrough issue with e3a463e -------------------------------------------------------------------------------- 7577a969be | advil | 2021-12-30 21:57:59 -0500 fix: a few issues with the help lookup menu * Don't show an extra popup when escaping out of the text entry sub-popups. (Super ugly code, this stuff could use a refactor to not rely on `response` for a non-error condition.) * Do actually show the above popups in webtiles (before it didn't do anything but still needed the key input). This popup is a bit rare now it seems but can at least be triggered on a string consisting of spaces. * Remove some (I think) unnecessary UI_CRT things. -------------------------------------------------------------------------------- e3a463ef05 | advil | 2021-12-30 21:57:59 -0500 fix: submenu behavior for most main menu commands It was probably a strategic error to not do this initially, but I think having a submenu open is more what people would expect from a main menu command. I didn't do this for CMD_QUIT because it uses a message pane prompt. The lookup menu already did this. -------------------------------------------------------------------------------- 76a60e06d6 | Nicholas Feinberg | 2021-12-30 17:25:01 -0800 New placeholder Jorogumo tile -------------------------------------------------------------------------------- 69a50951d7 | Nicholas Feinberg | 2021-12-30 16:33:36 -0800 Fix tag_upgrade build -------------------------------------------------------------------------------- 0aadbb367f | Nicholas Feinberg | 2021-12-30 16:23:34 -0800 Improve frenzy UX - Allow targeting frenzied monsters with damage spells, etc normally. - Don't make good gods punish you for attacking frenzied monsters. -------------------------------------------------------------------------------- 33a2d3f881 | Nicholas Feinberg | 2021-12-30 16:06:16 -0800 Remove one last ray of sunshine TARG_HOSTILE_SUBMERGED, unused since 1d64b78cf4984becb95c8. -------------------------------------------------------------------------------- b64ed734f3 | Nicholas Feinberg | 2021-12-30 15:59:07 -0800 Correct a frenzy comment ENCH_FRENZY does not exist. -------------------------------------------------------------------------------- d371e1541e | Nicholas Feinberg | 2021-12-30 15:57:23 -0800 Merge strict neutral with good neutral (kate) They were almost identical. The only difference is that jellies will now show up with a brown background instead of grey & will be described as 'fellow slime' instead of 'indifferent', which seems fine! (Could have made them grey instead of brown, but it'd be misleading.) -------------------------------------------------------------------------------- 7e0445c96d | Nicholas Feinberg | 2021-12-30 10:38:27 -0800 Bring back Xom's dragons (kate) This partially reverts commit a0dfb7b2014fc097504f6b115edb92e612a79952. -------------------------------------------------------------------------------- a0dfb7b201 | Nicholas Feinberg | 2021-12-30 10:34:39 -0800 Remove non-player-castable Xom spells (pi-314) -------------------------------------------------------------------------------- e07096e7bc | Nicholas Feinberg | 2021-12-30 10:25:58 -0800 Fix channeled exegesis from ignorance (Nomi) Don't end channeled spells immediately when you exegesis them with no spells memorized. -------------------------------------------------------------------------------- 6040ee8864 | Nicholas Feinberg | 2021-12-30 10:10:57 -0800 Remove the orb Added accidentally. -------------------------------------------------------------------------------- b2e798e311 | Nicholas Feinberg | 2021-12-30 09:52:38 -0800 Improve orb of light description (🐙Mike) -------------------------------------------------------------------------------- 0273388e84 | Nicholas Feinberg | 2021-12-30 09:05:12 -0800 Add player orb tiles Feel the orb within your hand... feel its cold, smooth surface. The deadly temptation of its power. Who could stand against you if you bore such a device? Who could withstand the sorcery boiling within, seeking only a crack to escape and wreak boundless havoc? You would be a king. No... more. A god. -------------------------------------------------------------------------------- 7b639605f7 | Nicholas Feinberg | 2021-12-30 08:36:54 -0800 Fix Hep powers webtiles display (🐙Mike) -------------------------------------------------------------------------------- e1d817e1ef | Nicholas Feinberg | 2021-12-30 08:23:04 -0800 Fix allied radroach crash Instead of consistently crashing when an allied radroach decides whether or not it should cast irradiate, don't crash instead. Also, switch to using a tracer for irradiate cast logic instead of weirdly hand-replicating the same logic. -------------------------------------------------------------------------------- 2ac24fcec8 | Nicholas Feinberg | 2021-12-30 07:30:37 -0800 Remove un-ID'd angel weapon code I warned it'd never come up, and now it definitely won't! -------------------------------------------------------------------------------- 2ad6d04315 | Neil Moore | 2021-12-29 23:12:07 -0500 Handle correct name of Japanese language. Ever since the very first commit that introduced Japanese support (viz. 05c31b08e25), the lang option has accepted the ethnonym but not the name of the language . Leave as an alternative for compatibility. -------------------------------------------------------------------------------- cf31067fe6 | Kate | 2021-12-30 02:54:40 +0000 Mark some orbs as useless when appropriate -------------------------------------------------------------------------------- 62fc55f08d | Kate | 2021-12-30 02:29:00 +0000 Fix Summon Spider messaging (nicolae) -------------------------------------------------------------------------------- c3160e8207 | Nicholas Feinberg | 2021-12-29 16:45:36 -0800 Tweak channel status descriptions Semicolons are a dangerous vice, not to be overindulged. Also, it's *waves* of flame, not *a wave* :P -------------------------------------------------------------------------------- 1c5e12ca7f | Kate | 2021-12-30 00:01:36 +0000 Fix some descriptions (Ge0ff) -------------------------------------------------------------------------------- a5cd5cae6f | Kate | 2021-12-29 23:31:18 +0000 Rename Heavenly Storm's status light (PleasingFungus) To no longer overlap with Storm Form. -------------------------------------------------------------------------------- cbcab8c68d | Kate | 2021-12-29 22:55:36 +0000 Don't gender some non-unique enemies Water nymphs, harpies and jorogumos were always gendered female which was inconsistent with all other non-unique enemies. Closes #2317. -------------------------------------------------------------------------------- 9cd67a661c | Kate | 2021-12-29 22:55:36 +0000 Update some status light descriptions And the related spell descriptions for some forms. Currently Heavenly Storm and Storm Form overlap, and one of them needs their status light to be renamed. Closes #2321. -------------------------------------------------------------------------------- 050f3537b9 | advil | 2021-12-29 17:37:17 -0500 fix: restore rest behavior when > rest_wait_percent The => was accidentally introduced in 0bdd5ba03093. Resolves #2304 -------------------------------------------------------------------------------- 113dc556a4 | Kate | 2021-12-29 01:50:18 +0000 Remove unequip penalties from the robe of Misfortune It's no longer intended to be a strictly-bad unrand, with its design being that it grants substantial AC/EV but with the significant downsides of *Slow and *Corrode when damage is received, as well as having Harm. To encourage at least trying it on, remove the Contam and Drain on unequip - as body armour, it can't be quickly swapped so doesn't need an additional unequip penalty alongside the Harm. -------------------------------------------------------------------------------- c8854da52d | Kate | 2021-12-29 01:44:13 +0000 Simplify an orb check -------------------------------------------------------------------------------- fc495fb4ec | Nicholas Feinberg | 2021-12-28 17:26:06 -0800 Don't talk about orb AC (ShaperMC) Squash a pointless message in orb descriptions. -------------------------------------------------------------------------------- 6b9ff3a05d | Nicholas Feinberg | 2021-12-28 11:06:26 -0800 Refactor Irradiate, pt 1 (sdynet) Don't prompt when a monster would irradiate one of your allies, do pass the caster by reference rather than as a pointer, and various other fixes. -------------------------------------------------------------------------------- 18cc7973ba | Kate | 2021-12-28 18:11:32 +0000 Improve Makhleb destruction ability descriptions -------------------------------------------------------------------------------- 3d317c14f4 | Kate | 2021-12-28 18:11:32 +0000 Make Chei consider orbs of mayhem hasty -------------------------------------------------------------------------------- ba9079b354 | Edgar A. Bering IV | 2021-12-28 12:08:03 -0600 docs: changelog through 0.28-a0-1340-g77f64c2 -------------------------------------------------------------------------------- 77f64c2f64 | Edgar A. Bering IV | 2021-12-28 08:51:10 -0600 fix: prevent wearing an orb while wielding a 2-hander The reverse check already worked but this one was missed. Closes #2316 -------------------------------------------------------------------------------- a5422284a4 | Nicholas Feinberg | 2021-12-27 20:28:46 -0800 Fix orbs + SH (Lightli) Don't make orbs set your SH to 0 when you have other sources. -------------------------------------------------------------------------------- ce4b496cc8 | Nicholas Feinberg | 2021-12-27 18:44:10 -0800 Revert "Let good gods cause some mayhem (booper)" Neutral is a mess :( This reverts commit 83453ab7136c4dc63250dae6215468288a3404e4. This reverts commit 9a4740a79772870bd10ec86309d9a473f55b9590. -------------------------------------------------------------------------------- 83453ab713 | Nicholas Feinberg | 2021-12-27 18:38:02 -0800 Make neutrals considered less friendly In a few places. Maybe this is an improvement? Unsure. -------------------------------------------------------------------------------- 9a4740a797 | Nicholas Feinberg | 2021-12-27 18:37:40 -0800 Let good gods cause some mayhem (booper) Good gods don't like you attacking peaceful creatures, like ely's friendly neutral or kirke's humans' strict neutral (?), but it should be fine to attack frenzied 'true neutrals'? Maybe? This is too many neutrals... -------------------------------------------------------------------------------- ebfa916d04 | Nicholas Feinberg | 2021-12-27 18:22:21 -0800 Clarify mayhem (booper) -------------------------------------------------------------------------------- 1c9ffb4daf | Nicholas Feinberg | 2021-12-27 13:57:16 -0800 Fix a duration crash (skeral) Introduced by 95685b5d4a526e94ea562b9df2ea7fce36eb05bc . -------------------------------------------------------------------------------- 95685b5d4a | Nicholas Feinberg | 2021-12-27 12:52:58 -0800 Rename mid_msg -> expire_msg, etc (Pinkbeast) 5c2cb368445 (2015) continued the misleading naming used by _decrement_a_duration() in which effects for the 'expiration point' (an arbitrary # of turns before the end of a duration at which the player is warned that it's nearly done) were claimed to occur at the 'midpoint' (50% of the way through the duration.) Fix this. -------------------------------------------------------------------------------- 9cdbbaba87 | Nicholas Feinberg | 2021-12-27 12:44:16 -0800 Remove centaurs (Lici) Centaurs weren't meaningful threats in Shoals. They are a nice match for the vaguely Greek mythological theme, though, so swap in some centaur warriors instead. -------------------------------------------------------------------------------- a7867985be | Kate | 2021-12-27 20:16:58 +0000 Adjust some monster genuses -------------------------------------------------------------------------------- 586501026f | Kate | 2021-12-27 20:16:58 +0000 Remove some speech lines and a randbook name As with recent changes to Yred's theming, remove a few somewhat tasteless lines. -------------------------------------------------------------------------------- e4a90f2674 | Kate | 2021-12-27 20:16:58 +0000 Remove some obsolete book titles -------------------------------------------------------------------------------- 8ca4fe5f7a | Kate | 2021-12-27 20:16:58 +0000 Display drowning resistance in monster descriptions -------------------------------------------------------------------------------- 9e5b8c6e9f | Kate | 2021-12-27 20:16:58 +0000 Remove water vulnerability Only an extremely small number of monsters were vulnerable to water, it did very little (affecting only direct BEAM_WATER damage, but not granting any additional vulnerability to waterlogging or engulfing), and the player has minimal access to sources of water damage. -------------------------------------------------------------------------------- 8dc402e326 | Edgar A. Bering IV | 2021-12-27 14:13:17 -0600 REVERTME: increase orb rate for testing -------------------------------------------------------------------------------- 961f3f1587 | Edgar A. Bering IV | 2021-12-27 14:13:17 -0600 fix: remove a placeholder -------------------------------------------------------------------------------- 17eb628754 | Edgar A. Bering IV | 2021-12-27 14:13:17 -0600 feat: orbs of energy (bringing back the crystal ball) This commit adds a new "energy" orb ego that offers passive channeling, like Wucad Mu. The implementation is set to stack with Wucad Mu and any other potential source of energy (currently none) in the following ways: - The trigger chance is multiplied by the number of sources. - The all sources must backfire for the backfire effect to trigger. Wucad Mu's channeling was interesting, but compared to an enhancer staff or other unrands the effect underwhelemed many players. In addition to offering channeling with a shield, this commit buffs Wucad Mu by making it count as two sources of channeling for internal calculations. XXX: Unsure of the best way to communicate this to the player without turning our inscriptions into a line of dubious code, inscribing it *channel++ just doesn't sit right. -------------------------------------------------------------------------------- 92c09265f1 | Edgar A. Bering IV | 2021-12-27 14:13:17 -0600 feat: orbs of guile The guile ego is a will-check analog of harm: it reduces the willpower of any user's target by 3 * WL_PIP, in exchange for reducing the willpower of the user by 2 * WL_PIP. This is more interesting than a straight hex enhancer: the tradeoff is stiffer and it works with all willpower checks, not just hexes. -------------------------------------------------------------------------------- ecb9636ef5 | Edgar A. Bering IV | 2021-12-27 14:13:17 -0600 feat: orbs of mayhem (nicolae) The mayhem ego for orbs causes monsters who see the wielder kill something to go frenzy. It only hits one monster per kill with a coinflip for now. This could be adjusted up or down based on power, but we definitely don't want to give out free Discord casts for a single kill. -------------------------------------------------------------------------------- acce00ee20 | Edgar A. Bering IV | 2021-12-27 14:13:17 -0600 feat: orbs of wrath A *Rage orb, because *Rage is powerful, fun, and dangerous. This one is in the mix because why should spellcasters get all the orb fun. -------------------------------------------------------------------------------- 973e1c81fd | Edgar A. Bering IV | 2021-12-27 14:13:17 -0600 feat: orbs of light The first of several orb egos, an orb of light gives the player a radius 3 halo. Halo prevents invisibility and backlights the player (an extra defensive penalty) in exchange for revealing invisible creatures and an accuracy bonus. Alone the accuracy bonus isn't that big, but an ally user can get quite a bit of a boon from halo. This is probably the weakest of the orb egos, but that's ok. In general orb egos will represent some kind of a tradeoff, as they're egos that one can use in place of a shield without training. -------------------------------------------------------------------------------- e3aa5898da | Edgar A. Bering IV | 2021-12-27 14:13:17 -0600 feat: chill lofi orbs to ponder/crawl with A shield-slot analog of scarves, meant to play with the same sort of defense/interesting ego trade-off. Orbs give no SH and no penalty. "Caster" and some "battlemage" archetype characters are almost always steered to shields through a confluence of factors: - cheap one-handers (demon weapons and shortblades) that can be amplified with magic - one-handed enhancer staves leaving the other hand flapping around empty and begging for a shield - shield penalties are easier for low-strength characters to overcome Forthcoming commits will introduce orb egos (currently ponderous is a placeholder but will not be on the final list) aimed at expanding the options for these characters. Another direction to pursue in this design space is to create some 2-handers that tempt such characters, this is not an exclusive direction so both could happen, but for now orbs are what we've got. -------------------------------------------------------------------------------- 050272b745 | Edgar A. Bering IV | 2021-12-27 14:13:17 -0600 refactor: adjust some reflection checks Make actor.reflection() do what it says on the tin, and use the shield_reflects(item) method only for messaging, not for determining which actors are reflective. -------------------------------------------------------------------------------- 9e8018ba61 | Edgar A. Bering IV | 2021-12-27 14:13:17 -0600 fix: remove the limit on weapon and armour egos These were limited for seen item tracking to (subtly) influence acquire. Unlike seen basetypes, seen ego tracking makes a lot less sense, since seeing an ego on an unwanted base type tells us nothing about the player's preferences. This seemed cleaner than the save-compatibility needed to expand the bitfields because they're saved. -------------------------------------------------------------------------------- e154d51992 | Nicholas Feinberg | 2021-12-27 11:22:27 -0800 Revert "fix: remove a now unused MB check" This broke the bound soul icon. This reverts commit 53f92202ff9e202943409b577e6ad06e644bce8b. -------------------------------------------------------------------------------- f86f92d26c | advil | 2021-12-27 13:58:43 -0500 fix: bounds checks for monster lrd and ghostly sacrifice This removes the hardcoded checks from 73776a4c32c7 and 4f857bc58ec3. The reason for these crashes and for their variability was that the fake monster used for the validity check is at position 0,0. So if the game was saved on a level where a monster was in the upper left corner, the iterators used in these two spells would fire a tracer at the monster during game setup. The presence of a salt entrance in the save in #2308 was a red herring, it's just that this level had some monsters in the right place. It's probably still not ideal that the level even exists at the point where this validity check happens? Re-resolves #2308, should resolve #2281 (though I couldn't get an abyss crash to happen on demand). I also added a bit more info to the ASSERT that may make this easier to track down in the future. -------------------------------------------------------------------------------- 73776a4c32 | advil | 2021-12-27 13:19:26 -0500 fix: don't fire tracers for ghostly sac validity check This is a followup to 4f857bc58ec3, it seems that this ASSERT triggers only if a monster with the relevant spell is on the level where a player saved. (???) Resolves #2308 -------------------------------------------------------------------------------- bc27143018 | Nicholas Feinberg | 2021-12-27 07:16:34 -0800 Revert "Move the Mace of Variability to the early game" Various people have pointed out that, while the mace of variability used to be weak enough to be an early game item, it's now a compelling one for the later game. Mea culpa! This reverts commit fdf38ca10bdff2f4954046791e0ea06d90ea673a. -------------------------------------------------------------------------------- 71652a0310 | Nicholas Feinberg | 2021-12-26 19:49:55 -0800 Add a guarded Meek vault -------------------------------------------------------------------------------- 0e9cb7027e | Nicholas Feinberg | 2021-12-26 19:49:55 -0800 New early-game unrand: staff of the Meek Another early-game unrand, the staff of the Meek is a +7 quarterstaff of super-protection. When the player is below 55 HP, the staff of the Meek gives extra AC, scaling up to an additional +7 AC (for a total of +14) at 27 HP or below. I suspect it might be slightly overtuned. -------------------------------------------------------------------------------- be34dac4b3 | Nicholas Feinberg | 2021-12-26 19:49:55 -0800 Rename Danyla -> Delatra To avoid name conflicts with Slavic regions. -------------------------------------------------------------------------------- dce6b4fef7 | Nicholas Feinberg | 2021-12-26 19:49:55 -0800 Move the Robe of Augmentation to early-game (Lici) It's just not that strong. -------------------------------------------------------------------------------- 17cdd1422e | Nicholas Feinberg | 2021-12-26 19:49:52 -0800 New early-game unrand: Throatcutter Throatcutter is a +7 long sword of draining with a 33% chance to instakill struck foes that are below 21 hp. Monster HP tends to increase over the course of the game, so this is of course most relevant early on. It's a bit like extra AC-ignoring damage, but it only works when enemies are at low HP to begin with. Terence gets a Maggie-esque 1% chance to spawn with this. -------------------------------------------------------------------------------- a2d17535fb | Nicholas Feinberg | 2021-12-26 19:49:52 -0800 Move the Trident of the Octopus King early It's too weak to be good later, unless its gimmick goes off, which it won't. (FR: new/tweaked gimmick!) Also remove its Will+ as superfluous. (rElec and rPois are both vaguely thematic.) -------------------------------------------------------------------------------- fdf38ca10b | Nicholas Feinberg | 2021-12-26 19:49:52 -0800 Move the Mace of Variability to the early game It's often a trap to use the mace of variability later on, and there are plenty of fun later-game unrands for m&f users to use. Let's switch this back to a simple mace (from a great mace), buff its ench (mimicking klown clubs), and put it in the early-game weapon set. -------------------------------------------------------------------------------- f4a11d3a62 | Nicholas Feinberg | 2021-12-26 19:49:52 -0800 Move Lear's to the early-game Lear's tradeoff - blocking aux slots in exchange for a big flat AC bonus - makes more sense in the early game, when players have access to few items to fill those aux slots. Later on, it just means players get to play around less with the loot game, which isn't that exciting. Its focus on enchantment over base AC is also stronger early, when players have little Armour skill. So, move Lear's into the early-game unrand category (making it more likely to spawn early & less likely later), and cut its enchantment from +27 to +18. -------------------------------------------------------------------------------- 2cb09928ac | Nicholas Feinberg | 2021-12-26 19:49:52 -0800 Shift more unrands to be early-game Morg, Devastator, the Ratskin Cloak, and Kryia's mail. - Kryia's mail potion healing buff is more relevant earlyish, when potion healing is more relevant and competing armour options are worse. - Ratskin cloak's summons don't scale; makes sense for it to show up earlier. - Devastator as a mini-shatter is a fun earlier-game effect. - Morg is just too weak for later. At some point I do want it to have a better gimmick, though - perhaps some way to trigger a 'sublimation of blood'-type HP for MP trade? Or, perhaps, a twist on pain brand that's works better in the early game. -------------------------------------------------------------------------------- dd19a0eca0 | Nicholas Feinberg | 2021-12-26 19:49:52 -0800 Fix danyla ftiles (nicolae) -------------------------------------------------------------------------------- 4d69e0ec34 | Nicholas Feinberg | 2021-12-26 19:49:52 -0800 Refactor early-game unrand weights -------------------------------------------------------------------------------- 2b8dd8ea68 | Nicholas Feinberg | 2021-12-26 19:49:52 -0800 Force woodcutter's axe to speed 10 (hellmonk) Regardless of being slowed, shield delay, etc, etc. -------------------------------------------------------------------------------- 07e9fc738c | Nicholas Feinberg | 2021-12-26 19:49:52 -0800 Add a fireplace -------------------------------------------------------------------------------- 88828878fe | Nicholas Feinberg | 2021-12-26 19:49:52 -0800 Add a guarded unrand woodcutter's axe vault -------------------------------------------------------------------------------- fcf6033174 | Nicholas Feinberg | 2021-12-26 19:49:52 -0800 New unrand: woodcutter's axe Another early-game unrand, the woodcutter's axe swings at a fixed 10 aut, regardless of skill. As a +8 vorpal war axe that can never hit a normal war axe's mindelay, it should become obsolete by midgame, but quite powerful earlier. -------------------------------------------------------------------------------- a9f048274c | Nicholas Feinberg | 2021-12-26 19:49:52 -0800 Add a guarded unrand vault for Danyla's -------------------------------------------------------------------------------- 7890d4bb03 | Nicholas Feinberg | 2021-12-26 19:49:52 -0800 Make Danyla's less likely later Since Danyla's are intended to be interesting in the early game, give them a 10x weight at early depths (D:6 and earlier, I think) and 0.1x weight at later depths. -------------------------------------------------------------------------------- f9a06f655c | Nicholas Feinberg | 2021-12-26 19:49:52 -0800 New unrand: Danyla's gloves Continuing the 0.28 trend of new unrands, Danyla's gloves play in the space of 'unrands for the early game'. The wearer is healed by drinking unknown potions, and their MP is restored by reading unknown scrolls. Is it wise to intentionally keep consumables unknown so that you can use them as ersatz !hw and !magic? Maybe?? I considered also giving some bonus for reading ?id or some alternate way to use up ?id with these gloves, but that seemed to go against the design premise. Also, to be a bit too complicated. More related changes to come in subsequent commits. -------------------------------------------------------------------------------- 1f8817ceea | Nicholas Feinberg | 2021-12-26 19:49:52 -0800 Allow artefacts to spawn on D:2-3 To increase variety, and to allow early-game unrands to work, lift the ban on artefact generation in D:2-3. To discourage startscumming, D:1 artefacts are still banned. -------------------------------------------------------------------------------- 54527cc1f4 | Nicholas Feinberg | 2021-12-26 19:49:52 -0800 Explain no_upgrade -------------------------------------------------------------------------------- b4563b27b3 | Nicholas Feinberg | 2021-12-26 14:51:13 -0800 Remove zombie deep dwarf damage shaving Monster deep dwarf zombies had damage shaving, probably left over from when actual deep dwarf enemies existed. Let's clean that up. -------------------------------------------------------------------------------- 91df5548d3 | Nicholas Feinberg | 2021-12-26 08:17:46 -0800 Pass item_level into make_item_unrand This is mostly intended for future changes. -------------------------------------------------------------------------------- 77e77742e6 | Nicholas Feinberg | 2021-12-26 08:14:29 -0800 Fix unrands being able to reappear in the Abyss This was broken in 850bfe61e39, a year and a half ago. Probably no one noticed because it's almost impossible to encounter this case to begin with. -------------------------------------------------------------------------------- 8a08cb6da8 | Nicholas Feinberg | 2021-12-26 08:13:51 -0800 Minor artefact refactoring -------------------------------------------------------------------------------- 700d31dd17 | Kate | 2021-12-26 15:35:15 +0000 Add some new wizards as potential spellbook owners -------------------------------------------------------------------------------- 73c4ac0421 | Kate | 2021-12-26 15:35:15 +0000 Give Portal Projectile a static targeter -------------------------------------------------------------------------------- 6bde065e89 | hellmonk | 2021-12-25 21:40:59 -0500 minor revisions to vampire castle -------------------------------------------------------------------------------- 01e59b5888 | hellmonk | 2021-12-25 21:40:59 -0500 delete boomers Reduce the number of boomerangs generated in bailey maps and entries. -------------------------------------------------------------------------------- 507d92f863 | hellmonk | 2021-12-25 21:40:59 -0500 various bailey fixes -------------------------------------------------------------------------------- 69d4bd79ad | hellmonk | 2021-12-25 21:40:59 -0500 remove bailey_polearm_4 This map was very small and also very bad. -------------------------------------------------------------------------------- 65a5005c76 | hellmonk | 2021-12-25 21:40:59 -0500 adjust bailey_polearm_2 Make the outer area less annoying and shrink the border. Slightly randomize monster counts and placements. Adjust loot. Also, fix bailey_polearm_1. -------------------------------------------------------------------------------- 514828de85 | hellmonk | 2021-12-25 21:40:59 -0500 Adjust bailey_polearm_1 Make the moat shallow. Give routes for monsters in the center to escape the lava (makes the vault less annoying and less cheeseable). Adjust the good item selection slightly. -------------------------------------------------------------------------------- c62d020828 | hellmonk | 2021-12-25 21:40:59 -0500 enchanted keep bailey Spriggans and ogres, plus one small dragon. -------------------------------------------------------------------------------- b6a7f6400c | hellmonk | 2021-12-25 21:40:59 -0500 checkwhite -------------------------------------------------------------------------------- 1f28f93398 | hellmonk | 2021-12-25 21:40:59 -0500 Prince Ribbit bailey Feat: frogs, vault guards. -------------------------------------------------------------------------------- eca784f0a1 | hellmonk | 2021-12-25 21:40:59 -0500 checkwhite -------------------------------------------------------------------------------- 1e23faca81 | hellmonk | 2021-12-25 21:40:59 -0500 remove bailey_axe_1 This was the other kobold boomerang behind water map, and it was very bad. -------------------------------------------------------------------------------- bafb9c2f4c | hellmonk | 2021-12-25 21:40:59 -0500 Rework bailey_axe_3 This was formerly one of two 'boomerang kobolds behind deep water' baileys. Now it is a kobold brigand bailey; they replace a few of the regular kobolds (which are no longer behind deep water) and the other weak enemies. Loot has been updated to include a few stacks of specialty darts. -------------------------------------------------------------------------------- fb8d33413f | hellmonk | 2021-12-25 21:40:59 -0500 vampire castle bailey Features 1-3 vampires with big polearms, a gargoyle, and some orcs. -------------------------------------------------------------------------------- c7d099ddaa | hellmonk | 2021-12-25 21:40:59 -0500 checkwhite -------------------------------------------------------------------------------- d8f7bb276c | hellmonk | 2021-12-25 21:40:59 -0500 restructure bailey_axe_of_yendor_kennysheep Rearrange the layout so that the hard monsters appear later in the map. Also, randomize monster counts. -------------------------------------------------------------------------------- a913e2b07b | hellmonk | 2021-12-25 21:40:59 -0500 adjust bailey_axe_bossmonster_kennysheep Randomize monster counts. Remove deep water to prevent kobold annoyance and trivial drowning strats. Reduce loot slightly (early portal maps should generally not place multiple stacks of !exp, I do not care how hard killing the warlord is). -------------------------------------------------------------------------------- 39464d8d1f | hellmonk | 2021-12-25 21:40:59 -0500 adjust bailey_polearm_5 Reduce and randomize monster counts. Add terrain. Tag the summoning scrolls no_pickup. Reduce loot slightly. -------------------------------------------------------------------------------- 673e66e2bb | hellmonk | 2021-12-25 21:40:59 -0500 new elf bailey Places a single pyromancer or zephyrmancer, who is held hostage by the typical bailey polearm orcs. Armour, potion, and gold loot. -------------------------------------------------------------------------------- 0c74f66fb6 | hellmonk | 2021-12-25 21:40:59 -0500 adjust bailey_polearm_gnolls_kennysheep Randomize monster count slightly. Add wolves and a chance for Grum. Buff loot. -------------------------------------------------------------------------------- c07eaa88f9 | hellmonk | 2021-12-25 21:40:59 -0500 adjust bailey_polearm_flooded_kennysheep Push the centaurs out of the entrance's line of sight. Adjust and randomize monster counts. Slightly adjust loot. -------------------------------------------------------------------------------- a63312ec20 | hellmonk | 2021-12-25 21:40:59 -0500 adjust bailey_axe_minmay_hex_keep Place less popcorn. Space out and randomize "hard" monster locations. Reduce loot from 2 exp/acq to 1. Still places a warlord. -------------------------------------------------------------------------------- 3b12c07c51 | hellmonk | 2021-12-25 21:40:59 -0500 adjust bailey_axe_4 Give the player a path across the moat without flight. Move the flight items into the vault proper. Randomize monster placement. -------------------------------------------------------------------------------- bd0c3d1049 | hellmonk | 2021-12-25 21:40:59 -0500 adjust bailey_axe_2 Add draining to formerly mundane halberds, let orc warrior get in on the elec action, and nerf the loot (this map is too easy to place guaranteed acq/exp). -------------------------------------------------------------------------------- 46454fb2af | hellmonk | 2021-12-25 21:40:59 -0500 Cut bailey spawn depth Bailey portals spawned between D:7-14 and in Orc:1. While at first glance this looks like a small portion of the game, players get massively stronger over those floors. D:7 characters might still be working on their starting kit, whereas a character on D:14 or in Orc is likely well established and has probably cleared Lair. The monsters in many existing Bailey vaults are similar to Orc spawns as well, so they tend to be threatening in the early part of the Bailey spawn range but mundane in the later part. Thus, Bailey will now spawn between D:7-10 and the chance per floor is doubled to keep the overall likelihood of seeing a bailey roughly the same. -------------------------------------------------------------------------------- fc91cddb57 | Kate | 2021-12-26 02:30:05 +0000 Simplify a zap -------------------------------------------------------------------------------- ff14099be7 | Kate | 2021-12-26 02:30:00 +0000 Store spellpower on cast for ongoing spells Make Borgnjor's Vile Clutch, Searing Ray, Olgreb's Toxic Radiance, Flame Wave, Searing Ray, Frozen Ramparts, and Dragon's Call all check spellpower only once on cast, instead of continuously throughout the duration. Also includes some minor cleanup for other spells that unnecessarily rechecked power. As noted in 9c71ebef145, this fixes their interactions with Sif's Divine Exegesis, and for Searing Ray and Flame Wave it has no other meaningful effect (since it's not possible to swap gear while channeling). For the other spells, it does become possible to cast them with an enhancer and switch to another item, but this is no different to the majority of other spells with an ongoing component (such as transmutations, hexes, and summons) where all that matters is the power at time of cast. -------------------------------------------------------------------------------- c629bbe4ae | Edgar A. Bering IV | 2021-12-25 17:14:01 -0600 fix: remove a diacritic Since we still officially support pure ascii interface, changing the monster name to "jorōgumo" in mon-data.h is a non-starter. To get the description to appear the diacritic must also be missing in the database. -------------------------------------------------------------------------------- 52c95e12a3 | hellmonk | 2021-12-25 16:49:40 -0600 refactor: rename a monster spellbook Since it's now in use by multiple enemies. -------------------------------------------------------------------------------- be32123071 | hellmonk | 2021-12-25 16:49:40 -0600 force Spider generation for testing -------------------------------------------------------------------------------- 4f13a64121 | hellmonk | 2021-12-25 16:49:40 -0600 feat: adjust and refactor monster web immunity Use a monster flag. -------------------------------------------------------------------------------- b4f9141d82 | hellmonk | 2021-12-25 16:49:35 -0600 feat: update spider bands -------------------------------------------------------------------------------- 4dffdd49c8 | hellmonk | 2021-12-25 16:49:01 -0600 feat: revise spider spawn table Incorporate the new spider monsters introducded in previous commits, enable ood usage. -------------------------------------------------------------------------------- db8c699bc0 | Edgar A. Bering IV | 2021-12-25 16:49:01 -0600 feat: adjust existing spider monster numbers -------------------------------------------------------------------------------- dabb86c9ba | hellmonk | 2021-12-25 16:49:01 -0600 feat: radroaches They cast irradiate. Currently contams the player a lot rather than mutating them outright; not totally opposed to changing it though. -------------------------------------------------------------------------------- f555730fcc | hellmonk | 2021-12-25 16:49:01 -0600 feat: adjust some spider layouts Allow another cavelike layout, change a few parameters in delve. -------------------------------------------------------------------------------- 8ac70cea53 | hellmonk | 2021-12-25 16:49:01 -0600 feat: sun moths Holy moths with a single tile halo, sticky flame, and energy bolt. -------------------------------------------------------------------------------- 43fd8d3cd6 | hellmonk | 2021-12-25 16:49:01 -0600 feat: adjust ghost moths Take away their poison sting and make them much better at draining stats. -------------------------------------------------------------------------------- 73a05ced62 | hellmonk | 2021-12-25 16:49:01 -0600 feat: adjust emperor scorpions Reduce their defenses and damage in exchange for speed 12. -------------------------------------------------------------------------------- b1d9b9a04c | hellmonk | 2021-12-25 16:49:01 -0600 feat: culicivora Low end spider for packs; heal other + vamp bite -------------------------------------------------------------------------------- cdf09cc80e | hellmonk | 2021-12-25 16:47:59 -0600 feat: broodmothers High end spider enemies that summon spiders and bite to summon spiders. -------------------------------------------------------------------------------- b91c745bbe | hellmonk | 2021-12-25 16:47:59 -0600 feat: Jorogumo High end spider nasties that cast ensnare and bolt of draining, plus melee for hornet poison. -------------------------------------------------------------------------------- 5bc7cbe778 | hellmonk | 2021-12-25 16:47:59 -0600 feat: steelbarb worms They inflict barbs status in melee, have regen and rF, and are fast. -------------------------------------------------------------------------------- de0d139c19 | hellmonk | 2021-12-25 16:47:59 -0600 feat: buff orb spiders Increase cast rate, hd, and melee damage -------------------------------------------------------------------------------- da204c4458 | hellmonk | 2021-12-25 16:47:59 -0600 feat: Pharaoh Ants A new undead spider monster that hits moderately hard for AF_DRAIN and binds the souls of all nearby monsters on death. -------------------------------------------------------------------------------- 2a955c5cc2 | hellmonk | 2021-12-25 15:22:40 -0600 feat: rework demonic crawlers Give them warning cry so they can alert their spider friends. -------------------------------------------------------------------------------- f280a0fbb2 | Kate | 2021-12-25 17:16:50 +0000 Make Formicid digging drain max health The ability to dig outside of combat with no limit or meaningful cost has been known to be a problem ever since Dig existed as a spell, and it encourages a variety of undesirable behaviours. Formicids have been a problem in this regard for a while (and even when the ability had a food cost, this didn't appropriately limit its use). To make digging have a noticeable cost, make it drain the user for each tile dug, to make extensive out-of-combat digging hopefully much more dangerous. To simplify the ability and make it slightly more useful as an in-combat escape, also remove its movement speed penalty. -------------------------------------------------------------------------------- 32bd0c41fe | Kate | 2021-12-25 17:03:33 +0000 Update some speech lines Remove various outdated speech lines, adjust a few others, and give Crazy Yiuf some new words. -------------------------------------------------------------------------------- 986220338f | Nicholas Feinberg | 2021-12-25 15:31:26 +0000 Code tweaks Constify some variables, switch from a pointer to a reference, and make some mon-info code shorter (this bit is dubious). -------------------------------------------------------------------------------- 2f14e528d3 | Kate | 2021-12-25 15:31:26 +0000 Make enchantment power use a smooth stepdown Should result in minimal changes to enchantment power in practice, but removes a use of the (supposedly) deprecated stepdown_value function, and also removes the cap of 120 on enchantment power, allowing spells with high power caps and a power boost (such as Agony and Enfeeble) to continue improving their success rate at very high skill levels. -------------------------------------------------------------------------------- 0dbd67afb6 | Kate | 2021-12-25 15:31:26 +0000 Add a new L7 Hex: Enfeeble Intended to give Hexes some more interesting utility to fill the gap between the powerful early stabbing spells and Discord at level 8, Enfeeble is a beam-targeted hex which irresistibly applies weakness and antimagic to a single foe (even against infinite willpower). The target is also dazed and blinded if they fail a willpower check (with a fairly substantial power bonus). -------------------------------------------------------------------------------- b25a51b929 | hellmonk | 2021-12-24 21:43:23 -0500 nerf Tukima's Studio This wizlab has like 3x the kill rate of the next most dangerous one. -------------------------------------------------------------------------------- 7c8fac35f0 | hellmonk3 | 2021-12-23 21:28:31 -0500 feat: Install some new plumbing Update old sewer maps to use best vaultmaking practices (randomized monster counts and placements, minimal hidden areas/spoilers). Reduce loot quality or quantity in most maps - this was buffed significantly when potion/scroll types got despoilered, so needs to come down somewhat. Additionally, add two exciting new sewer maps and re-weight all maps so that formerly rare ones are somewhat more common. -------------------------------------------------------------------------------- 826d19b2e0 | hellmonk3 | 2021-12-22 22:41:54 -0500 Add some assorted vaults feat. 1 (one) funny shop, 1 (one) funny transporter, and a few other things -------------------------------------------------------------------------------- 92def6ad0a | advil | 2021-12-22 17:47:50 -0500 build: add wtutil.py to the flake8 exclude list This is such a useless linter -------------------------------------------------------------------------------- a21510a5d8 | advil | 2021-12-22 17:29:43 -0500 feat: CLI interface for the dgl ban flag This can maybe be done already using the dgamelaunch-config tools, but it's useful to just have a simple interface built directly into the wlutil.py script. Resolves #1034 (together with the ^^ commit) -------------------------------------------------------------------------------- 45a336b667 | advil | 2021-12-22 15:21:08 -0500 feat: split off some webtiles cli stuff to a separate file This moves the commands for setting and resetting password tokens to a separate utility. (The underlying code is still part of webtiles.server, though, since all the setup stuff is there.) -------------------------------------------------------------------------------- 428f677eea | floraline | 2021-12-22 14:56:20 -0500 fix whitespace -------------------------------------------------------------------------------- 82aefee779 | floraline | 2021-12-22 14:56:20 -0500 Disallow user login when account has been banned DGL already supports banning user accounts via the user flags. Webtiles will now check this flag when testing password on user login. If the account is disabled, webtiles will not allow the user to log in. A message will be returned indicating that the account is disabled. -------------------------------------------------------------------------------- 270c432c18 | advil | 2021-12-22 14:54:57 -0500 fix: Restore #! line for server.py This got cut in 9b1d5c9715351a9bef3c. I'm not sure this should be an env call though? For the moment, keeping it unchanged. -------------------------------------------------------------------------------- a9037bb4c8 | advil | 2021-12-21 10:36:05 -0500 fix: fix some config defaults code * correctly check the bind options * fix handling of invalid recursive key checks -------------------------------------------------------------------------------- 59251e613b | advil | 2021-12-21 09:36:32 -0500 docs: update README.md, comments in config.py -------------------------------------------------------------------------------- 47ca6f2f2d | advil | 2021-12-21 09:36:32 -0500 fix: temporarily revert changes to client.html template This one gets me every time: templates update immediately even if the server hasn't yet restarted. So a pre-refactor server trying to load this template generates a 500 error because it doesn't have the new config API. This commit adds a shim that will work until servers have all restarted, and then it can be reverted. -------------------------------------------------------------------------------- 473480021d | advil | 2021-12-21 09:36:32 -0500 fix: correct a wrong config name -------------------------------------------------------------------------------- fb42bd042d | advil | 2021-12-21 09:36:32 -0500 fix: don't double webtiles --live-debug logging A logging call before `init_logging` results in doubled output, just push this check later. -------------------------------------------------------------------------------- 9b1d5c9715 | advil | 2021-12-21 09:36:32 -0500 refactor: move main server code into the webtiles package This was the last remaining chunk of webtiles code that was not inside the `webtiles` namespace. This commit moves it into a proper module, leaving the original non-package `server.py` as just a light wrapper on this module. -------------------------------------------------------------------------------- 65b1a8c667 | advil | 2021-12-21 09:36:32 -0500 refactor: move server.py This change apparently needs to happen in two steps so that the move is properly tracked in git history. -------------------------------------------------------------------------------- e20dd551ba | advil | 2021-12-21 09:36:32 -0500 docs: update placeholder README I originally put this file here just as a test of how DGL setups would handle subdirectories, but now that it has served its purpose, why not do something with it. This overview is pretty brief and high level, but as far as I know this kind of overview doesn't really exist anywhere else. -------------------------------------------------------------------------------- 2872ec6120 | advil | 2021-12-21 09:36:32 -0500 fix: acclimitize auth_test to `webtiles` * use package-anchored module names for mock * remove an unneeded mock for config -------------------------------------------------------------------------------- b939be1479 | advil | 2021-12-21 09:36:32 -0500 refactor: regularize the internal config api This wraps the server config module that is used as the repository for config info as if it were a dict-like. This would enable eventually just subbing in a dict (e.g. from yaml). In the short term it also makes the module have better behavior when no server config is provided. -------------------------------------------------------------------------------- c07941e8bc | advil | 2021-12-21 09:36:32 -0500 refactor: move webtiles defaults into webtiles.config Before there were occasional default values scattered around the code in get/getattr calls, in combination with things that are de facto defaults because no one has ever changed them. This collects the defaults in one place. I've aimed to leave uncommented in config.py only things one should or might want to change. -------------------------------------------------------------------------------- 0364767e1c | advil | 2021-12-21 09:36:32 -0500 fix: fix imports in tests This won't fully fix CI I think, because one of these tests needs config info that is now separated from the package; I'll fix that later. -------------------------------------------------------------------------------- 6b151ea7cb | advil | 2021-12-21 09:36:32 -0500 refactor: restructure webtiles into a package Previously, webtiles was just a loose collection of modules in the same directory. This restructures things so that everything but server.py and config.py form a proper python package. This has three main goals: 1. make the webtiles server code more encapsulated, and cleaner to load and interact with. This commit (to some degree) regularizes a lot of import statements. 2. short term: make it easier to dissociate config logic from config content. The `config.py` file in `webserver` is the same as before -- a python module with config settings for the webserver. The webtiles.config module on the other hand provides an api for getting config info that is abstracted from the python module that provides it. This can help clean up the handling of defaults, and pave the way for turning most of the old config.py into something like yaml, while retaining backwards compatibility. This could all have been done with a distinctly-named module in the same directory, but I think it is just a lot conceptually cleaner to do it in combination with 1. 3. long term: make it easier to swap out parts of the server code en masse by changing around package loading. This is aiming at a compatibility-preserving way of merging the dormant `webtiles-asyncio` branch. *Possibly* make it possible to version the webtiles server itself. This is a big change, and I've done only light testing so far, but in a local setup at least, everything is working. It may be that this commit will require a dgl change to merge (I'm not sure if subdirectories will be copied by default). -------------------------------------------------------------------------------- 76c8c3f4a7 | advil | 2021-12-21 09:36:32 -0500 fix: remove remaining import *s -------------------------------------------------------------------------------- 0243856f03 | Kate | 2021-12-21 01:29:26 +0000 Document mons_has_attacks behaviour Weird monsters with special zero-damage attacks like fire elementals and drowned souls are considered as having no attacks here which is very weird, but probably technically correct in the context of considering whether they should be able to be weakened or go berserk, so add a comment explaining it. -------------------------------------------------------------------------------- c6b4282bc0 | Edgar A. Bering IV | 2021-12-20 22:53:56 +0200 refactor: move Cantrip messaging to the monspell DB Instead of hard-coded strings plus some custom speech DB strings that got strange less-than-fully-featured handling. -------------------------------------------------------------------------------- 6bb796e56f | Edgar A. Bering IV | 2021-12-20 22:05:15 +0200 feat: leave Dissolution's prayers unanswered if Jiyva dies (11741) Dissolution is an incredibly devout follower of Jiyva, but not so devout to keep Jiyva alive alone without the Royal Jelly or the player as well. So, when Jiyva dies, this commit replaces Dissolution's eyeball summon with a cantrip and adds some custom casting messages for tragic flavour. [ Closes #2136 ] -------------------------------------------------------------------------------- a0fd31170c | Edgar A. Bering IV | 2021-12-20 20:39:51 +0200 fix: don't treat tentacles as separate monsters for yred (mdonais) This fixes both a funny piety bug and a serious crash-on-demand coming from kraken. -------------------------------------------------------------------------------- 948942c869 | Kate | 2021-12-20 18:15:36 +0000 Disable targeter for the staff of Battle's battlesphere (#2300) Closes #2300. -------------------------------------------------------------------------------- 2034e2a03a | Kate | 2021-12-20 18:00:33 +0000 Fix a Djinn mutation description -------------------------------------------------------------------------------- 75d13f451a | Kate | 2021-12-20 18:00:33 +0000 Improve wording of nimble swimmer mutation (#2295) Closes #2295. -------------------------------------------------------------------------------- 193881aaa2 | Nicholas Feinberg | 2021-12-19 17:12:51 -0800 Tweak Bind Soul description (🐙Mike) Move the important part (gotta kill the target before the mark expires!) before a bunch of fine print, and make other small tweaks, such as removing an overlooked 'enslave'. -------------------------------------------------------------------------------- e70e11bbaa | Nicholas Feinberg | 2021-12-19 16:36:57 -0800 Tweak Yred power description (🐙Mike) Try to clarify re raising the dead, etc. -------------------------------------------------------------------------------- c10b29e619 | Kate | 2021-12-19 23:39:51 +0000 Adjust Black Mark to only apply useful effects Instead of just randomly rolling for weakness, antimagic or draining when the mutation triggers, only select an effect that the defender is susceptible to. -------------------------------------------------------------------------------- bdd4f303c2 | Kate | 2021-12-19 23:39:51 +0000 Show when monsters are affected by antimagic Instead of having it be a hidden status effect, display it as a regular enchantment and give a message when it expires. -------------------------------------------------------------------------------- 1e6f1b2279 | advil | 2021-12-19 10:20:57 -0500 lint -------------------------------------------------------------------------------- ac32c9ce6f | advil | 2021-12-19 10:02:04 -0500 fix: make some prop types explicit Seems to be breaking the build on some compilers. -------------------------------------------------------------------------------- d731693074 | advil | 2021-12-19 09:43:41 -0500 feat: (g)o to location in item descriptions This seems like a fairly natural thing to have in this popup; already available via many other means of course, but you had to jump through various hoops to get to it from an item description depending on where the popup came from. -------------------------------------------------------------------------------- ef9e1dbd39 | Nicholas Feinberg | 2021-12-18 14:23:50 -0800 Fix Slouch stop attack prompt Don't ask "Really harm near your goblin?" -------------------------------------------------------------------------------- a495bdf9d0 | robertxgray | 2021-12-18 22:36:17 +0100 Configure GitHub Actions for Android -------------------------------------------------------------------------------- 582babd7fa | advil | 2021-12-18 12:56:47 -0500 feat: in ctrl-x list, indicate items at player's position The behavior of the full view menu for this case is somewhat confusing: by default a left click travels to the item's position, so nothing happens when a player clicks on an item in the menu at their position. I think a more major refactor of this menu might be helpful (not sure exactly what), but this commit tries to very slightly smooth over the case by marking which items are at the player's position explicitly. -------------------------------------------------------------------------------- ce354f50cf | advil | 2021-12-18 12:56:47 -0500 fix: enable describe actions for item stacks d40668a25 worked only on stacks of 1, because that was the only case where the describe popup got access to the "real" item that was on the floor. This commit expands things out so that for stacks of items if they are at the player's feet, the real item is used all the way along the chain. There was some required const munging that is not so great (though there's a lot of code that did not seem like it should actually be using const item_def * -- I started to work through this but the domino effect made me back up.) This commit also makes describe actions work for items in the full view describe that are at the player's feet. -------------------------------------------------------------------------------- 6159c76d74 | advil | 2021-12-18 12:56:46 -0500 feat: add (g)et as a describe action -------------------------------------------------------------------------------- bf359695bc | Nicholas Feinberg | 2021-12-18 09:25:21 -0800 Make the undead unpruneifiable Since they can't transform, right..? -------------------------------------------------------------------------------- 11349e6732 | Nicholas Feinberg | 2021-12-18 08:50:25 -0800 Rework the glaive of Prune (perryprog) The glaive of Prune has, for many years, had exactly one unique mechanical feature: being hated by Zin. Let's add something slightly more meaningful. Whenever the glaive's wielder is paralysed, petrified, or KO'd, they'll be overcome with the curse of the Prune, transforming into a giant prune. This makes the player so squishy that they're hard to injure, making them take half damage until the paralysis/etc ends. N.b.: probably this shouldn't affect the undead? -------------------------------------------------------------------------------- 876f0bc6b4 | Nicholas Feinberg | 2021-12-18 07:51:21 -0800 Manually add a throwaway gag (flappity) -------------------------------------------------------------------------------- 3f01f628eb | Edgar A. Bering IV | 2021-12-18 15:01:56 +0200 docs: add Gopall to credits -------------------------------------------------------------------------------- ed7a1ca826 | Edgar A. Bering IV | 2021-12-18 15:01:14 +0200 docs: changelog through 0.28-a0-1190-g77e1c55 -------------------------------------------------------------------------------- 77e1c55843 | advil | 2021-12-17 11:45:24 -0500 feat: use Goratrix's main menu tile in the action panel -------------------------------------------------------------------------------- 03e5d3d3bf | Nikolai Lavsky | 2021-12-17 11:39:14 -0500 refactor: combine code for drawing item glyphs and panel actions (advil) Both `draw_action()` and `draw_item_glyph()` have the same code for drawing quantities and highlighting actions, so it makes sense to combine them into a single function. Also, add a few TODO comments for future improvements. -------------------------------------------------------------------------------- 013d6de2c3 | Nikolai Lavsky | 2021-12-17 11:39:14 -0500 feat: don't hide the action panel unless it is explicitly disabled Since the panel always has at least one action now, it should be permanently visible unless disabled by configuration. -------------------------------------------------------------------------------- 5f2c673282 | Nikolai Lavsky | 2021-12-17 11:39:14 -0500 feat: add a main menu button to the action panel (PleasingFungus) With a main menu button on the action panel, it should be easier for players to discover the macro editor, lookup-help menu, and other tools and commands. -------------------------------------------------------------------------------- e4c47cc41c | Nikolai Lavsky | 2021-12-17 11:39:14 -0500 refactor: add helper functions for drawing panel actions The code for drawing actions and item glyphs is a bit complex, so it's better to split it up into separate functions. Also, we drew an item glyph and the cursor for some items twice. This happened if an item had a base tile and a brand icon. Fix this and simplify handling of `adjusted_scale`. -------------------------------------------------------------------------------- 4dc111b8cc | Goratrix | 2021-12-17 11:04:33 -0500 Tweak tile for game menu button on local tiles Commit 6a8ace0 added the game menu button to local tiles using a placeholder tile, this updates the tile to have the correct button frame. -------------------------------------------------------------------------------- 53156a8862 | Kate | 2021-12-17 02:17:16 +0000 Adjust messaging for monsters dropping wands on death To make it a little more succinct. -------------------------------------------------------------------------------- 2b4b0b1879 | Kate | 2021-12-16 23:26:30 +0000 Prevent self-healing abilities under DDoor They had no effect, but could waste max MP (as a Deep Dwarf) or piety (as an Elyvilon worshipper who abandoned to cast DDoor and then reconverted with DDoor active and enough saved piety to still activate Heal Self). -------------------------------------------------------------------------------- 381e24db82 | Nicholas Feinberg | 2021-12-15 22:08:27 -0800 Add an 'unaffected by silence' status A very common error for newer players is to try to silence demons and then to be confused about how they cast anyway. Adding a status that describes them as 'unaffected by silence' might help? -------------------------------------------------------------------------------- ba1fe864d9 | Nicholas Feinberg | 2021-12-15 21:51:18 -0800 Shift fire champion's display ordering -------------------------------------------------------------------------------- 586d44308f | Nicholas Feinberg | 2021-12-15 21:47:24 -0800 Buff infusion These felt a bit worse to me than I expected. Costing 2 MP per hit really burns through your pool startlingly fast, and results in a lot of resting. Let's try it at 1 MP per hit and see if it still feels like a significant cost. The Mad Mage's Maulers are unaffected. -------------------------------------------------------------------------------- e3c729c085 | Nicholas Feinberg | 2021-12-15 21:41:37 -0800 REVERTME: Make infusion gloves very common So that we can actually test this. Roll this back before 0.28's release. -------------------------------------------------------------------------------- 3097664d63 | Nicholas Feinberg | 2021-12-15 21:32:05 -0800 Increase the rat rate Changing the ratskin cloak from +Rats to *Rats may have left it somewhat undertuned. Increase the rat rate by 50% to compensate. -------------------------------------------------------------------------------- 7ef81e1a51 | Nicholas Feinberg | 2021-12-15 21:30:22 -0800 Add default values for monster spell slots Rather than requiring a full specification (spells:fireball.200.wizard...), allow just naming a spell and default to some plausible frequency and casting type values. -------------------------------------------------------------------------------- 0bdaba56fc | Nicholas Feinberg | 2021-12-15 21:30:22 -0800 Discover traps Don't claim that &Tzot will "mark it undiscovered". -------------------------------------------------------------------------------- d6bfa8a262 | Nicholas Feinberg | 2021-12-15 21:30:22 -0800 Zot! (Sastreii) New Zot trap tile. -------------------------------------------------------------------------------- 766a6a42ef | advil | 2021-12-15 21:23:11 -0500 doc: tweak some comments The return values here are not very obvious, document and make the comments consistent. -------------------------------------------------------------------------------- 38569e0721 | Kate | 2021-12-16 02:02:35 +0000 Fix a return value -------------------------------------------------------------------------------- 90128a5531 | Oneirical | 2021-12-16 02:02:14 +0000 Ban Jiyva from Thunderdome, replace Teleport Self with Blink Away Jiyva now uses exploration piety so doesn't function in arenasprint, and Teleport Self has been removed. [Committer's note - updated commit message, and kept Fedhas as enabled. Closes #2293] -------------------------------------------------------------------------------- bbd083314f | Kate | 2021-12-16 00:50:52 +0000 Make Yara's Violent Unravelling smite-targeted Along similar lines to Inner Flame and its recent change, Unravelling is a fun hex spell with some good utility, but is often quite fiddly to make effective use of. Change it to also be smite-targeted, allowing more precise enchantment/summon removal without the chance of a non-enchanted creature blocking the beam and making it ineffective. -------------------------------------------------------------------------------- f21496c7a1 | Kate | 2021-12-16 00:24:28 +0000 Shorten some new welcome messages To fit on a single console line. -------------------------------------------------------------------------------- e8bcaa7831 | Kate | 2021-12-16 00:02:48 +0000 Remove an unnecessary prompt The dreamshard necklace as implemented doesn't have any problem interacting with DDoor - the player will be invincible as expected while the spell is active, and then once it expires the necklace works as normal to save them if required. -------------------------------------------------------------------------------- c1efb617dc | Kate | 2021-12-16 00:02:48 +0000 Remove a duplicate canned message -------------------------------------------------------------------------------- 616b1c6417 | advil | 2021-12-15 14:40:31 -0500 lint -------------------------------------------------------------------------------- a718ce6c6e | Nicholas Feinberg | 2021-12-15 11:14:23 -0800 Lighten hands (kate) Continue a policy of strategic ambiguity wrt the purpose & uses of the Orb of Zot. -------------------------------------------------------------------------------- d40668a259 | advil | 2021-12-15 13:57:14 -0500 feat: read/quaff floor items from description Pretty straightforward change except that it was slightly tricky to get the right item to use. In the course of this I also refactored some of the switch statements and generalized the quiver check -- you can quiver from the description anything that is normally quiverable, rather than using an item by item check. This required a somewhat ugly hack to keep (q)uiver and (q)uaff from colliding, point even more towards the need to overhaul this code in a more structured way. -------------------------------------------------------------------------------- f8141789e4 | advil | 2021-12-15 13:57:14 -0500 feat: feature description tweaks * Show "you are here" if the player is at the position being examined. For now this is only on feature descriptions, but I have long wanted to add something like this for accessibility reasons. * Simplify some redundant feature decriptions. This was already done on the js side (I haven't removed that code, but possibly it is now removable if this one remains bug-free). * Improve door long descriptions. This mentions open/closed state, which is redundant, but felt odd not to include. It also explicitly mentions the door breaking mechanic. -------------------------------------------------------------------------------- 96c0fc9bb0 | advil | 2021-12-15 13:57:14 -0500 feat: tweak describe item actions order This is aimed at getting the "main" thing you do with various item types first, and the stable things across many item types last. (Previously, the latter were mostly first, and the order of the former was somewhat variable.) -------------------------------------------------------------------------------- 39b20cf4d7 | Nicholas Feinberg | 2021-12-15 10:24:05 -0800 Ignis flavor tweaks - Put its message before the 'you have escaped'. The latter is iconic and should always be last. - No messaging for escaping without the orb with Ignis - it won't come up often & doesn't really add much. -------------------------------------------------------------------------------- cb000ee472 | Edgar A. Bering IV | 2021-12-15 20:17:44 +0200 feat: some Ignis lore messaging (Wandering Mushroom) -------------------------------------------------------------------------------- 933dd556d1 | Edgar A. Bering IV | 2021-12-15 20:10:45 +0200 fix: lower the cost of Yred recall It didn't survive its tweak in the rebase, oops. -------------------------------------------------------------------------------- 27aa881441 | advil | 2021-12-14 17:22:12 -0500 fix: relax the conditions for `X]`/`X[` (elliptic) These got overly tightened in 5bd2f0ac44. -------------------------------------------------------------------------------- 93145404a5 | Edgar A. Bering IV | 2021-12-14 22:20:41 +0200 fix: silence library messages during newgame creation (kate) -------------------------------------------------------------------------------- 43c36bbe99 | Edgar A. Bering IV | 2021-12-14 22:20:41 +0200 fix: don't announce empty wanderer inventories -------------------------------------------------------------------------------- 805a0a0067 | Edgar A. Bering IV | 2021-12-14 22:20:41 +0200 fix: remove some dead book code from ng-setup -------------------------------------------------------------------------------- c9877f665c | Edgar A. Bering IV | 2021-12-14 22:20:41 +0200 fix: don't fall back to a kite shield inappropriately at newgame -------------------------------------------------------------------------------- a95d5098ad | hellmonk | 2021-12-14 22:17:31 +0200 feat: invert the wanderer paradigm Wn is a really cool "random start" option, but has a couple annoyances. You can get some truly awful starts due to the way skill points are assigned, and are basically guaranteed to have awful stats due to the way stat points are assigned. This commit tries to rectify those problems and adds some new things that Wn can get at game start. The new model assigns the equipment first, based entirely on species apts, then assigns stats and skills afterward depending on what we got. It tends to lead to more lopsided (ie useful) stat distributions and higher levels of skill in things that are useful, though these are by no means guaranteed. Along with changing the model this commit makes the following adjustments to Wn starting equipment, offering a wider mix of cool things: - "good weapon" can get an upgraded base type or vorpal brand instead of enchant - "good armour" can roll chain instead of +2 scale, and gives acid scales for non-chain users - "good shield" now rolls an enchanted buckler or prot buckler, instead of a kite shield - "good magic school" rolls a 3-spell randbook instead of a background starting book - "good spellcasting" rolls a 4-spell any-school randbook (capped at level 3) - "good stealth" can give either a +2 dagger and a consumable or a plain dagger and a mix of atropa and datura darts - "decent armour" can role chain or ring, with a plain aux armour for odd shapes (all scales and tla are too strong for decent items) - "decent dodging" and "decent stealth" can give an aux armour if a good armour wasn't received - "decent fighting" can give an extra weapon plus if a weapon is available - it is possible to start with a hunting sling and sling skill - throwing can start with boomerangs - it is possible to get aux armour (and likely for oddly shaped species) - a wider variety of potions and scrolls can be rolled - a wider variety of evocables can be rolled - Wn that start with sandblast also start with stones [ Committer's notes: Thanks to gammafunk, kate, and PleasingFungus for input in this overhaul. ] -------------------------------------------------------------------------------- f74599e7d4 | Edgar A. Bering IV | 2021-12-14 11:22:38 +0200 text: quotes for Chei abilities This might be gratuitous and I don't care -------------------------------------------------------------------------------- 9c71ebef14 | Nicholas Feinberg | 2021-12-13 20:44:56 -0800 Store polar vortex power on cast We historically didn't do that to discourage, say, wielding a staff of ice, casting the spell, and then unwielding the staff to do something else. But... usually if you're casting a level 9 ice spell, you sort of want to have ice enhancers for other things (eg ozo's fridge), and the un-stored power system encourages other silly swaps - eg start with a ring of wizardry to get vortex castable, then swap to =ice once it was running. Anyway, not storing power meant that using exegesis on vortex was a nasty player trap. Now that's fixed! -------------------------------------------------------------------------------- 59a505c739 | Nicholas Feinberg | 2021-12-13 20:24:43 -0800 Beef up ironbound thunderhulks Even as mid-tier enemies, thunderhulks were generally considered to be somewhat underwhelming threats. So, increase their HD by 50% to increase the accuracy and damage of their Call Down Lightning (damage from 3d21 to 3d26, accuracy from 19 to 21). Also give them Blink Range so that they eventually get a chance to re-distance themselves after getting too close to the player, similar to boulder beetles. -------------------------------------------------------------------------------- ef4b3a621b | Nicholas Feinberg | 2021-12-13 20:15:18 -0800 Fix Fire Storm damage display (elliptic) A weird ancient hack (3a4159644bb83, greensnark, 2008) was causing displayed damage (in xv, etc) to be twice actual damage. Now fixed. -------------------------------------------------------------------------------- 286b55035a | Nicholas Feinberg | 2021-12-13 20:12:48 -0800 Clarify Fiery Armour desc Be explicit about the +AC. -------------------------------------------------------------------------------- ec31e34405 | Nicholas Feinberg | 2021-12-13 20:10:41 -0800 Make two sudden removals The teleportatis exploration trap message used "suddenly" three times in a row. It was a bit much. -------------------------------------------------------------------------------- c7b72d3202 | gammafunk | 2021-12-13 14:58:16 -0600 fix: Update loot potion weights (darkwolf811) The list dgn.loot_potions is supposed to have weights adding up to 100, but this was broken f55cbd34. Adjust the entries appropriately so we total to 100 again. -------------------------------------------------------------------------------- 0f060c364e | advil | 2021-12-13 12:18:53 -0500 feat: no exiting popups via mouse with mouse control disabled Disabling this for now because of complaints. I'm not sure if this is really a good idea, this strikes me as the sort of thing where if this had always existed, no one would be asking me to remove it. -------------------------------------------------------------------------------- 5bd2f0ac44 | advil | 2021-12-13 12:18:53 -0500 feat: add key hints and hotkeys to feature descriptions Also, add clicking to webtiles, with some other misc description enhancements. This turned out to be a mess of special cases, many of which I've probably still missed. The commands that are supported are up, down, open, close, and some shortcuts that go directly to the map view for the other side of explored staircases. Bugfixes: correctly handle unseen tiles with webtiles right click; fix a subtle ordering issue in description hotkey handling. -------------------------------------------------------------------------------- c91ac77a38 | advil | 2021-12-13 12:18:53 -0500 fix: don't crash when right clicking out of bounds Probably webtiles specific. -------------------------------------------------------------------------------- cf6077d4cc | Kate | 2021-12-12 21:14:02 +0000 Tweak wording of autumn katana description For consistency with other DESCRIP lines. -------------------------------------------------------------------------------- c8569940dd | Edgar A. Bering IV | 2021-12-12 23:08:30 +0200 fix: remove some leftover code -------------------------------------------------------------------------------- 5f824d10e6 | sdynet | 2021-12-12 23:06:02 +0200 Rework the autumn katana Now, the sword sometimes uses manifold assault when attacking an enemy, instead of having clarity. Due to issues of setting time_taken and preventing re-entry the katana duplicates some of the functionality of cast_manifold_assault instead of simply re-using the function. However! There are two great upsides to this implementation: monsters can use the katana (no special flag) and players can use it with manifold assault to get one layer of recursion (and a rare message). [ Committer's note: Rewrote the artefact function, tweaked the implementation, revised the commit message. Closes #2234 ] -------------------------------------------------------------------------------- dee3398930 | advil | 2021-12-12 14:55:11 -0500 fix: add explicit styling for action panel settings For most players this is just minor color / spacing tweaks. But, it's come to my attention that CWZ loads bootstrap, and bootstrap's css is impacting the action panel quite badly. This commit should undo the most egregious aspects of this, though it's a bit hard to test directly. (Don't get me wrong, tossing bootstrap on top of webtiles is super double plus unrecommended, likely to lead to any number of subtle unpredictable rendering glitches, and by providing a workaround for these particular fairly major ones I in no way endorse doing webtiles+bootstrap...) -------------------------------------------------------------------------------- 386a16afc0 | advil | 2021-12-12 10:30:58 -0500 feat: click to close webtiles popups Previously, there was no way to escape a popup with a mouse(!). This commit adopts the local tiles approach, where clicking outside of a popup exits the popup. Unlike local tiles, both left or right clicking will work; in local tiles it's only right click. Possibly both clients should be standardized to use one or the other. -------------------------------------------------------------------------------- ff41af4bb9 | hedk3 | 2021-12-12 10:49:17 +0200 fix: more Storm Form hand naming [ Committer's note: fixed to compile correctly and unbraced. Closes #2290 ] -------------------------------------------------------------------------------- 4ce00ec954 | Edgar A. Bering IV | 2021-12-12 10:35:37 +0200 docs: update the CREDITS -------------------------------------------------------------------------------- 8fc9a925bb | Edgar A. Bering IV | 2021-12-12 10:11:16 +0200 feat: revise the ring of the Mage The ring of the Mage was a not-super exciting Wiz ring with light bonuses. In keeping with the "good or interesting" unrand revision paradigm, this commit revises the ring of the Mage to be a Wiz/Archmagi ring. Archmagi on an easty to swap slot might raise some eyebrows, but it is no worse than enhancer swapping. The hope is that this item might convince some more hybridization, helping make up for both the penalty of heavy armour and the lack of intelligence of heavy armour users. Of course, it'll also be an exciting find for any spellcaster who has body slot Archmagi, thanks to the stacking change. Boom pow! XXX: The _resist_composer in output.cc assumes that resists with a max of < 5 should get spacing, if it becomes possible to get 3 pips of Archmagi this will cause display issues % on console. -------------------------------------------------------------------------------- e886f3e13f | Edgar A. Bering IV | 2021-12-12 10:09:28 +0200 feat: archmagi stacking Currently the only sources of archmagi are body armour and a save-transferred hat of the high council. However, adding more archmagi sources has been discussed in a couple of development spitballs and the expectation in all of these conversations is that archmagi stacks. This commit alines expectation and reality. -------------------------------------------------------------------------------- 151b4aef40 | Edgar A. Bering IV | 2021-12-12 10:09:17 +0200 fix: archmagi handling in util/art_data.pl -------------------------------------------------------------------------------- 468af4c5fd | Edgar A. Bering IV | 2021-12-12 09:31:54 +0200 fix: remove a Tar teleport closet Closes #2291 -------------------------------------------------------------------------------- 87f88a2ef8 | Edgar A. Bering IV | 2021-12-12 09:24:06 +0200 Revert "fix: don't force picking up of newly IDd equipment" This reverts commit f5e35ccd160c657ff46174990fc3fe4e97655484. As implemented it did not have the correct behavior, and was still incorrect after 99a87601b6. Discussion with players revealed there are many users who expect autopickup to make its "should pick up decision" on an item when it comes into view, while others would like their autopickup options applied with respect to the item post-floor-identification. So I'm reverting this to the behavior before f5e35ccd: an item will be autopickedup if it meets the user's autopickup preferences before it is floor-identified. The correct solution here is to add a boolean game option that is checked before setting NEED_AUTOPICKUP_KEY in the relevant lines (the ones modified by this commit). -------------------------------------------------------------------------------- 8cf3085ebe | Edgar A. Bering IV | 2021-12-12 09:24:06 +0200 fix: don't crash on deathbed conversions Closes #2289 -------------------------------------------------------------------------------- c51a68064b | Kate | 2021-12-11 21:51:33 +0000 Add a missing canned message to Shaft Self prompt -------------------------------------------------------------------------------- a6bf8c0b4a | Kate | 2021-12-11 21:51:32 +0000 Let Yara's Unravelling turn summons into explosions (Undo) Yara's is a fairly situational spell, so to give it some slightly wider utility, allow it to also be cast on summoned monsters, unravelling the magic that summoned them and killing them immediately. This allows it to be used as a form of single-target abjuration that can additionally damage the summoner with the resulting explosion. -------------------------------------------------------------------------------- b845255321 | gammafunk | 2021-12-11 14:30:48 -0600 fix: Correctly handle classed objstat averages For the classed averages of charges and enchantment, use the correct count when averaging according to classes of "Vault", "Shop", and "Mons" for items in vaults/shops/held by monsters. -------------------------------------------------------------------------------- 64c176eb70 | advil | 2021-12-11 14:48:53 -0500 feat: expand out webtiles mouse control Webtiles mouse control has always been a bit of an incomplete feature; I think edlothiol only barely started on this in 2012 in 52f5b20b692aa, which was (afaict) his last commit. No one else has tried to fix this up since. This commit fills out the feature set a bit. Previously, you could use left click to move and attack in command mode, and there was a minimal tooltip for monsters, and that's it. This commit adds: 1. right click to describe in regular view, targeting view, and map mode. 2. left click to fire in targeting mode. (Or other behaviors, e.g. in `x` this triggers autotravel.) 3. synchronization of a targeting ray with the mouse cursor position. This is probably the dodgiest feature in that (a) it may run into issues with latency (it's handled on the server side) and (b) it may make it too easy to misclick. The implementation follows local tiles but I wonder if this would be better with something like, click to select target, click again to fire. (Also, this was rather involved to implement as it revealed a subtle bug in the direction chooser.) 4. Slightly less minimal tooltips. This only shows tooltips for monsters still, because it's a bit constrained by what info there is on the client side, and constantly doing popups with just the click hints was pretty annoying in my testing. One departure from local tiles: mousing over a square out of view doesn't affect the currently set ray. I found this a lot more natural and it works better with mousing from an object in the action panel to the targeting range (which almost always involves crossing out-of-los squares). Possibly this should be ported to local tiles. As before, all of this stuff is entirely disabled with `tile_web_mouse_control = false`. -------------------------------------------------------------------------------- 29f2d0b5fe | gammafunk | 2021-12-11 13:26:29 -0600 feat: Update briar patch and bush logic Currently, both bushes and briar patches allow projectiles and non-piercing magical beams to pass through, but get hit by enchantments and piercing or exploding beams. Although these rules are documented, they aren't intuitive and their complexity doesn't to interesting decisions. This commit simplifies the rules to allow pass-through to apply to all kinds of beams, be they enchantment, exploding, piercing, or non-piercing. Thus if a monster is shooting you behind a bush with whatever beam, you can shoot back with whatever beam. Bush and briars can still be targeted directly to prevent pass-through for any type of beam. We also remove specific exceptions for ranged and non-ranged sticky flame pass-through, since again this distinction is vanishingly rare in practice. Finally, we remove an unused exception for Chain Lightning as well, since it's not necessary for that spell to function properly. For briar patches, we improve their logic so pass through beams only if the actor is aligned with the briar. They intercept beams fired by a non-aligned actor like a normal monster would. This means that thorn hunters can fire through their briars, but the player's beams through these briars will be intercepted. This helps the briar patch to be a more effective anti-player-ranged barrier. For player-created briar patches under Fedhas, briars now block all incoming beams from hostile monsters like the player would expect. Monster descriptions for bushes and briar patches are updated to describe the new logic. -------------------------------------------------------------------------------- f48e6d8fb1 | amcnicky | 2021-12-11 20:06:22 +0200 feat: new unrand artefact: dreamshard necklace The dreamshard necklace is an amulet of nothing that for the most part does nothing. However, on a lethal or near-leathal blow the necklace shatters, absorbing the blow and releasing protective dreams of healing (a big heal, between half and full HP), friendship (shadow creatures), and clouds (fog). That is, the player gets to trade their amulet slot (with its many powerful effects) for a one-time-get-out-of-death-free card. [ Committer's note: Simplified the shattering effect significantly, re-factored the trigger logic to be simpler, moved the dreamshard effect to spl-goditem, reduced the visuals to a single flash (no permanent tile changes), implemented Ashenzari and Death's Door checks. Thanks to kate and PleasingFungus for input in the PR process. Closes #2078. ] -------------------------------------------------------------------------------- 12f55c057d | Edgar A. Bering IV | 2021-12-11 19:23:03 +0200 fix: finish an old todo in player::heal -------------------------------------------------------------------------------- 17253bc447 | robertxgray | 2021-12-11 12:54:53 +0100 Merge branch 'master-upstream' -------------------------------------------------------------------------------- 397d20460d | mgdelmonte | 2021-12-11 11:08:11 +0200 feat: add travel trail functions to clua Adds `travel.clear_travel_trail` and `travel.set_travel_trail` functions, allowing clua control over the travel trail. This purely visual feature can enable some nice generated visualizations, without affecting gameplay. [ Committer's note: Closes #2273. ] -------------------------------------------------------------------------------- 376ce86db5 | mgdelmonte | 2021-12-11 10:58:57 +0200 feat: add optional weapon argument to monsterinfo.target_weapon Adds an optional `weapon` argument to the Lua `monsterinfo.target_weapon` function. If `weapon` is omitted, it shows the targeting description accompanying an unarmed attack. If `weapon` is provided, it shows the targeting description for an attack with that weapon. This changes usage of the function slightly (formerly, the function returned only the description for your current weapon), but the function is new in this trunk cycle. [ Committer's note: Tweaked to also resolve a TODO in describe.cc. Closes #2275 ] -------------------------------------------------------------------------------- 9993a5020f | mgdelmonte | 2021-12-11 10:51:22 +0200 feat: add you.known_items clua function This exposes the list of known, identifiable subtypes to Lua. It's the same list as given by the `\` "display known objects" command, minus the unknowns. Without this, it's impossible to know (within Lua), that one has already seen a particular kind of potion or scroll. [ Committer's note: Squashed and clarified docstring. Closes #2286 ] -------------------------------------------------------------------------------- 31a25a4635 | mgdelmonte | 2021-12-11 10:30:17 +0200 fix: don't treat range 1 spells as "ranged" in mons_has_ranged_spell Range 1 spells like Freeze aren't really ranged spells, for the purpose of this function. [ Committer's note: Closes #2279 ] -------------------------------------------------------------------------------- ea0b6819f9 | mgdelmonte | 2021-12-11 10:14:27 +0200 feat: add can_traverse to clua monsterinfo Adds `can_traverse(x,y)` function to the clua monsterinfo object. Returns true if the monster can traverse (actually, occupy) the cell at x,y coordinates. Helpful for deciding where monsters might move. [ Committer's note: Closes #2274 ] -------------------------------------------------------------------------------- 398d93cfb8 | Brian Power | 2021-12-11 10:12:25 +0200 fix: add missing args for lua print_hint() [ Committer's note: Closes #2247 ] -------------------------------------------------------------------------------- 0bdd5ba030 | advil | 2021-12-10 21:04:28 -0500 fix: don't rest forever when divine vigour ends (ardl) If divine vigour ends while resting, bringing the player to full health, the delay would not end on its own, because the delay end condition was apparently only checked when increasing hp or mp. (I thought the delay was also supposed to check, but it seems I've been misreading this could. Possibly this would be a lot more robust than what we're doing now...) For most players this doesn't matter, because the divine vigour end message interrupts the delay. But any player who has something like `runrest_ignore_message += pray:` can trigger the bug. (Thanks to ardl for his ...involved rc, I got some good bisecting practice to find the interaction.) To fix this, this commit adds a check to calc_hp on top of inc_hp, which should also cover any similar cases that have so far been missed. Also, some cleanup of resting checks to be more uniform. -------------------------------------------------------------------------------- 2df8497881 | nicolae-carpathia | 2021-12-10 19:33:30 -0500 Make nicolae_danse_macabre slightly less macabre After comments, toned down a bit in D and Elf, by adding runed doors and also using less demon weapons in D. -------------------------------------------------------------------------------- fd376f2b2f | advil | 2021-12-10 18:15:15 -0500 lint: checkwhite (Odd thing for checkwhite to be enforcing, maybe a bug?) -------------------------------------------------------------------------------- 8eb0198dcf | advil | 2021-12-10 17:54:37 -0500 fix: handle multi-word actions in webtiles item descriptions Previous implementation made wrong assumptions about what actions there could be; instead of trying to generalize this commit just brute-forces the handling of a final "or". -------------------------------------------------------------------------------- 52f9137b40 | advil | 2021-12-10 17:28:42 -0500 fix: make webtiles ui push bugs less disastrous Two related issues: * If the menu state gets out of sync with the webtiles ui state, don't bring down the whole client (this could happen in `menu_key*_handler` if `menu` was set but `ui.top_popup()` returns null or undefined). * If there is a crash in a ui handler, show a buggy div rather than do nothing, to head off one way that the game's menu state and webtiles ui can actually get out of sync. This will also make it a bit clearer to the user they are seeing a bug that they could report. -------------------------------------------------------------------------------- 2d15a92f8c | robertxgray | 2021-12-10 21:42:51 +0100 Android: Include < and > in numeric keyboard This is a user request for searching stairs in map mode. They replace - and + which are available in the main keyboard. -------------------------------------------------------------------------------- 5c4f51bb93 | advil | 2021-12-10 15:28:19 -0500 fix: don't crash on `(t)ake off` This won't render quite right, but this commit should fix the javascript crash. -------------------------------------------------------------------------------- 1608afb2e1 | Edgar A. Bering IV | 2021-12-10 22:04:00 +0200 fix: don't treat all delays as frozen time -------------------------------------------------------------------------------- 97e41b5463 | Kate | 2021-12-10 19:49:04 +0000 Update some tests Remove obsolete items/egos from test character setups. This was only from a very cursory glance over the tests, and they likely could use some further attention (especially poor qw). -------------------------------------------------------------------------------- 76092dafaf | Edgar A. Bering IV | 2021-12-10 21:28:39 +0200 fix: don't crash when reaping with zonguldruk or chaos The refactor to work like the rest of corpse exploitation got lost in rebasing new Yred, oops. -------------------------------------------------------------------------------- f17af53183 | Edgar A. Bering IV | 2021-12-10 19:23:15 +0200 fix: the build -------------------------------------------------------------------------------- 6ce92f56ac | ArmiesAndCastles | 2021-12-10 19:03:35 +0200 feat: improve wizmode freeze time This commit keeps time frozen during autoexplore and forbids resting (since HP will not be recovered). [ Committer's note: Squashed and rebased, blocked the rest command completely. Closes #2206 Closes #2205 ] -------------------------------------------------------------------------------- a90572a584 | advil | 2021-12-10 11:39:59 -0500 feat: clicking for inventory item actions One thing the action panel has revealed is how minimally implemented clicking is in the webtiles UI. I realize that lots of advanced players are perfectly fine with never using a mouse, but allowing it makes things easier for newer players who aren't used to huge keybindings. This commit enables clicking on the actions in an item description popup (which is one of my first targets for this kind of change because it's so obviously missing when you right click from the action panel). The implementation is entirely client-side: it converts any strings like "e(v)oke" into a span with the `data-hotkey` attribute set to the hotkey in parens. This might be described as hacky (perhaps sending structured action data from the server would be better), but it was really easy to implement and actually seems pretty robust/useful. Part of the trick was that someone (aidanh I assume) has previously implemented an amazing thing where if you just set this data attribute, an on click handler magically springs into existence that sends the hotkey. -------------------------------------------------------------------------------- 39a6f95271 | Aliscans | 2021-12-10 18:39:39 +0200 feat: use modifier prefix keys in the direction chooser /+direction and shift+direction are valid combinations for the "long walk" command. Shift+direction is a valid combination for "fire in a direction", with direction+! as an alternative, but having /+direction do the same should make it easier to remember. Ctrl+X and Ctrl+P are both valid inputs to the direction chooser and common browser hotkeys, this commit also allows *X and *P as alternatives. Put ' and ; before * and / in targeting_help_1, as the above change means the latter keys are used as modifiers if use_modifier_prefix_keys is set (the default). In unmangle_direction_keys(), only let * modify characters which CONTROL() maps to \x00-\x1F. In particular, this means that ** is *, giving a work-around for people who use the default settings but are used to * and / cycling through objects. Co-authored-by: Aliscans -------------------------------------------------------------------------------- 0997d3a168 | ArmiesAndCastles | 2021-12-10 18:00:45 +0200 feat: add awoken forest attitude indicator to xv [ Committer's note: fixed bracing style, Closes #2204 ] -------------------------------------------------------------------------------- 99a87601b6 | Edgar A. Bering IV | 2021-12-10 16:44:21 +0200 fix: use identify_item when deciding autopickup information -------------------------------------------------------------------------------- f5e35ccd16 | Perry Fraser | 2021-12-10 16:24:55 +0200 fix: don't force picking up of newly IDd equipment This just re-uses the logic that was being used for wands, which also avoids the edge-case where if you floor-id something without using autopickup triggering (like when AP is disabled) then it was possible to have the item ID'd, marked as don't-pickup in `\`, and still picked up due to NEEDS_AUTOPICKUP_KEY set in its props. The old code that led to this logic seems to imply there was an intentional hack for "previously-unknown items", but in testing, I found no unexpected behavior with the new version. -------------------------------------------------------------------------------- c8cd538e2d | Edgar A. Bering IV | 2021-12-10 16:06:36 +0200 lint: checkwhite -------------------------------------------------------------------------------- 6a268ab339 | Gopall | 2021-12-10 16:04:24 +0200 feat: prompt when wearing faith Trying to remove an amulet of faith (while worshipping a deity that cares about it) would trigger a confirmation to confirm your choice. But there wasn't any confirmation like that for when you tried to put it on. So I added a bit of code to a function so the game would ask the player if they were sure they wanted to wear an amulet of faith. [ Committer's note: There was some discussion among the devteam as to whether or not this prompt is necessary or if auto inscriptions can implement the desired functionality (autoinscribing faith with !P to force a prompt). I'm merging this for consistency and because this prompt protects new players who are exactly the ones who won't have autoinscriptions set up. ] -------------------------------------------------------------------------------- 9766e9d42a | ArmiesAndCastles | 2021-12-10 15:55:55 +0200 fix: forbid temporary form lava exploration Closes #1975 -------------------------------------------------------------------------------- 27af8a720d | EdDewey | 2021-12-10 15:55:05 +0200 fix: only ask barachi for confirmation once when they hop -------------------------------------------------------------------------------- 88f0ff19eb | Nikolai Lavsky | 2021-12-10 15:29:25 +0200 feat: allow checking if there is enough space for Malign Gateway This commit disables the spell in the quiver and z/Z menu when there is not enough space to open a gateway. -------------------------------------------------------------------------------- 2bfde531ef | Perry Fraser | 2021-12-10 15:23:54 +0200 fix: correct levdes.vim comment syntax highlighting Seems to have been introduced as a typo in 763bd81. -------------------------------------------------------------------------------- 9d8ee82f23 | Aliscans | 2021-12-10 15:14:55 +0200 feat: state when a terrain blocks movement, but not reaching or magic State in the description when a terrain blocks movement, but doesn't restrict reaching weapons or LOS_NO_TRANS spells. At present, the former covers orcish idols, granite statues and malign gateways (the last only shows a description before the tentacle appears), and the latter also covers grates. This knowledge could be useful for (e.g.) cheibrodos_spider_deadly_dance. Co-authored-by: Aliscans -------------------------------------------------------------------------------- 5bfae530bd | Nikolai Lavsky | 2021-12-10 15:11:34 +0200 fix: don't erase travel trail when visiting item piles (#2081) After 330158af and 1bdd5c97, the travel trail is not drawn at all when the player visits item piles. `movement:cc:move_player_action()` adds visited tiles into the trail as long as there is the running delay in the delay queue. If the player moves manually (`running == false`), the same function calls `clear_travel_trail()` to erase the trail. Before we call `move_player_action()` for the last time, `travel.cc:travel()` calls `stop_running()`, which removes the running delay. As the result, `move_player_action()` clears the trail instead of adding the last step to it. Fix this by using `stop_running(false)`, which doesn't clear the delay. This should be safe, since the delay will be cleared by other code later anyway. -------------------------------------------------------------------------------- dce3279b65 | Nikolai Lavsky | 2021-12-10 15:11:34 +0200 fix: draw complete travel trail when autoexploring (#2081) After 14faa605, the travel trail sometimes doesn't have the last step. It happens when autoexplore is interrupted by a monster coming into view or by the player noticing a new item pile. Previously, we removed the running delay from the delay queue only after adding the last visited tile to the trail. We stop running and remove the delay earlier now, so we need an extra check after the code added in 14faa605. -------------------------------------------------------------------------------- 6a9fe35dad | burnish3d | 2021-12-10 15:10:15 +0200 docs: update style of use_animation and monster_list_colour (#2261) -------------------------------------------------------------------------------- 51eb943035 | hedk3 | 2021-12-10 15:08:02 +0200 fix: Storm Form display weapon name depending on species (#2265) Currently, this form always displays "Storm fists" no matter the active species, despite tiles showing that the player character's anatomy is maintained in this transformation. To be consistent with Statue Form and Blade Hands, this minor change uses the same logic used in Statue Form to fix this. -------------------------------------------------------------------------------- f47a79d804 | Jonathan Klabunde Tomer | 2021-12-10 15:05:23 +0200 consider Summonings useless after sacrificing love (#2277) With Abjurations gone, every spell in the Summonings school is inaccessible to characters that have sacrificed Love to Ru. The skill is therefore useless to them; we needn't bother allowing them to train it, and certainly shouldn't offer manuals of Summonings from acquirement. -------------------------------------------------------------------------------- 6434aa07ad | robertxgray | 2021-12-10 14:00:31 +0100 Android: Fix weird keyboard on Samsung devices Newer Samsung devices use the emoji variant of some characters by default. This fix explicits the text variant and reduces the font size for better fitting in the smallest devices. -------------------------------------------------------------------------------- f337918505 | robertxgray | 2021-12-10 14:00:23 +0100 Android: Long press as right click A long press can be used as a right click on the Android port. -------------------------------------------------------------------------------- c0a09d7c55 | robertxgray | 2021-12-10 14:00:11 +0100 Hide tab icons by default in the small layout The icons are shown/hidden when clicking on the status area. We can increase the viewport scale as a result. -------------------------------------------------------------------------------- 498bec7977 | Edgar A. Bering IV | 2021-12-10 11:54:41 +0200 tiles: yred iconography (Sastreii) -------------------------------------------------------------------------------- 1eb2483b26 | Edgar A. Bering IV | 2021-12-10 11:47:23 +0200 fix: consistently treat zombie base types In 1e9075421c5 zombies were de-anonymized. As an unfortunate side effect, the function mons_zombie_base was changed to return the species of the base zombie, not the base monster class used to define the zombie. As a result, most dramatically noticed for the damage of orcish derived undead, but also relevant for spriggan defender zombie action eneriges and any monster with a species much weaker than its type, the zombie was based on the underlying species. This commit simplifies some uses of the function and is being made after verifying every other use will work correctly (or as originally intended) with mons_zombie_base returning the monster class, and not the underlying species. Undead orc warlords should once again be as spooky as they seem from their name. -------------------------------------------------------------------------------- f3fc490d9d | Kate | 2021-12-10 03:13:02 +0000 Fix TSO not giving penance for miasma effects Appears to have been broken since the poison conduct was removed in c6e9da29e, oops. Fortunately didn't really matter since methods of creating miasma (like casting Corpse Rot) would already cause penance, but fixes the very powerful tech of creating a bunch of miasma in advance and then converting to TSO and letting it kill things. -------------------------------------------------------------------------------- 0f7456fd9b | Kate | 2021-12-10 02:39:54 +0000 Update the manual's mutation section -------------------------------------------------------------------------------- 594c0c42f0 | Kate | 2021-12-10 01:51:32 +0000 Update the manual -------------------------------------------------------------------------------- a282ea246d | advil | 2021-12-09 15:45:36 -0500 docs: update action panel options -------------------------------------------------------------------------------- 450912fe5d | advil | 2021-12-09 14:30:05 -0500 feat: action panel glyph mode I'm not sure this is really that useful, so it's currently not tied to actually being in glyphs mode and has its own option. We'll see if people actually use it; if not, (and if I don't find a way to improve it) it may just be better to remove before release. -------------------------------------------------------------------------------- 0cd4c285bc | advil | 2021-12-09 11:30:52 -0500 feat: more control over action panel item order Previously, item order was determined by enum order. This change uses the action_panel option itself to determine primary order (this was already implemented in an ordered way), and item letter for the suborder. It's possible that the latter will be too confusing by default, and if so, we can return to subtype as the secondary sort (which provides a stable ordering across games). I've also tweaked the default so that it is actually enum order, for some level of consistency before and after this commit. -------------------------------------------------------------------------------- a9895729f1 | gammafunk | 2021-12-09 06:32:15 -0600 feat: Slightly tone down a float vault (Lici) For minmay_chambers_of_sevens, the final chamber of sevens has seven 9 out-of-depth monsters, which is a bit steep for earlier mid dungeon levels like D:7. Allowable, but verging into runed door territory, which this vault isn't. Replace 3 9s with 0 spawns and downgrade two of the loot items, preserving the count of seven monsters and seven loot items in the final chamber. -------------------------------------------------------------------------------- 05a166d0ed | Kate | 2021-12-09 01:45:16 +0000 Adjust Chain Lightning damage falloff with range Increase the damage falloff from 2/3 per arc to 3/5 - in practice the damage falloff wasn't quite significant enough to make it feel distinct from other level 9 spells that deal massive AoE damage. Making it fall off faster helps make the positional aspect of the spell more important, while retaining its huge initial damage. In addition, rework the initial arc to scale smoothly with range, instead of having damage breakpoints at range 4 and 7 - this wasn't communicated clearly, and made those range breakpoints especially important against Nikola, for example. -------------------------------------------------------------------------------- a9c9dcfaf8 | Kate | 2021-12-09 01:45:16 +0000 Make wizmode god gifting grant Yredelemnul zombies Since &^ can't be used to adjust Yred's piety, special-case &- to gift zombies up to the next piety star. -------------------------------------------------------------------------------- 31ca34fcf2 | Kate | 2021-12-09 01:45:16 +0000 Refactor Bind Soul to use a new ability targeter And slightly adjust a failure message. -------------------------------------------------------------------------------- 6c0667d426 | Kate | 2021-12-09 01:45:16 +0000 Slightly increase BiA piety cost By 0.5 on average, to continue toning down the strength of various god abilities that are extremely strong and relatively low cost. -------------------------------------------------------------------------------- 46f1710d2c | Kate | 2021-12-09 01:37:05 +0000 Adjust some Qazlal ability costs To help Qazlal out a bit early on, reduce the MP and piety cost of Upheaval slightly, and also reduce the MP cost of Elemental Force. Also increase the MP cost of Disaster Area by 1, to make it a tiny bit harder to use multiple times in a single fight. -------------------------------------------------------------------------------- c1a47e44fc | Kate | 2021-12-08 23:25:24 +0000 Increase Okawaru Duel cost, reduce grace period on win It's an intended part of the ability that the player has some time to heal up after winning a duel, but it should be a little less reliable as a method of escaping danger. -------------------------------------------------------------------------------- 3cb2360906 | Edgar A. Bering IV | 2021-12-08 23:05:34 +0200 tiles: spectre tiles for bound souls (Sastreii) Not the full range of zombies like some of the others, but enough types to capture the different kinds of soul encountered in crawl. Should help the player keep track of their bound soul better. Definitely look super cool. -------------------------------------------------------------------------------- 53f92202ff | Edgar A. Bering IV | 2021-12-08 23:05:34 +0200 fix: remove a now unused MB check -------------------------------------------------------------------------------- 26d7df5b1f | Edgar A. Bering IV | 2021-12-08 23:05:34 +0200 feat: add the rest of genus W to Dark Bargain Since that was intended from the start. As the list is now longer in the mid range, adjust the quality floor upward. -------------------------------------------------------------------------------- 274bf074c3 | Edgar A. Bering IV | 2021-12-08 23:05:34 +0200 feat: toughen up bound souls For a capstone that's a bit tricky to earn, bound souls are pretty flimsy, even with the extra HP they were previously given. Let's turn them up a bit more so they get a better "bridge moment" feel, and players feel good about keeping them around/replacing and upgrading them. -------------------------------------------------------------------------------- a437c65847 | Edgar A. Bering IV | 2021-12-08 23:05:34 +0200 fix: clean up merge-induced bugs in dark bargain As well as abort the ability if the servant fails to arrive, instead of charging the player zombies for nothing. Unlike other ally abilities, Yred's Dark Bargain is used by players who have gobs of allies, so many that they might not have any available space for their servant. Aborting may leak a small amount of information, but the cases where that happens are either: ones where the player is getting it any way in virtue of their zombies, or so vanishingly rare and punishing that its probably ok to leak here. -------------------------------------------------------------------------------- b2c76ee18a | Edgar A. Bering IV | 2021-12-08 23:05:34 +0200 feat: mark death channel useless for Yredites -------------------------------------------------------------------------------- d6ebe8a65d | Edgar A. Bering IV | 2021-12-08 23:05:34 +0200 feat: allow bound souls to throw rocks -------------------------------------------------------------------------------- ea437062f2 | Edgar A. Bering IV | 2021-12-08 23:05:32 +0200 rename: change Yred abilities to not be explicit slavery Casual use of slavery-as-entertainment in crawl has been on its way out as poor taste for a while. Yred was one of the last hold outs, this rework is a good opportunity to make a change. Instead of dipping into the metaphysics of whether or not "enslaving souls" is the same as chattel slavery, let's just be a bit more vague in the flavour of Yred. -------------------------------------------------------------------------------- 17048352e6 | Edgar A. Bering IV | 2021-12-08 23:04:45 +0200 refactor: black torch: treat bound souls as their own species There were a bunch of strange special cases for spectral things intended to handle edge cases for bound souls but not show up on regular spectrals because of other checks or luck. This changes the enslaved soul to be its own monster type, still of species spectral thing, and simplifies or makes explicit the relevant checks. This commit also allows bound soul stats to be adjusted independent of spectral things; the EV modifier could be changed in the future. For now, to buff the bound soul, it gets full HP so as to be less fragile. -------------------------------------------------------------------------------- 5224dc67e1 | Edgar A. Bering IV | 2021-12-08 23:04:45 +0200 fix: clarify that undead left behind will poof -------------------------------------------------------------------------------- df1d555f45 | Edgar A. Bering IV | 2021-12-08 23:04:45 +0200 feat: fineff-ify attitude changing revivals Many different ways of harming a monster don't expect the monster to change attitude partway through the process. This has been the source of several mysterious Yred enslaved soul and Beogh deathbed conversion bugs. To prevent them, move both of these attitude-changing revivals to a fineff, so that mon->alive() returns false for the convertee until the fineff fires. This is a bit hacky so might cause weird behavior, but since fineffs now fire after each monster turn I don't think it will. -------------------------------------------------------------------------------- c2baa198af | Edgar A. Bering IV | 2021-12-08 23:04:45 +0200 feat: black torch: spectral mist immunity Like nightvision, meant to make monsters from Dark Bargain not harmful to the player. Of course, we could have left revenants off of the dark bargain list but that is a significantly less cool approach. -------------------------------------------------------------------------------- 8b846c3b94 | Edgar A. Bering IV | 2021-12-08 23:04:45 +0200 fix: reduce message spam under Yred and Usk -------------------------------------------------------------------------------- 8212ce3e68 | Edgar A. Bering IV | 2021-12-08 23:04:45 +0200 feat: black torch: yredelemnul conduct enforcement -------------------------------------------------------------------------------- 772aeeb350 | Edgar A. Bering IV | 2021-12-08 23:04:45 +0200 feat: black torch: handle yred abandonment correctly Update the abandonment sequence for the new style of yred minion and tidy up the now unused ALLY_YRED daction. -------------------------------------------------------------------------------- 0a07692a02 | Edgar A. Bering IV | 2021-12-08 23:04:44 +0200 feat: black torch: monk and ecumenical altar bonuses Grant the devout some immediate zombies. Monks get filled all the way up to **, which will feel a bit sad in the Temple but oh well. Ecumenical altar grants * worth of zombies, which at D:1-3 is a lot of bodies. Monk + Ecu gives ** but a few more zombies than a monk alone. -------------------------------------------------------------------------------- bf6f545f5c | Edgar A. Bering IV | 2021-12-08 23:04:44 +0200 fix: increase bind soul duration Now that it's a bit more awkward to use, give players a little more time to make the kill, since the zombies are paid out either way. -------------------------------------------------------------------------------- 3254f7a1f8 | Edgar A. Bering IV | 2021-12-08 23:04:44 +0200 feat: ensoul the animals And other less intelligent creatures. Souls are things that living, demonic, and holy creatuers have regardless of intelligence! -------------------------------------------------------------------------------- bf073b50f9 | Edgar A. Bering IV | 2021-12-08 23:04:44 +0200 fix: prevent spectral things from taking stairs -------------------------------------------------------------------------------- 556ba5c09b | Edgar A. Bering IV | 2021-12-08 23:04:44 +0200 feat: don't drop corpses with Yred This is to create the illusion that Yred always reaps when a corpse is dropped. (Yred's reap chance can be improved with faith, so it's a separate roll, but without faith they're both coinflips.) For consistency, both the reaping brand effect and this Yred effect now occur before dropping a hide. You cannot skin a zombie after its been reanimated! -------------------------------------------------------------------------------- 7da1dd8346 | Edgar A. Bering IV | 2021-12-08 23:04:44 +0200 feat: black torch: give full XP for Yred ally kills Commit db2750068a removed the summon XP penalty for all but Beogh and Yred allies, hoping a future rework of these two categories would allow the penalty to remove. The black torch sequence of commits overhauls Yred into a state where full XP is ok. -------------------------------------------------------------------------------- 39e59bd991 | Edgar A. Bering IV | 2021-12-08 23:04:44 +0200 feat: runrest ignore yred messages by default -------------------------------------------------------------------------------- 3d579d9813 | Edgar A. Bering IV | 2021-12-08 23:04:44 +0200 feat: black torch: amulet of faith Amulets of faith increase the chance of reaping a semipermanent follower while worshipping Yred. On removal some of these followers are reclaimed. This means that a Yred worshipper without zombies can remove faith for free, but that's similar to Uskayaw. -------------------------------------------------------------------------------- 98cb3ae26c | Edgar A. Bering IV | 2021-12-08 23:04:44 +0200 feat: grant Yred nightvision at all times (kate) -------------------------------------------------------------------------------- 2e4292cc8c | Edgar A. Bering IV | 2021-12-08 23:04:44 +0200 text: Update Yred's description to reflect the changes -------------------------------------------------------------------------------- 484e03e0cf | Edgar A. Bering IV | 2021-12-08 23:04:44 +0200 text: give more detail in the bound soul desc -------------------------------------------------------------------------------- b0a17c5a12 | Edgar A. Bering IV | 2021-12-08 23:04:44 +0200 feat: black torch: remove yred gifting In Yred's redesigned piety system, the gift timer and its mechanics don't make sense, so the permanent ally gifts are removed. This achieves one of the goals of the redesign, which is to severely limit the use of permanent allies (to only the enslaved soul). -------------------------------------------------------------------------------- 3e152b4d76 | Edgar A. Bering IV | 2021-12-08 23:04:43 +0200 feat: black torch: dark bargain A subsequent commit will remove Yred's passive, permanent gifts. Yred's more powerful servants are really cool as allies and significantly better than plain zombies and spectres. This active ability brings them back as summons, the player trades their zombies for them. This commit also expands the list of Yred servants to cover almost all of genus n, z, V, and W. The exceptions are Vampire Mages (kiku worshippers, or at least too proud to serve), and a couple of monsters that would be more harmful to the player than good allies. -------------------------------------------------------------------------------- 83783ab100 | Edgar A. Bering IV | 2021-12-08 23:03:47 +0200 feat: black torch: zombie piety Move Yred to an alternative piety system, where abilities are paid by offereing up some of the player's reaped souls. Currently this uses Zombies-recently-in-LOS for piety, the aim being a medium-time-scale piety system that builds up over a single floor, but resets on floor transition. Zombies on the floor could also be used, but there are information leak issues with that, plus it encourages closet stashing. The goal is to encourage the player to keep their harvest close at hand! Reaped monsters live on the floor they were created on and disappear when the player leaves the floor (by any means, portal vaults and shafts both count). This gives Yred a medium-scale piety system, lasting longer than Usk but much shorter than a conventional god. -------------------------------------------------------------------------------- 35b79d20d0 | Edgar A. Bering IV | 2021-12-08 23:03:47 +0200 refactor: move the targeting abflags to the high byte -------------------------------------------------------------------------------- 831c365f3e | Edgar A. Bering IV | 2021-12-08 23:03:46 +0200 feat: black torch: passive reaping To replace Yredelemnul's active animate dead abilities, this introduces a passive reaping status, granted at 0*. In this redesign Yred will use zombies as piety, so this is in essence the new piety gain system. Yred reaps both body and soul, from monsters that don't have a corpse (or whose corpse exploded!) the player gets a spectral thing. With the recent change to allow spectralizing demons, Yred can reap their twisted souls, too. The reaped monsters cannot leave the floor they came into being on, and if the player leaves they are dismissed. -------------------------------------------------------------------------------- b4513a33df | Edgar A. Bering IV | 2021-12-08 23:02:13 +0200 feat: new yred: remove injury mirror Injury Mirror was the most awkward of Yred's abilities. It cost a lot of piety if it activated, but getting a big activation meant taking a lot of damage. In comparison, Drain Life gains hitpoints and costs a predictible amount of piety. It's possible there's an injurry-mirror or damage-sharing ability that works with the re-designed Yredelemnul "zombies are piety" principle, beyond just having allies to soak up damage. For now, this gets the axe. -------------------------------------------------------------------------------- 286e7562c3 | Edgar A. Bering IV | 2021-12-08 23:01:25 +0200 feat: black torch: remove yred animation actives This sequence of commits re-designs Yredelemnul. A key feature of the re-design is a passive reaping to replace the animation active abilities, and a necessary first step is to remove them. -------------------------------------------------------------------------------- aa9a639d33 | Perry Fraser | 2021-12-08 15:22:59 -0500 Have deps.py print output of a command on fail Note: probably would be better to use subprocess.run instead of check_output, but that's Python 3.5+ only. I'm not sure what the intended version this is supposed to run on. -------------------------------------------------------------------------------- 92583b6a8d | advil | 2021-12-08 14:25:50 -0500 fix: don't let Usk steal other gods' powers (G-Flex) As discovered by G-Flex, if you have a religious ability quivered and convert to Uskayaw, the quivered ability registers as valid and can be used via quiver commands if you meet its piety threshold. This commit changes `god_power_usable` to do an explicit god check. To support this check I refactored the god_powers static to use a construct-on-first-use paradigm, and added the god field directly to the struct type. -------------------------------------------------------------------------------- 7a5fce4930 | Edgar A. Bering IV | 2021-12-08 16:05:56 +0200 feat: adjust fiend ratios in Coc and Dis New Cocytus and Dis have turned out significantly deadlier than new Geh and Tar. In Cocytus, shard shrikes shine bright, sticking out as an outlier in kills. In Dis, iron giants aren't as much of an outlier, until you notice the second kiler is iron golems, who spawn in bands with an iron giant leader to chuck them at the player. On the other hand, Ice Fiends have barely notched any kills in coc, despite being rather nasty; Hell Sentinels have about 1/3rd the kills of the giant/golem duo, a bit more respectable but not enough to catch up to an outlier. Comparatively, tainted leviathans and hellephants spawn singularly. The former hold their own, racking up kills with a similar rate to tzitzimimeh (who spawn less often). The latter are weaker, but the rarer brimstone fiends top the charts. So this commit reduces the frequency of iron giants and shard shrikes, swapping them with hell sentinels and ice fiends respectively in the table, in hopes of making the four hells a bit more level. -------------------------------------------------------------------------------- 9c4cb8273d | advil | 2021-12-07 15:52:52 -0500 fix: handle db source files with mtime 0 These don't occur normally in the wild, but sometimes people doing reproducible packaging or the like will set all mtimes to 0. When this happens some old db code that treated 0 as an error condition would produce a fairly incomprehensible ASSERT. I suspect this is what is behind: https://crawl.develz.org/mantis/view.php?id=11956&nbn=1#bugnotes https://github.com/crawl/crawl/issues/2276 and the like, though this is not something I've been able to test. I've also rewrote the ASSERT to produce something more like a real error message, though I think it should be much harder to trigger now. Note to packagers: this commit keeps things from crashing, but distributing files with mtime 0 is *really not recommended* unless you are sure to never use a shared db cache directory. If you do, this commit will severely break having multiple versions installed (and I don't think the errors will be any less cryptic that this one). It should meet a typical reproducible build desiderata to use the official file times for db (and most dat/ files) as these are not generated at build time -- they are game data files. -------------------------------------------------------------------------------- 9b0f503c9e | advil | 2021-12-07 14:26:38 -0500 fix: hidpi scaling for action panel div -------------------------------------------------------------------------------- 702cd34d14 | advil | 2021-12-07 14:20:06 -0500 fix: scale action panel qty for hidpi also There must be some better way to do this... -------------------------------------------------------------------------------- 5957592b1c | advil | 2021-12-07 13:40:16 -0500 fix: correct hidpi rendering for the action panel (PleasingFungus) This code assumed that the `renderer` object was pre-adjusted for the device to pixel ratio (which is how it's done elsewhere), but this is not so straightforward to do for the action panel (though it might be cleaner if it could be done). So, do explicit scaling for the device ratio, and remove explicit scaling for mouse cursor position. Should have no impact on non-hidpi/retina devices. -------------------------------------------------------------------------------- b7f16da270 | advil | 2021-12-07 12:22:38 -0500 fix: improve `.prf` file naming/location on DGL builds Two changes, should affect DGL builds only: 1. Set the filename correctly. After game start, it turns out that Options.game.name is the empty string, resulting in the hilarious behavior of everyone on a DGL_STARTUP_PREFS_BY_NAME build sharing a single prefs file named `start--ns.prf`. 2. For a DGL_STARTUP_PREFS_BY_NAME build, put prefs in a subdirectory of the shared directory, rather than the saves directory. The reason for this is that the saves directory on a DGL setup (and maybe any setup using this flag) is versioned, and so the .prf file gets wiped out/ignored on any trunk version change. (An alternative would be having DGL copy the files, but this would be too painful to implement.) -------------------------------------------------------------------------------- 1a2f33fa85 | Nicholas Feinberg | 2021-12-06 18:37:15 -0800 Remove spurious malevolence (some) If an explore trap teleportation fails to teleport the player, don't print a message about malevolence. Still possible to get a spurious message from getting explore shafted after getting non-explore shafted, in principle. -------------------------------------------------------------------------------- a8db75c868 | Nicholas Feinberg | 2021-12-06 18:29:54 -0800 A flaming sword which turned each way... (Sastreii) New tiles for ironbound thunderhulk, Yredelemnul's altar, and the Seraph. -------------------------------------------------------------------------------- 8410daf38b | advil | 2021-12-06 21:19:17 -0500 fix: tweak full hide behavior with minimized action panel The action panel is supposed to hide itself entirely if there's no relevant inventory items (either by happenstance or by configuration), but because of the sequencing this would still show the minimized form -- clicking the + then got rid of the panel. (An easy way to replicate was to set `action_panel =` and `action_panel_show = no`, but it also had similar behavior when dropping items.) This adjusts the sequencing so that the placeholder is handled correctly with no items at all. -------------------------------------------------------------------------------- 8662a715a7 | advil | 2021-12-06 20:00:25 -0500 fix: use longname for explore trap flavor Adding "the" to `shortname` doesn't always work, and `longname` already is designed to be used wherever a definite description should work. Resolves #2270 -------------------------------------------------------------------------------- 6b46d0572a | advil | 2021-12-06 18:36:35 -0500 fix: show wands by default in the action panel Early indications are that it is more confusing than not to leave these out by default. I guess the concern may have been screen space, but we'll see how it goes in practice. -------------------------------------------------------------------------------- 3b2567e0bc | advil | 2021-12-06 18:29:49 -0500 fix: use targeters from action panel This change got lost in the shuffle, I think this is what players will expect though. -------------------------------------------------------------------------------- 57bb0be0ea | advil | 2021-12-06 17:03:44 -0500 fix: fully remove custom parsing code for action_panel_orientation This check can be implemented using a different class, so let's do that. (A previous commit had made the custom parsing code inert by converting the option to StringGameOption, but this had the result that anything other than "horizontal" was interpreted as "vertical" rather than producing an error.) -------------------------------------------------------------------------------- 0724427129 | advil | 2021-12-06 17:03:44 -0500 feat: save action panel scale and font size This also changes the behavior of action_panel_scale so that it is an int percentage, rather than a float -- this allows removing custom parsing code, and makes it so that the ui and settings values are more consistent. (I had apparently already added the IntGameOption part of this in a previous commit, so this commit isn't clean.) -------------------------------------------------------------------------------- 691f867587 | advil | 2021-12-06 17:03:44 -0500 fix: hide action panel for spectators A braver person than me might try to sync the visual state of this with the player rather than hiding, but I'm not going to do that any time soon myself. -------------------------------------------------------------------------------- b232902b95 | advil | 2021-12-06 17:03:44 -0500 fix: hide tooltips when action panel settings is open These aren't readable anyways, because they are under the popup. -------------------------------------------------------------------------------- 090e49b2c9 | advil | 2021-12-06 17:03:44 -0500 fix: apply an upstream fix from focus-trap This reverts ac5a30bc78f08b3 and applies the final upstream fix for https://github.com/focus-trap/focus-trap/issues/103, in particular: https://github.com/focus-trap/focus-trap/commit/fe2b0ad8d03d3a727d7f0d4d1e0ec2b3 f2887577. Since my original fix for this focus-trap has gained a new maintainer and seen a bunch of releases, so possibly we should consider updating, or at least checking if there are specific bugfixes to apply. -------------------------------------------------------------------------------- bbe7356047 | advil | 2021-12-06 17:03:44 -0500 feat: use focus-trap for action panel settings popup This fixes a whole bunch of issues with keypresses going the wrong place, focus not being returned after this closes and just generally being weird, etc. There are still various issues with this commit that are indicated in the comments, where basically (to me at least) browser focus can be extremely mysterious. But the only user-facing one is that I couldn't get tabbing to the buttons to work. Also, rename some html elements. -------------------------------------------------------------------------------- 394b2318f7 | advil | 2021-12-06 17:03:44 -0500 fix: min panel scale to 50%, not 10% With 0.1, it becomes hard (on my display at least) to get back to the panel by right clicking. 50% is about the smallest I could imagine it being usable at, and it makes it possible to get to the settings menu to reset this value. This may need further tweaking. Note that nothing prevents you from setting a lower value in rc if this is useful in some configuration I'm not imagining. (There's a different way to hide it altogether.) -------------------------------------------------------------------------------- a1dc6246e2 | advil | 2021-12-06 17:03:44 -0500 fix: don't toggle settings panel on settings change This fixes a regression introduced when I implemented saving. Because the textinput value is processed on key input, they are unusable if the panel closes immediately. -------------------------------------------------------------------------------- af3cd226fe | advil | 2021-12-06 17:03:44 -0500 fix: change behavior of x when settings open Previously, this would still minimize the panel, but I think it's more intuitive to just hide the settings pane if settings is currently open. -------------------------------------------------------------------------------- ff10334c96 | advil | 2021-12-06 17:03:44 -0500 docs: update action panel entries -------------------------------------------------------------------------------- 551de97837 | advil | 2021-12-06 17:03:44 -0500 refactor: rename consumables panel => action panel I anticipate we may eventually want to generalize this beyond just items. This is an optimistic preemptive rename, since the options names need to be definitive before merge, though I don't anticipate making it handle non-consumables before merge. This change also makes the options names a bit shorter and (maybe) easier to remember. -------------------------------------------------------------------------------- 7743480e9c | advil | 2021-12-06 17:03:44 -0500 feat: save some consumables panel settings in .prf file This provides a persistent memory of whether the user has the panel visible, and what orientation they have it in, across games. -------------------------------------------------------------------------------- d1ef89111a | advil | 2021-12-06 17:03:44 -0500 feat: improvements to webtiles options API This adds a bit more control over some of the set_options calls on the webtiles side, and provides a way for webtiles to send options settings back to the crawl process. It's still all a bit brute force. -------------------------------------------------------------------------------- c9e27d6a74 | Nikolai Lavsky | 2021-12-06 17:03:44 -0500 fix: iron out a few bugs in the consumables panel enhancements This commit fixes the following issues: * The hide button was drawn on top of the first consumable item. * Interaction options - adjust, read/quaff, drop, inscribe - didn't work when called from the describe popup, printing "Unknown command" messages instead. I fixed this by replacing `describe_item_popup()` with `describe_item()`, which executes the selected interaction via `_do_action()`. * It wasn't possible to use unidentified potions and scrolls by clicking them on the panel. I "fixed" this by allowing to quiver unidentified potions and scrolls. This was explicitly disabled in `consumable_action:is_valid()`, but it looks like such consumables work fine from the quiver, so I hope this change is OK. Also, I added an extra check into `consumable_action:is_enabled()` to prevent information leaks. * The cursor for the selected item didn't scale with the panel. This was caused by calls to `draw_icon()` missing a couple of arguments. * There were no item tooltips in Chrome (caused by a missing `var`). Also, there is a new `draw_gui()` helper function for drawing tiles from the `gui.png` tilesheet. It wasn't obvious that the panel has a settings menu, so I added a tooltip for the hide button. -------------------------------------------------------------------------------- bd7f567b5d | advil | 2021-12-06 17:03:44 -0500 feat: consumables panel enhancements (clicking, information) (This is not super well-tested, so I'm not really sure if it is safe to merge just yet.) This commit adds the following features to nlavsky's original consumables panel patch: * click to show/hide; the leftmost icon when visible is always a hide icon. * right click on the hide icon (only) to get the settings popup * right click closes the settings popup also. (This should maybe close * if you click out of this ui, but I wasn't quite sure how to do that.) * tooltip on consumables gives the item name and inventory letter * right click on consumables (when in mouse command mode) opens the describe popup * left click (in mouse command mode) just directly triggers the item. This is implemented via the actions interface, so doesn't need to add much code (as it rests on 6e4aca117). Does this make misclicks too easy? I'm undecided whether this should be minimized or shown by default. It would be really nice if minimization state at least were stored either as a cookie or in the save between sessions. Motivation: The patch as it stands is feature-complete relative to the original goals (including ones I encouraged), but after testing I unfortunately don't think it will feel very complete to end users. The UI has the form of something that should be clickable, so players will expect it to be clickable. (The tiles even look kind of like local tiles menus.) Also, players not familiar with the icons will have a lot of trouble with this: even as a long-time console player I don't know the icons well. Hence the tooltip. -------------------------------------------------------------------------------- 9e6efe1491 | Nikolai Lavsky | 2021-12-06 17:03:44 -0500 Add an in-game configuration menu for the consumables panel This new menu allows changing the panel's orientation, scale, and font size in-game. Also, it allows minimizing the panel into a "+", similar to how the chat window can be minimized. All the changes are done on the client side and not saved between sessions. Also, this commit splits the panel's font option into font_size and font_family, so it is similar to other existing font options. -------------------------------------------------------------------------------- 8d133420af | Nikolai Lavsky | 2021-12-06 17:03:44 -0500 Add a font option for the consumables panel (nojaa3) The pixel font used for displaying the quantities of items is quite small and doesn't scale well. Instead of mimicking the style of the inventory panel from local tiles, it's better to use a system font and allow the player to configure it. This commit adds an option to specify the font for the panel and increases the default font size. -------------------------------------------------------------------------------- f446b847d9 | Nikolai Lavsky | 2021-12-06 17:03:44 -0500 Add an option to reposition the consumables panel (Implojin) To make the panel less intrusive for more screen resolutions and sizes, add the `consumables_panel_orientation` option. When set to 'horizontal' (the default), the consumables panel will be placed along the top edge of the screen. When set to 'vertical', the panel will be placed along the left edge. -------------------------------------------------------------------------------- 637e5f1bb1 | Nikolai Lavsky | 2021-12-06 17:03:44 -0500 Filter consumables on the crawl binary side (advil) This allows to use the same regex parser that the crawl binary uses, which should be faster. Also, it makes the code more portable to other build targets. Now `TilesFramework::_send_item()` does the filtering and sends an extra flag with each item, `qty_field`. If it's either "plus" or "quantity", the web client(s) will show such items on the panel. -------------------------------------------------------------------------------- 58cd58bcfe | Nikolai Lavsky | 2021-12-06 17:03:44 -0500 Remove a couple of obsolete vendor prefixes Firefox v.51+ (2017) and Chrome v.30+ (2013) can handle the unprefixed `imageSmoothingEnabled` canvas property just fine. -------------------------------------------------------------------------------- 972ed031cb | Nikolai Lavsky | 2021-12-06 17:03:44 -0500 Fix web clients not getting updated about the state of XP evokers Whenever an inventory item's item_def changes, the game sends an update to the web client(s). Because information about XP evokers is stored outside of item_defs, there are no updates when XP evokers recharge or lose charges. Fix this by caching the number of charges in the item.plus field (similar to how wand charges are stored) and sending updates when necessary. -------------------------------------------------------------------------------- d76b51a1a8 | Nikolai Lavsky | 2021-12-06 17:03:43 -0500 New consumables panel for Web Tiles The main goal of adding this panel is to give the player a quick and easy way to see all the items that can help them succeed in a fight. It would be ideal to have the full inventory panel, similar to Local Tiles, but there are a couple of problems. The first is a lack of screen space: unless you have a big monitor, the choice is either the monster list (Web Tiles) or the inventory panel (Local Tiles). The second problem is that only about a half of inventory items are useful in fights. A filtered view of the inventory will take less space and present only combat-relevant items. This commit adds a new panel, which can be configured via four options: * `consumables_panel`: types of items to show on the panel; * `consumables_panel_filter`: a list of regular expressions for filtering items out; * `show_unidentified_consumables`: whether to show unidentified scrolls and potions; * `consumables_panel_scale`: allows to change the size of icons on the panel. The panel is displayed in the top left corner, partially covering the top row of tiles on the map. Non-Barachim chars should always have at least one out-of-sight row at the top. For Barachim, the game can show 18 rows of tiles with one out-of-sight row at the top as long as you have 736 pixels vertically. -------------------------------------------------------------------------------- 4b78bf2b85 | Edgar A. Bering IV | 2021-12-06 21:12:23 +0200 docs: changelog through 0.28-a0-1004-g00e6d53462 -------------------------------------------------------------------------------- 00e6d53462 | Edgar A. Bering IV | 2021-12-06 21:00:32 +0200 fix: make mauler's inscription consistent -------------------------------------------------------------------------------- a36b043db1 | Edgar A. Bering IV | 2021-12-06 20:27:03 +0200 feat: refactor eleionoma and fenstrider wands 2dcde036d21 gave eleionoma and fenstirder witches guaranteed wands. However, it didn't give them the ability to use the wands. This was on purpose, the wands were meant as loot for the player, not an extra threat on already mid and high tier monsters. Placing the items into monster inventory was a bit confusing, players expect monsters carrying wands to be capable of using them; especially with the UI efforts put in to announce monster wands. Since these are meant as pure loot, this commit refactors them to drop on death through the same code path that drops dragon hides. This roughly halves (corpse rng) the rate of wand generation in 2dcde036d21, so the charges dropped are doubled to compensate. -------------------------------------------------------------------------------- f00fe891ef | Kate | 2021-12-06 01:09:34 +0000 Don't allow equipping Lear's with Demonic Touch (Lightli) -------------------------------------------------------------------------------- 1d7427ec22 | Kate | 2021-12-06 00:40:18 +0000 Refactor some breath weapon handling Although it could still use some more streamlining. -------------------------------------------------------------------------------- 1aa8e01074 | Kate | 2021-12-06 00:40:18 +0000 Initialise a variable (geekosaur) -------------------------------------------------------------------------------- ce17e19b79 | Kate | 2021-12-06 00:40:14 +0000 Adjust umbra accuracy and stealth handling Grant players (and monsters) immunity to umbra's accuracy reduction if they're wearing the ring of Shadows, and don't give players a stealth bonus in umbra unless they're emitting it themselves, so Yredelemnul worshippers no longer gain bonus stealth from allied profane servitors (while still avoiding the accuracy reduction). -------------------------------------------------------------------------------- b9e9c7b67e | Kate | 2021-12-05 04:26:43 +0000 Add missing canned messages for some cancelled abilities -------------------------------------------------------------------------------- e2d2f24f2d | Kate | 2021-12-05 04:26:43 +0000 Let Divine Exegesis trigger Battlesphere/Demonic Magic Since it's mostly-but-not-quite a real spell. -------------------------------------------------------------------------------- b3aea5d014 | Kate | 2021-12-05 04:25:00 +0000 Refactor spell-based ability failure timing Fixes Demonspawn Damnation, Beogh Smiting, and Sif Muna Divine Exegesis having fail checks before targeting. -------------------------------------------------------------------------------- 0dbd382bca | Kate | 2021-12-05 04:18:00 +0000 Refactor many ability fail checks Abilities should always be targeted before their fail check, so that they can consistently be cancelled before committing to activating the ability. This commit fixes this issue for a large number of abilities, and removes unnecessary fail checks for abilities that should never fail. A small number of abilities still need further refactoring to move the fail check to take place pre-targeting. -------------------------------------------------------------------------------- 27b72ba42d | Kate | 2021-12-05 04:18:00 +0000 Refactor some abilities to use new targeters Most breath weapons (except for Breathe Acid, which has a more complex targeter), as well as a number of simple targeted god abilities (Makhleb Minor/Major Destruction, Zin Imprison, Okawaru Duel, and Fedhas Grow Ballistomycete/Oklob) now use new ability targeters. -------------------------------------------------------------------------------- 557f2b6704 | Kate | 2021-12-05 04:17:54 +0000 Add more ability targeter handling There should now be full support for targeted abilities to share the new targeting code. Some particularly complex abilities might be difficult to refactor, but many aimed abilities such as breath weapons can now start being moved to use the improved targeters. -------------------------------------------------------------------------------- 46d0310cc0 | Kate | 2021-12-04 22:56:01 +0000 Display ability ranges in their descriptions By adding range to ability_def, in preparation for also using it in ability targeters. -------------------------------------------------------------------------------- 956f0ee3d5 | Kate | 2021-12-04 01:58:07 +0000 Make Demonspawn stingers conflict with regular stingers -------------------------------------------------------------------------------- 482a24a92f | Kate | 2021-12-04 01:30:09 +0000 Give Pikel a new title To match his new(-ish) job trading souls of the damned. -------------------------------------------------------------------------------- d7bf75cbcc | advil | 2021-12-03 18:56:15 -0500 fix: don't use html entities in issue template This didn't work, I don't know why I thought it might. -------------------------------------------------------------------------------- 17ad3ed552 | advil | 2021-12-03 18:53:24 -0500 docs: adjust issue template People seem to be surprisingly incapable of reading and following the "replacing or deleting all italicized text" instructions, so make it easier on them by putting this text in comments. -------------------------------------------------------------------------------- 8383568036 | Kate | 2021-12-03 21:54:34 +0000 Slightly increase Dragon Form fire breath power Draconians in dragon form all get to keep their breath weapons and use them at a power of 2 * XL, but other species (and red draconians) used fire breath at a power of XL + 12 instead. Change fire breath's power to also be 2 * XL for consistency. -------------------------------------------------------------------------------- 82fdf335c4 | Kate | 2021-12-03 21:39:05 +0000 Remove an unused function -------------------------------------------------------------------------------- d6bbb3f436 | Nicholas Feinberg | 2021-12-03 10:54:22 -0800 Rename: traumaturge gloves -> Mad Mage's Maulers The lowercase name felt odd, and also conflicted with a Veh title. Neither were large problems, but neither is a rename, so why not? -------------------------------------------------------------------------------- 3775c662fe | Nicholas Feinberg | 2021-12-02 15:55:11 -0800 Put on my wizard hat (Sastreii) New funny hat tile. -------------------------------------------------------------------------------- 1de4e0787c | Kate | 2021-12-02 01:35:24 +0000 Add static targeters for many abilities Making abilities behave more consistently with regards to targeting is a pretty substantial project, but this is a start for many of the simpler abilities. Currently this only supports static targeters - some limited support for regular targeters has been added, but more work would be required to fully support regular targeters (such as more ability flags to indicate how an ability should be targeted). As with spells, a number of abilities with either full-LOS or limited radius effects are added to the default force_ability_targeter option. -------------------------------------------------------------------------------- 134dc7ce2c | Kate | 2021-12-02 01:35:24 +0000 Remove some unused handling for wand trove tolls (Ge0ff) -------------------------------------------------------------------------------- 945c40ea80 | CanOfWorms | 2021-12-01 18:01:05 -0500 Reduce the average number of items in a shop With the pool of permanent items slowly decreasing over the years, shops have shown a noticeable increase in redundancy with permanent items, such as jewellery stores selling multiple copies of a particular amulet type. In addition, shops can generate with up to 16 items, which creates unnecessary UI clutter. Fix this issue by reducing the average number of items in a shop from 4 + 3d12/3 to 4 + 3d8/3, reducing inventory by 2 items on average. This change also counterbalances a gradual increase in the quantity of consumables available, possibly due to the removal of food and gadget shops. -------------------------------------------------------------------------------- 3664467d6e | mgdelmonte | 2021-12-01 11:04:50 -0800 bugfix: lua moninf_get_flags must init flags Function fails until flags are initialized, which for now only happens if you call `is` first, at least once, with a string. -------------------------------------------------------------------------------- 85d866c40e | robertxgray | 2021-12-01 11:01:39 -0800 Exclude hidden spells from the memorisation tab -------------------------------------------------------------------------------- 79cf1ff08c | Brian Power | 2021-12-01 09:32:09 -0800 hint mode: prevent temporary portals being misindentified as downstairs -------------------------------------------------------------------------------- 8735e2aeb5 | Kate | 2021-12-01 16:52:37 +0000 Adjust some deck descriptions Conveniently also prevents gather_items from claiming that there exists a "deck of at one's foes (or, if unlucky, at oneself)." Probably the script should also be reworked somehow to avoid similar things happening again elsewhere in future. -------------------------------------------------------------------------------- dd2fe8c8b9 | Kate | 2021-12-01 16:40:22 +0000 Add some missing books to gather_items -------------------------------------------------------------------------------- 86362df473 | Kate | 2021-12-01 16:18:20 +0000 Remove some unused handling for book trove tolls -------------------------------------------------------------------------------- 0325d80940 | Kate | 2021-12-01 15:43:42 +0000 Remove an obsolete trove message -------------------------------------------------------------------------------- a7f8b01127 | Aliscans | 2021-11-30 18:38:00 -0800 Remove "const" from the parameter to seen_item(). 751e42844d described removing the const from a reference within seen_item() as a "major hack". 11 years later, fixing this involves removing the const from this function and one additional method, with no changes needed for stack_iterator. -------------------------------------------------------------------------------- 8d97f0daa7 | paul | 2021-11-30 17:37:22 -0800 A couple small barding cleanups I was reading some Palentonga code to try to be less bad as them and came across two things that looked like reasonable cleanups. * Comment in acquire.cc suggests only nagas have increased chance to acquire a barding but I think it applies to palentongas too since it's based off you.wear_barding(). * wears_barding() checks the SPF_SMALL_TORSO flag instead of SPF_BARDING which works because they both apply to the same species but I assume is just coincidental. Tested out trying to wear bardings and acquire a bunch on nagas/palentongas and humans as a control and I don't think I broke anything. -------------------------------------------------------------------------------- 880e0f58e3 | Aliscans | 2021-11-30 17:34:00 -0800 Add "flight" to the stash search prefix for armour "of flying". Searching for "fly" returned any equipment which gives flight, but not potions, and searching for "flight" returned potions and artefacts, but not boots of flying (as "find" searches artefact descriptions, but not ego item ones). This change means that a search for "flight" finds everything. -------------------------------------------------------------------------------- d52952e488 | Martin Kennedy | 2021-11-30 17:29:38 -0800 fix: typo: Correct a typo in the description of the Book of Pain -------------------------------------------------------------------------------- 2dcde036d2 | Nicholas Feinberg | 2021-11-30 13:23:02 -0800 Make Swamp a bit more magical Give out guaranteed wands to swamp-exclusive Eleionomae and Fenstrider Witches - on average, about 5 wands per Swamp, about 10% of the total generated over the course of a game. This is intended to be something of a counterpart to the ammo generation in Shoals, and to complement the earlier reduction of wand charge generation. We can increase these numbers farther if need be. -------------------------------------------------------------------------------- cca59f9bd0 | Nicholas Feinberg | 2021-11-30 13:23:02 -0800 Update a hacky comment -------------------------------------------------------------------------------- 34a2937e56 | Nicholas Feinberg | 2021-11-30 13:23:02 -0800 Reduce mid/late-game wand charges Wands can be a fun and exciting tactical tool. Deciding how much to invest in Evocations to power them up is a cool strategic choice, and limited charges make for tough usage decisions. In the late game, though, most characters will have more wand charges than they know what to do with. This feels bad (picking up essentially valueless wand charges, since you'll never use them up), and makes the game less interesting. To compensate, starting around D:8, halve charge generation for most wands (excepting the already-scarce /digging). Following the earlier reduction in throwing ammo generation, this should hopefully keep wand charge limits more relevant into the late-game. -------------------------------------------------------------------------------- 47ffb9280c | Nicholas Feinberg | 2021-11-30 13:23:02 -0800 Erase DROPPER_MID_KEY on pickup So that if you poly a monster (causing it to drop its weapon), the monster picks it up, and you then disarm that monster, they won't pick it up again. -------------------------------------------------------------------------------- f2ff745afe | Nicholas Feinberg | 2021-11-30 13:23:02 -0800 Simplify monster pickup logic Now that monsters don't normally pick up seen items, most of this was irrelevant. (And it broke monsters picking up items when poly'd.) -------------------------------------------------------------------------------- 94437a2481 | Nicholas Feinberg | 2021-11-30 13:23:02 -0800 Revert "Don't let monsters pick up seen items they've dropped" Broke monsters picking up items after poly. No longer needed after bc3f381ebcfc7bc390c3495e054d1fb84b63bb7e. This reverts commit 2d6b87359491cf4d84fe175b5a7c57c56e3f85ff. -------------------------------------------------------------------------------- 2ccdaddb72 | Nicholas Feinberg | 2021-11-30 13:23:02 -0800 Limit explore shafts to 1/branch/game Being shafted is a fantastic experience - it can be hard to survive, but can create truly deep, memorable tactical challenges. However, its charm wears on repeated exposure. Let's limit players to one shafting per branch per game. -------------------------------------------------------------------------------- a7c9fdd7d1 | Nicholas Feinberg | 2021-11-30 13:23:02 -0800 Allow shafting the player on stairs Vaguely buggy not to. -------------------------------------------------------------------------------- 86c161e70f | Nicholas Feinberg | 2021-11-30 13:23:02 -0800 Retheme explore traps Exploration effects are themed as 'traps', but work quite differently from the features. Rather than existing in fixed locations that the player can stumble into, explore 'traps' have a chance of triggering whenever new terrain is revealed. This commonly occurs when the player goes down stairs, or even without any action from the player at all (when a monster opens a door). Players are frequently (and understandably) confused by this - how did they 'stumble into a teleportation trap' without going anywhere? Instead, attribute these events to an unspecified 'malevolent force', spontaneously causing bad things to happen to the player. This is also intended to offer potential for expansion, allowing new and exciting bad things to happen to the player. (What if the player could be shafted from Depths straight to Hell?) -------------------------------------------------------------------------------- 7bd870e236 | Nicholas Feinberg | 2021-11-30 13:23:02 -0800 Add wizmode explore trap command -------------------------------------------------------------------------------- 12e872d363 | advil | 2021-11-30 10:35:46 -0500 docs: edits to attributes section of manual Mostly, better paragraph breaks. -------------------------------------------------------------------------------- ab84650245 | advil | 2021-11-30 10:07:15 -0500 refactor: wrap Dg species gain in a mutation This is much cleaner than species checks, and lets the mutation menu describe the exact statgain behavior. -------------------------------------------------------------------------------- 42eb19b844 | Nicholas Feinberg | 2021-11-29 21:45:58 -0800 Remove get_stat_gain_multiplier (ebering) Rendered unhelpful by 03ef38a5c2cf. A bolder soul than I can add a MUT_BIG_STATS for demigods, if they so desire. -------------------------------------------------------------------------------- 03ef38a5c2 | Nicholas Feinberg | 2021-11-29 21:40:07 -0800 Give 2 points per attribute choice The attribute choices at XL 3, 6, 9 and so on accumulate into interesting decisions. Being able to shift your character toward a given stat by a total of 9 points over the course of a character can make a real impact. However, each individual choice is almost meaningless - 1 point in any attribute has approximately no impact. To make players' choices meatier and more impactful, shift the choice to only occur every 6th level (XL 3, 9, 15, 21, and 27), and to give 2 points per level-up. This is a minor player buff (attributes are recieved earlier, and 1 more point is receieved total), but we'll nerf em in some other way sooner or later. Hopefully this won't be too confusing. Demigods are unaffected. -------------------------------------------------------------------------------- f78dbcb89b | Nicholas Feinberg | 2021-11-29 21:25:10 -0800 Nerf merfolk impalers/javelineers Javelineers are the deadliest enemy in Shoals, and it's a bit odd that they are. A common nice dynamic in Crawl is that the closer you get to an enemy, the more dangerous they are (so closing in to melee is a risk). Occasionally, we toss in a curveball and have enemies that are neutered in melee, eg centaurs. But javelineers are just consistently deadly at all ranges. That's not awful, but it seems like in melee, other enemies should be nastier. So, drop javelineer damage by 5 (from 27 [with javelin] to 22), and remove 2 EV (14 -> 12) and 5 avg HP (78 -> 73). Also pull back on impalers slightly, as a belated response to melee enemy buffs from weapon delay changes. (Damage with trident down from 34 to 31.) This might make Shoals a bit closer to Snake and Swamp in overall difficulty (varying with character, of course), which seems good. -------------------------------------------------------------------------------- 0ea205dc43 | Nicholas Feinberg | 2021-11-29 21:25:07 -0800 Initialize a variable -------------------------------------------------------------------------------- 2ad3dba794 | Kate | 2021-11-30 03:09:06 +0000 Adjust summon spell targeters Summons can be placed on the other side of grates/statues, so update their targeters to reflect this. -------------------------------------------------------------------------------- 04878082bc | Kate | 2021-11-30 03:04:16 +0000 Don't destroy foxfires/ball lightnings when blocked by grates They could be summoned on the other side of a grate (as with all summons), but would then immediately die - let them keep existing as long as they're not fully out of LOS or on the other side of a wall. -------------------------------------------------------------------------------- ced782017d | Kate | 2021-11-30 02:26:33 +0000 Fix Wall of Briars leaking invisible monster information This would be very difficult to actually come across in practice, but sets the ability up better to use a targeter when that gets implemented in the (hopefully near) future. -------------------------------------------------------------------------------- 9f272a1a52 | Kate | 2021-11-30 01:36:17 +0000 Remove an obsolete comment -------------------------------------------------------------------------------- 1e39a6ef00 | Kate | 2021-11-30 01:36:16 +0000 Don't allow activating Yred animate dead with no targets -------------------------------------------------------------------------------- ee6e0bcda6 | Kate | 2021-11-29 22:33:09 +0000 Remove an unused parameter -------------------------------------------------------------------------------- 2f15ad600a | Kate | 2021-11-29 21:04:17 +0000 Display potion/scroll rarity in item descriptions So that it's easier for newer players to learn their relative generation weights and make better reasoning about identification. -------------------------------------------------------------------------------- 216afd96f5 | Kate | 2021-11-29 21:04:17 +0000 Refactor and standardise potion/scroll generation weights To allow unspoiling some information about consumable generation (particularly in cases where it's relevant to identification), give potions and scrolls a more discrete set of weights. -------------------------------------------------------------------------------- 3c35fc0fc0 | Edgar A. Bering IV | 2021-11-29 17:35:52 +0200 text: further tweak a charge description -------------------------------------------------------------------------------- 72e5a758c0 | Edgar A. Bering IV | 2021-11-29 16:58:12 +0200 text: descriptions for some status lights -------------------------------------------------------------------------------- 17860c6496 | Edgar A. Bering IV | 2021-11-29 12:36:30 +0200 fix: decapitalize -------------------------------------------------------------------------------- 12477afec8 | Nicholas Feinberg | 2021-11-28 21:56:15 -0800 Scale up some tiles (Sastreii) New 'mundane' dragon armour tiles. -------------------------------------------------------------------------------- 140ffa10cf | Edgar A. Bering IV | 2021-11-28 20:28:55 +0200 fix: clarify spell danger prompt (lukem1234) Closes #2230 -------------------------------------------------------------------------------- 4f8b84809c | Edgar A. Bering IV | 2021-11-28 20:22:59 +0200 fix: only merge options different from default (ardl) The feature in 843f935 was implemented by adding merge functionality to the game_option class. Unfortuantely, this led to defaults being loaded from init files (instead of included in the binary) being clobbered as they were not set in the temprorary perf-loaded options. This changes the implementation of merge to only merge entries that were loaded in the source game_options object. The buggy behavior was most notable in how it interacted with the auto_exclude default. -------------------------------------------------------------------------------- 61a4acea3e | Edgar A. Bering IV | 2021-11-28 20:22:23 +0200 fix: remove a duplicate entry -------------------------------------------------------------------------------- bc3f381ebc | Nicholas Feinberg | 2021-11-27 10:51:57 -0800 Remove DROPPER_MID from most monster-dropped items I'm moderately sure this wasn't used for anything. -------------------------------------------------------------------------------- 6175104b25 | robertxgray | 2021-11-27 18:16:04 +0100 Autoconfigure android-project/local.properties -------------------------------------------------------------------------------- 71c9695731 | robertxgray | 2021-11-27 18:15:49 +0100 Improved touch screen and small layout experience - Tooltips disabled by default on Android - Keep tabs open when an element is selected - Keep tabs open on resize - Adjust tabs to cover only the map area - Increase transparency in inventory and monster tabs - Stop the inventory tab from showing when another tab is hidden -------------------------------------------------------------------------------- b588e42d88 | Nicholas Feinberg | 2021-11-27 08:49:40 -0800 Remove an antique ID call Monster weapons are now just all auto-ID'd on sight. -------------------------------------------------------------------------------- c5f9a05f81 | Nicholas Feinberg | 2021-11-27 08:49:40 -0800 Flatten monster_drop_things This function is ridiculous. -------------------------------------------------------------------------------- 6df31dea4b | Kate | 2021-11-27 16:24:48 +0000 Fix MP regen rate not being recalculated on amulet removal And let the amulet remain attuned while melded. -------------------------------------------------------------------------------- 3387f7d204 | Kate | 2021-11-27 16:24:48 +0000 Fix some amulet equip/unequip handling Removes some obsolete checks for activating amulets of reflection/acrobat, and makes them also display messaging consistently when unmelding. -------------------------------------------------------------------------------- dde70e7af4 | Edgar A. Bering IV | 2021-11-27 10:20:45 +0200 feat: nerf flame wave damage Flame Wave did calcdice_calculator<3, 10, 2, 5> damage for each blast (at a total cost of 6mp over 3 turns) Compare to some other level 4 damage spells: - Hailstorm calcdice_calculator<3, 10, 1, 2> (more awkward targeting, costs 12 mp to fire for 3 turns) - Mystic Blast calcdice_calculator<2, 6, 1, 3> (also has knockback (for possible knockback damage), easier targeting; still 12 mp to fire for 3 turns) - Sticky Flame calcdice_calculator<2, 3, 1, 12> (also sets them on fire for a time, doing 2d4 per turn extra damage; initial sticky flame damage plus 2 turns of fire damage is the calcdice plus 4d4 for 4mp over 3 turns) At equal training, flame wave can do as much as half the damage of 3 casts of starburst, for 1/3rd the mp. There's targeting awkwardness and the hazard of being adjacent but this damage is just really really good. With 3 dice it is also consistent in its damage output. So let's nerf it to calcdice_calculator<2, 8, 1, 5>. -------------------------------------------------------------------------------- 843f935a50 | advil | 2021-11-26 16:06:07 -0500 feat: save `default_manual_training` in `.prf` files This is more of a proof of concept commit than a complete implementation of this idea that can be generalized immediately to tons of options, but it seems to work well enough and provides a path towards generalized option serialization in .prf files. I chose `default_manual_training` because it already has a UI element that players might reasonably expect to be saved, it involves no custom parsing (just a simple `BoolGameOption`), and because if something goes wrong with the .prf files for it, it doesn't seem too disastrous (because the it's ignored after game start). The .prf files are already used to store newgame options, and are parsed using game_options reading code already, so this change was a matter of figuring out how to coherently write non-newgame options, and pull them in to the Options static in a sensible way. Some notes: * If a player has an option explicitly set in their rc file, it will override the .prf version. This part is written in a general way so it will extend to new serialized options. * The general code only works for options implemented using a GameOption object. Getting it to work for others will need a more effort, including custom handling in the `merge` function and changes to the tracking of what was loaded from an rc. Possibly more options should be converted to `GameOption`s rather than more custom handling being added. * Serialization code is extremely not general, this would be easy + tedious to generalize so I will leave that for when more options are added. * A bunch of boilerplate code is moved to game-options.h. This stuff definitely has the feel of something that ought to be templated, but this doesn't work with the polymorphism needed for GameOption in any way that I have yet found. This commit also adds a generic function to set one GameOption object from another, with a somewhat ugly implementation. (Also should be templated, but I haven't come up with a way yet.) * Most other options will need UI added to do something like this. * It's possible that we should add a game menu command that lets you reset the .prf file before adding too much more to this. -------------------------------------------------------------------------------- 629283d8f3 | advil | 2021-11-26 16:05:36 -0500 feat: api to track GameOptions modified by rc settings This provides a way of checking whether a GameOption subclass was explicitly modified by a player's rc. The eventual point of this to ensure that explicit settings can override an autosaved preference. Obviously, because this is tied to use of GameOption, it does not work on custom-parsed options handled in read_option_line, nor on options that are stored on the lua side. It also doesn't track any changes to member variables of game_options made directly. -------------------------------------------------------------------------------- a3687e240c | Nicholas Feinberg | 2021-11-26 08:46:49 -0800 Fix webtiles AC light for Ignis (Lici) I dislike this code a lot :) -------------------------------------------------------------------------------- eabae20b52 | advil | 2021-11-26 09:18:48 -0500 refactor: unify some seed display code Centralize this in one function with a single approach to checking for player death. -------------------------------------------------------------------------------- eeb059e727 | advil | 2021-11-26 09:18:48 -0500 refactor: lightly generalize newgame prefs code This is just trying to make this options serialization code better, in preparation for later more involved changes. * turn newgame_def-specific code (which is, currently, all of this) into a method on newgame_def * write prefs file on any save * but don't rewrite unless there are changes -------------------------------------------------------------------------------- 1d79628fcd | advil | 2021-11-26 09:18:48 -0500 fix: remove an old #ifdef for seed preferences This originates from when online games didn't support seeded play. Now most servers do in some form and several servers enable the seeded play popup. Removing this #ifdef lets the seed field in this popup be prepopulated with the seed of a recent ended game in online play. -------------------------------------------------------------------------------- 0fd3a81354 | advil | 2021-11-26 09:18:47 -0500 refactor: remove an unused build conditional As far as I can tell this #define and its conditionals have never been used by anyone. The only use case anyone has come up with is shared accounts (geekosaur), but if this is an actual use case that someone wants I'd rather implement it in a different way (e.g. CLO or just a regular rc option). -------------------------------------------------------------------------------- d5e1996cdb | Nicholas Feinberg | 2021-11-25 08:28:35 -0800 Totally blork our tiles (Sastreii) -------------------------------------------------------------------------------- f5b72a5aab | Nicholas Feinberg | 2021-11-25 08:09:51 -0800 Fix Mindburst damage I believe this was broken since monster /disintegration use was first added in 65c148fa03d (2007). -------------------------------------------------------------------------------- a419b9d3f4 | Kate | 2021-11-25 14:09:07 +0000 Adjust gloves of infusion messaging To make it clear that normal gloves of infusion do work for Djinn. -------------------------------------------------------------------------------- 334d32066b | Kate | 2021-11-25 13:58:22 +0000 Add some unrand equip/unequip messages -------------------------------------------------------------------------------- 4693fef7fb | Kate | 2021-11-25 13:57:22 +0000 Fix Djinn instakilling themselves with traumaturge's gloves Luckily they would also crash at the same time as killing themselves, but either way seems less than ideal - prevent the unrand from working for Djinn instead, and adjust pay_mp to consistently use an ASSERT that would normally be used when paying HP for things. Also fixes Djinn crashing when using normal infusion gloves at 2 HP or less. -------------------------------------------------------------------------------- e90d3d521c | Kate | 2021-11-25 12:52:57 +0000 Fix a typo -------------------------------------------------------------------------------- 0b5b508569 | Nicholas Feinberg | 2021-11-24 22:32:20 -0800 Let Nikola hurl Reverts 87e75285439, since it seems very goofy and not particularly pointful. -------------------------------------------------------------------------------- a42776352a | Nicholas Feinberg | 2021-11-24 22:32:07 -0800 Rework archery ego into hurling The archery gloves ego has always been an odd outlier. Giving +slaying to 'ranged combat' (bows, slings, xbows, and throwing) is simultaneously broad and narrow. Why do only those types of combat get an ego to bolster them? Why aren't there gloves of slashing for long and short blades, or gloves of magma for fire and earth magic? We may go that way some day, but for now, let's refocus. Gloves of hurling (replacing gloves of archery) give a bonus exclusively to throwing. Recent reductions to throwing item generation have left throwing weapons in a distinctive position, as a strong but limited-supply killing method. Giving a bonus to that *specifically* could potentially change players' tactics, encouraging them to try hurling a bit more. And that's fun! -------------------------------------------------------------------------------- d9240322ae | Nicholas Feinberg | 2021-11-24 22:28:53 -0800 New unrand: traumaturge's gloves The traumaturge's gloves spend your *entire* MP every time you hit any enemy in melee, giving a proportional bonus to damage. To make them less obnoxious to use, they get RegenMP, and to make them less interesting for characters who don't actually want to hit stuff, they have Int-4. This is in the same vein as rampaging boots and the seven-league boots - they're super-infusion gloves. In practice, I found them to be very funny. Possibly they encourage kiting too much and will need to be cut, but I do want people to get a chance to try them out first. -------------------------------------------------------------------------------- f4b206033c | Nicholas Feinberg | 2021-11-24 22:28:44 -0800 New gloves ego: "infusion" A riff on the old Charms spell of the same name, gloves of Infusion give +0,+4 slaying (that is, +0-4 pre-AC damage per hit) on melee attacks, in exchange for 2 MP spent per hit. This will be appealing for many characters, but will you regret being stuck at 0 MP in a tight spot? Maybe! Numbers are very preliminary. In testing, my main concern was whether it'd cause too much resting, but it didn't seem to be worse than 'caster' characters already have it. Excited to hear feedback from others. -------------------------------------------------------------------------------- cd63401287 | Nicholas Feinberg | 2021-11-24 17:21:57 -0800 Shift vampire knight weapons left -------------------------------------------------------------------------------- c41cc7542a | Nicholas Feinberg | 2021-11-24 16:40:38 -0800 Add some new tiles that really suck (Sastreii) New vampire, vampire knight, and vampire mage tiles. -------------------------------------------------------------------------------- 12fdbb3a91 | Nicholas Feinberg | 2021-11-24 16:33:15 -0800 Buff amulets of magic regeneration The amulet of magic regeneration is generally considered fairly weak. 0.25 MP/turn is not nothing, but it compares pretty poorly to other amulet effects, even for characters that should like it. Adjust it up to 0.4 MP/turn. This is exactly half of the 0.8 HP/turn that regen effects give, which is nice aesthetically. -------------------------------------------------------------------------------- dd814f33f1 | Nicholas Feinberg | 2021-11-24 16:27:46 -0800 Re-adjust Regen properties In c8f691b2cc7, effects that granted Regen (the amulet, artefacts, etc) went from giving 0.4 HP per turn to 1.0 HP per turn, a 2.5x multiplier. Having played with the new, stronger version for a few months, it's clear that high levels of regen are stronger than I anticipated. As such, this commit reduces regen somewhat back down to 0.8 HP per turn. This is still double what it was before c8f691b2cc7, so I expect it should still be an exciting and powerful property, but it should take a little more work to stack regen to such ludicrous levels that enemies have difficulty harming the player. The Robe of Vines goes from 3 HP/turn to 3.2 HP/turn, and loses a point of enchantment in exchange. Most other sources of regen follow the change, excepting Trog's Hand and Powered by Death, which go back to their old flat values (no longer pegged to the regen pip). -------------------------------------------------------------------------------- caa4c314a1 | Nicholas Feinberg | 2021-11-24 16:23:04 -0800 New Ignis ability: Fiery Armour Replacing Sea of Fire for the 'cheap ability' slot, Fiery Armour is a proactive defensive ability, complementing Foxfire Swarm (a reactive offensive ability) and Rising Flame (a reactive escape). When used, Fiery Armour gives +7 AC and 2d4 fire damage to melee attackers. It lasts for somewhere around 120 turns, to help it feel better compared to Foxfire Swarm - the latter straight up wins a fight, so it's nice if Fiery Armour can help with a few fights. (It also provides an incentive not to dawdle, which is fun!) There's a special message when you use it with Ozo's Armour, Icemail, or Ice Form, as a bit of a lampshade. -------------------------------------------------------------------------------- 68fc8d02d3 | Nicholas Feinberg | 2021-11-24 16:08:43 -0800 Remove Sea of Fire Ignis's Sea of Fire was a very visually cool effect, but it had no clear purpose. It wasn't clear when players should use it - the most common experience was for players to use it once, get trapped by it, feel extreme regret, and never use it again. Let's replace it with something with a greater clarity of purpose. -------------------------------------------------------------------------------- 2f522a9c0a | robertxgray | 2021-11-23 23:15:57 +0100 New virtual keyboard layout - Less redundant and closer to the standard US layout. - Function keys added, so they can be used for macros. - New colors to highlight important keys. - Keys used for movement have been labeled with arrows. -------------------------------------------------------------------------------- 796cbd3a86 | Edgar A. Bering IV | 2021-11-23 23:44:01 +0200 text: two new Donald speech lines -------------------------------------------------------------------------------- 9e5967653d | Edgar A. Bering IV | 2021-11-23 23:32:31 +0200 text: add a slimify quote (Ge0ff, 12661) -------------------------------------------------------------------------------- 59e3c9d8a8 | Kate | 2021-11-23 21:16:12 +0000 Don't crash on alerting dead monsters to acid damage (#2240) Closes #2240. -------------------------------------------------------------------------------- 0406aca7d3 | Nicholas Feinberg | 2021-11-22 17:05:57 -0800 Update mut math -------------------------------------------------------------------------------- 2a66bcaeff | Kate | 2021-11-23 00:06:24 +0000 Add a Jiyva ability: Oozemancy (acid ramparts) With Slimify as the only active ability, Jiyva could use something new to spend piety on, especially since the god is intended to have rapid piety gain. Oozemancy is granted at 3*, has a relatively high piety cost, and temporarily turns nearby walls (within radius 4) into slime-covered walls. It has no movement restriction like Frozen Ramparts, but slime walls don't deal damage outside line of sight. -------------------------------------------------------------------------------- 5b0ebec07e | Kate | 2021-11-23 00:06:24 +0000 Increase Slimify's MP and piety costs Jiyva has rapid piety gain, and Slimify is mostly an irresistible instant kill, so it should be pricy. -------------------------------------------------------------------------------- 738adcbc29 | Kate | 2021-11-23 00:06:24 +0000 Move some Jiyva passives earlier Move rCorr from 3* to 2* (since it's mainly flavour, and to free up the 3* slot for a new active ability), and move the jelly-on-hit effect from 6* to 5* (since 6* is generally reserved for one-off capstone effects or gifts. It was also already displayed as available at 5* despite not yet being in effect). -------------------------------------------------------------------------------- 12af580f8b | Kate | 2021-11-23 00:06:20 +0000 Change Jiyva's piety gain to be from exploration Gaining piety from sacrificing items was flavourful but didn't function well in practice, since it encouraged going back to old floors upon converting to Jiyva to sacrifice junk items and gain piety quickly. Jellies eating items becomes strictly a conduct to encourage moving forward quickly, and Jiyva's piety gain is changed to be from normal exploration, but at a much faster rate than other gods to compensate for the fact that the god is generally picked up late. Since jellies eating items is now a conduct rather than a method of piety gain, also remove the ability to call a jelly, and don't immediately place a jelly on conversion. -------------------------------------------------------------------------------- 60ee69b403 | Kate | 2021-11-22 21:08:41 +0000 Make Jiyva's Cure Bad Mutation a passive part of mutation gifts Being able to remove mutations at will doesn't fit with the god's theme, overlaps with Zin's specialty, and isn't necessary with the god no longer gifting bad mutations. Instead increase the chances of Jiyva removing bad mutations via mutation gifts, to help dealing with mutations from external sources (since potions will be less effective with big mutation sets). -------------------------------------------------------------------------------- c8825b9f11 | Kate | 2021-11-22 21:08:41 +0000 Don't let Jiyva gift bad mutations Since having a bad mutation maxed out by a god gift would be particularly unpleasant (or act as a large piety tax requiring repeated use of the ability to remove it again), just grant good/slime mutations. -------------------------------------------------------------------------------- f2b78a14d2 | Kate | 2021-11-22 21:08:25 +0000 Update some options_guide entries -------------------------------------------------------------------------------- cca88958be | advil | 2021-11-22 09:31:19 -0500 fix: don't allow spell memorisation in tiles map view Another extension of 904a573f8967; spell memorisation isn't designed to happen in this UI mode and so while it *seems* to work, I suspect there could be unintended consequences. This should be everything that takes time disabled. This commit also adds an i_feel_safe check for whether memorise buttons are enabled. (I believe before it would have prompted, but just outright disabling them gives clearer UI I think.) -------------------------------------------------------------------------------- 2ecf54ff0b | advil | 2021-11-22 09:19:49 -0500 fix: disable tiles item buttons in view map mode This extends 904a573f8967; don't allow things to happen in map mode that aren't designed for it and may have buggy behavior. This commit isn't very subtle, just check map mode directly. Resolves #2236 -------------------------------------------------------------------------------- f7baa44570 | advil | 2021-11-22 08:50:51 -0500 fix: add a missing negation Missing since 70de9b6695476e, but I guess no one uses the "cast a spell" button itself. 904a573f89 made spell-specific buttons enabled or disabled depending on whether casting is allowed via this check, revealing the bug. Resolves #2237 -------------------------------------------------------------------------------- 6e5f11bd55 | advil | 2021-11-21 23:12:20 -0500 fix: improve the ASSERT from 4f857bc58ec395c Don't crash during tests or scripts. -------------------------------------------------------------------------------- 805c5ecd05 | Nicholas Feinberg | 2021-11-21 19:35:07 -0800 Fix bribe branch costs Broken in 2eadbcdadce4. -------------------------------------------------------------------------------- 5e322aebe8 | Kate | 2021-11-21 21:26:22 +0000 Remove a reference to Zin divine sustenance When save compat is broken, at least. -------------------------------------------------------------------------------- 4f857bc58e | advil | 2021-11-21 15:38:21 -0500 fix: don't fire tracers on LRD validity check This is a somewhat nasty bug that triggers when returning to the main menu after playing; because there is still a map kicking around, when trying to check if LRD is valid, the LRD setup code fires off some tracers in that map, leading to bad memory access. I'm 90% sure this is without manually inserting the ASSERT here. (But llvm is usually "better" about not crashing on bad memory accesses.) My approach here was pretty brute force: I didn't see how to make the LRD setup code safe so I just force-validated it. Even on the clean startup case, it's still interacting with suspect memory regions, even if it never fires tracers. Possibly env stuff ought to be cleared up in _reset_game() so that the global state during startup steps is more predictable. In general, I wonder about the rest of the monster spell setup code triggered in this init step... Resolves #2168 (probably) -------------------------------------------------------------------------------- 61c88513d0 | advil | 2021-11-21 14:32:11 -0500 fix: set ui_root.needs_paint after a resize This resolves #2218. The proximate issue seems to have been that resizing with ctrl-command-f both exits the menu and triggers a resize event, which is handled immediately when pump_events is next called during; this is immediately on displaying the game menu. Something about being the first event was messing up the repaint. I'm not sure what. Beyond that, I think there is still something weird going in the ui.cc code for this case: in my testing on a large monitor I see a brief flash of a very strangely resized window before the new size takes hold. Unfortunately I don't understand ui.cc well enough to have any sense of what might be doing this. -------------------------------------------------------------------------------- 88c7259194 | advil | 2021-11-21 13:36:48 -0500 feat: turn the map view button into a toggle Right now this command uses the same tile as CMD_DISPLAY_MAP; possibly someone could add an x to it or something to differentiate them. -------------------------------------------------------------------------------- 904a573f89 | advil | 2021-11-21 13:36:48 -0500 fix: disable most tiles buttons in map view All sorts of stuff was semi-clickable in map view, e.g. you could cast spells or use abilities via local tiles buttons. This commit tries to be more consistent about it: anything that works in KMC_LEVELMAP can work, and anything that doesn't, can't. It's possible that this disables some useful stuff that can work (even if it isn't designed to) that tiles players will be used to? We'll see if there are complaints... -------------------------------------------------------------------------------- 820883e265 | advil | 2021-11-21 13:36:27 -0500 fix: handle button commands in map view (local tiles) There were two interrelated bugs here: command handling was simply unimplemented (a key was returned by tiles code, but the widgetified version of the map UI ignored it), and any clicking (including on buttons) was interpreted as dungeon clicking, moving the cursor to a clamped map position. I guess this probably just fell through the cracks when the map view was widgetified. At least because of the new API, we can now pass the command directly to the map view, rather than needing to pass a key. I've implemented this with an unappealing dynamic_cast, someone may want to do something nicer here. Resolves #2087 -------------------------------------------------------------------------------- b27f3f0c18 | advil | 2021-11-21 10:12:49 -0500 feat: refactor debug build autowiz with an options default Previously, when working with a debug build, to get a truly non-wizard character you had to rebuild entirely (either switch to a different build, or comment out the wizard mode setting in startup.cc). Suppress wizmode is still not perfect, and it is useful to be able to start a regular character from time to time. This commit reimplements the auto-wiz feature so that instead of a debug build simply forcing wizmode directly on character creation, a debug build defaults the `wiz_mode` option to `yes` instead of `no`. (N.b. this doesn't override the logic in a dgamelaunch build.) This lets a debug build respect `wiz_mode=no` (or `never`) in an rc file. -------------------------------------------------------------------------------- b23a865559 | advil | 2021-11-21 10:03:29 -0500 fix: trigger tiles layout on chaging wizmode Now that wizmode activates some abilities, this needs to relayout each time status of wizard or suppress_wizard changes. -------------------------------------------------------------------------------- bdc701c526 | advil | 2021-11-21 09:56:15 -0500 fix: generalize some relayout code from rings In the past, it seems that evokable abilities were mostly confined to rings, and so the code that checked for ability changes was only done when putting on a ring. This commit generalizes the (extremely brute force) check so that it happens whenever any equip is added or removed -- so this should handle scarfs of invis, unrands that have abilities, etc. Resolves #1754 -------------------------------------------------------------------------------- ab553e919e | advil | 2021-11-21 08:14:08 -0500 fix: bring morgue_dir more in line with save_dir For some reason morgue_dir is set and initialized in a slightly different way, so the changes in 381dff06d7c didn't affect morgue_dir quite right. This unconditionally resets it to its default value if `reset_paths` is called. For unclear reasons, this one will get overridden by SysEnv in fixup_options, and I have left this fairly ancient behavior intact. Further resolves #2192 -------------------------------------------------------------------------------- c8d7bad45d | Kate | 2021-11-21 00:16:52 +0000 Add messaging for gaining Jiyva's bonus regen Unfortunately can't be handled via the normal gain/loss messaging since it also has special handling for display on the ^ screen. -------------------------------------------------------------------------------- 7dab3e9f5c | Kate | 2021-11-21 00:16:52 +0000 Remove a reference to Jiyva stat shuffling -------------------------------------------------------------------------------- ae16bb6c82 | advil | 2021-11-20 14:42:41 -0500 feat: reveal init.txt in finder on mac This is a super quick, OS-specific, implementation of this feature, in part just because I realized that on mac it is a 1-liner. It is triggered from the game menu. As noted in the comments: * someone should implement this at least on windows, maybe linux if that's feasible. Probably won't be me though. * might be handy from the main menu somehow, though not in that menu directly (it has no more space). So I'm not sure what the UI is exactly. -------------------------------------------------------------------------------- 8add94bf39 | Kate | 2021-11-20 17:46:13 +0000 Give living spells a summon cap of 6 Mainly to prevent them from filling up LOS in cases where they're sticking around for a few turns without being able to fire for whatever reason. -------------------------------------------------------------------------------- 29138dbd66 | Kate | 2021-11-20 17:46:04 +0000 Allow living iceblast spells to blow themselves up again With ugly special-casing in beam.cc rather than by marking them as non-threatening monsters. -------------------------------------------------------------------------------- c155b14c34 | Kate | 2021-11-20 17:02:34 +0000 Don't mark living spells as non-threatening Since they are definitely dangerous, and marking them as non-threats causes targeting issues with some spells. -------------------------------------------------------------------------------- 381dff06d7 | advil | 2021-11-20 11:32:37 -0500 fix: resequence rc directory setting Previously, when setting `crawl_dir` in an rc, the following sequence of events would happen: 1. crawl_dir gets set to a default value (e.g. a ~/Library directory on mac.) 2. reset_options initializes save_dir based on this crawl_dir. 3. crawl_dir changes (stored in static SysEnv) 4. a. maps are loaded, des cache is built in the save_dir set in 2 b. game menu is also initialized from this save_dir 5. player starts game, triggering another reset_options. Now the save_dir is set based on the crawl_dir in 3, instead of 1. This is what we want, but: 6. No des cache in the current save_dir, so the game crashes any time levelgen is triggered The main change in this commit is to do the path resets from step 2 any time `crawl_dir` is set, so that the save_dir can't get out of sync like this. There's a bunch of refactoring that I did while working on this, some of which didn't end up being necessary but I kept because it seemed cleaner. This commit also explicitly rechecks for a data directory if crawl_dir changes (since the data directory could be under crawl_dir, though it's not in most cases I think). The overall directory handling code is pretty insane but it's covering so many special cases across multiple platforms that it's a bit hard to refactor safely. This commit also adjusts the documentation. Partly this is to indicate this change (since setting save_dir before crawl_dir gets overridden), but partly this is just to make it more accurate. Unfortunately I couldn't really even figure out how the defaults are interpreted outside of mac, so more accurate -> more vague in this case. Someone could try to make this more specific, especially for the defaults for `crawl_dir` and `macro_dir` -- it would be best to explicitly list the defaults for each of win/mac/linxu. I think based on the report in #2192 it might use the current directory on linux for crawl_dir? Resolves #2192. -------------------------------------------------------------------------------- ba3a78600c | Kate | 2021-11-20 15:33:36 +0000 Shorten some mutation descriptions So that they still fit on one line with the new mutation menu interface. -------------------------------------------------------------------------------- aee5879d26 | Kate | 2021-11-20 14:58:06 +0000 Fix Manifold Assault targeter leaking invisible monster locations -------------------------------------------------------------------------------- 3304299650 | Kate | 2021-11-20 14:58:06 +0000 Print wounds when monsters collide with each other Usually via Gell's Gravitas, so that it's easier to see what the spell's effects are. -------------------------------------------------------------------------------- 241ead5b78 | Edgar A. Bering IV | 2021-11-20 13:39:25 +0200 fix: destaticify mangrove colour We really don't want a global colour for the mangrove feature picked by the values _etc_mangrove is called with the first time it gets invoked. -------------------------------------------------------------------------------- 80cf8599ee | Nicholas Feinberg | 2021-11-19 20:38:51 -0800 Fix amnesia/negative levels (CarefulOdds) When amnesiaing a spell with negative levels remaining (e.g. after breaking an Ashenzari Spellcasting curse), print the correct number of spell levels you'll have left afterward. -------------------------------------------------------------------------------- 5db232d3bc | Nicholas Feinberg | 2021-11-19 18:40:05 -0800 Give Jiyva passive HP and MP regen Following on from 3b57ee21721, give Jiyva passive HP and MP regen. This is intended to synergize with the item-eating conduct to encourage the player to rush through levels before all the good stuff is eaten (using fast regen to minimize resting time), while also being an overall buff to the god's strength. (As a god that's somewhat harder to get than normal temple gods, Jiyva should be strong once reached, especially earlier.) This currently gives one pip of HP and MP regen (1 hp/turn, 0.25 mp/turn) at 1* piety, scaling to double that at 6* piety. Numbers can be adjusted as appropriate. -------------------------------------------------------------------------------- facf16e111 | Nicholas Feinberg | 2021-11-19 18:40:05 -0800 Make J give mutations in bursts Jiyva has historically given very frequent mutation changes. Their frequency made them less impactful: since they vanished so quickly, their impact on play was generally limited. Instead, make J give mutations at roughly 1/4th the frequency. In each gift, all mutations have a 25% per-level chance of losing a level. Then 4 new mutation levels are given out, proceeding through one mutation at a time before maxing it out and choosing another. This will let players explore the top-level effects of muts (normally unseen) and enjoy them for a while before they fade away. On average, going from 60 to 200 Jiyva piety caused 3-4 of these gifts. I expect we'll want to tweak this frequency in response to playtest feedback. -------------------------------------------------------------------------------- 53b1d5cb3f | Nicholas Feinberg | 2021-11-19 18:40:05 -0800 Remove Jiyva hp/mp from item eating Jiyva healing from item eating was strong and flavourful, but encouraged goofy tactics, like carrying around stacks of arrows to drop one-by-one for healing. We can provide both strength and delicious jelly flavour by other means, so let's. -------------------------------------------------------------------------------- 05814a4f1e | Nicholas Feinberg | 2021-11-19 18:40:05 -0800 Small cleanups Fix a typo & remove a duplicated check. -------------------------------------------------------------------------------- 278d75afea | advil | 2021-11-19 20:20:23 -0500 fix: correctly interpret `~` in crawl_dir etc In most cases, this was just getting used for its string value, leading to the creation of subdirectories named `~/`, pretty amazing. For some uses of `SysEnv.crawl_dir`, `_resolve_dir` was getting correctly called on subdirectories, leading to probably inconsistent directory patterns, but I'm not sure of the details. The directory handling code here is very confusing. -------------------------------------------------------------------------------- 754df0dcc8 | advil | 2021-11-19 20:09:53 -0500 fix: correctly handle map_load_exception for temple generation This can happen if something is wrong with the des cache, or the des location. Without this fix it triggers uncaught exception behavior, probably a cryptic abort trap. -------------------------------------------------------------------------------- 61ead9eb7d | Nicholas Feinberg | 2021-11-19 15:05:37 -0800 Remove minotaurs from Depths (again) -------------------------------------------------------------------------------- 8af684f10f | hellmonk | 2021-11-19 15:05:33 -0800 Improve the monsters in some overflow vaults Overflow vaults with a uniq_altar tag can place in Depths. Some of these vaults place very easy monsters, like goblins with spears, which are suitable for the overflow altar range but not suitable later. This commit either adds an alternative monster set for Depths placement or limits the range of the vault to dungeon only, depending on which method seemed best. Closes #2215. -------------------------------------------------------------------------------- 8cecda6153 | Nicholas Feinberg | 2021-11-15 17:35:42 -0800 Give orb guardians a glow up (Sastreii) -------------------------------------------------------------------------------- 58c29a6370 | Nicholas Feinberg | 2021-11-15 14:29:57 -0800 Fix Degeneration & Xom polymorph These were broken in 6ee961360c27e and functioned identically to /poly. -------------------------------------------------------------------------------- e64d6db94f | nicolae-carpathia | 2021-11-14 23:02:05 -0500 Add a selection of vaults to various places (#2172) * Add a diverse assortment of vaults in various places Add vaults of all kinds. Vaults for ecumenical and overflow altars, shop vaults, floats, mini_features, mini_monsters, a serial vault, a trove layout, a Hell entry, and vaults for Crypt, Lair, and Hell. They're all here and ready for visitors. Next time I should really break these up into separate pull requests. -------------------------------------------------------------------------------- 41a590f754 | Nicholas Feinberg | 2021-11-14 17:43:17 -0800 X gonna give [a new tile] to ya (Sastreii) New orb guardian tile. We'll always remember the original, and by the original I mean the original original one that was literally a floating fetus. -------------------------------------------------------------------------------- d8f344a91d | Implojin | 2021-11-15 00:30:19 +0000 fix: really end engulf upon polymorph At present, the bug described in #1935 still occurs in trunk. dd09596130 made an attempt to fix this, but clear_far_engulf() only applies to non-adjacent monsters by default. This commit forces the engulf removal upon monster polymorph, hopefully fixing the bug. -------------------------------------------------------------------------------- 8f7a205945 | Kate | 2021-11-15 00:06:13 +0000 Move Cheibriados Bend Time to 1* In general, gods should require some initial investment before granting abilities, and this has been changed recently for various other gods. Cheibriados had Bend Time granted at 0* intentionally since the god is fairly challenging and does immediately slow the player, however it's also not very likely to help much on initial worship, with its success rate depending on piety and invocations skill. Instead swap it with the poison-slowing passive (which has a decent chance of being helpful early), and move Bend Time to 1*, at which point it's more likely to be usable. -------------------------------------------------------------------------------- 8c1bd5eb55 | Kate | 2021-11-15 00:06:13 +0000 Give Trog berserk a piety cost Outside of historical inertia, there wasn't really any good reason for such a strong ability to have no piety cost at all. Giving Berserk a small piety cost won't affect the strength of the god or berserker background in a particularly significant way, but should at least slightly slow down early piety gain. -------------------------------------------------------------------------------- 81a577e8d6 | Kate | 2021-11-15 00:05:11 +0000 Give Dowan permanent haste on Duvessa's death Dowan already gained the Haste spell and an immediate haste enchantment, so this is a much less significant change than Duvessa's permanent berserk, but upgrading the haste to permanent at least saves him from needing to recast it. -------------------------------------------------------------------------------- 0e04eb73d5 | Kate | 2021-11-15 00:05:11 +0000 Allow Death Channel to work on demons and holies To allow necromancy some further application in areas where it's generally weaker, and for thematic consistency with Yredelemnul's Enslave Soul, allow it to create spectral demons and holies, and to also work on living creatures that don't leave a corpse. -------------------------------------------------------------------------------- f87a654afa | Aliscans | 2021-11-15 00:01:10 +0000 Remove a redundant "your" from a message. The item_name variable in _equip_weapon_effect() uses DESC_YOUR, so doesn't need "your" to be added later. -------------------------------------------------------------------------------- 80664f265d | Nikolai Lavsky | 2021-11-14 23:59:42 +0000 fix: let Beogh's Smite set ally targets Also, tweak Smite's damage message to include attack strength punctuation. -------------------------------------------------------------------------------- bbce81c95b | Nicholas Feinberg | 2021-11-14 12:25:10 -0800 Make a quick tile swap (Sastreii) New Quicksilver Elemental (not ooze!) tile. -------------------------------------------------------------------------------- 8b9cc49659 | Nicholas Feinberg | 2021-11-13 18:40:21 -0800 Enrage the Bear Spirit As a follow-up to e692aea80228c, make the Hat of the Bear Spirit's new *Rage also buff berserk rage. While wearing the hat, berserk will give +100% HP (normally +50%), and the slow duration afterward is reduced by 1/3rd. In compensation & to simplify, remove the rN. Possibly it should only have one of these buffs, but I liked them both, so in they both go. (Also possible some other hat props should get tossed.) -------------------------------------------------------------------------------- 09de17f5b5 | hellmonk3 | 2021-11-12 21:43:11 -0500 dezombify saegor_arrival_fortress -------------------------------------------------------------------------------- aed13ad2c0 | Kate | 2021-11-13 02:30:43 +0000 Slightly randomise Beogh's Smite piety cost It was fixed at 3, but as a rule piety costs are randomised slightly to prevent tracking exact piety values, so give it a randomised cost of 3-4 piety. -------------------------------------------------------------------------------- ac13b58d08 | Kate | 2021-11-13 02:13:27 +0000 Remove charge count display for wands from \ menu Since showing max charges per wand isn't useful any more. -------------------------------------------------------------------------------- 0713323be1 | Kate | 2021-11-13 02:13:27 +0000 Let Noxious Bog be generated with 1 adjacent solid tile Instead of requiring zero adjacent solid tiles. The limitation still prevents the spell from being used in corridors and very enclosed areas, but allows it to be a little more effective in unevenly-shaped spaces. -------------------------------------------------------------------------------- 9a1a4af6a0 | Nicholas Feinberg | 2021-11-12 16:54:48 -0800 Necrotize putrid mouths (Sastreii, CanOfWorms) -------------------------------------------------------------------------------- fc338a8e3c | hellmonk | 2021-11-11 22:35:21 -0500 re-remove a description -------------------------------------------------------------------------------- 52b40a1e3f | MainiacJoe | 2021-11-11 22:31:36 -0500 feat: a zoo-themed Lair entry vault (mainiacjoe) did a little syntax cleanup; this closes pr 2140 -------------------------------------------------------------------------------- b979743d38 | Perry Fraser | 2021-11-11 19:02:29 +0000 fix: typo in mut description for slowness -------------------------------------------------------------------------------- c3dbe4743c | Kate | 2021-11-11 19:01:52 +0000 Fix Englaciate lasting 10 times too long on players No monsters actually cast it, but this appears to have been broken since it was implemented as a monster spell in 8e67a19276. -------------------------------------------------------------------------------- b106dbac18 | Kate | 2021-11-11 19:01:45 +0000 Give Metabolic Englaciation a minimum duration The effect's duration was scaled down by monster HD, which could often result in a monster being affected but only for an extremely short duration. Let monsters still fully resist the effect in the same way, but guarantee a minimum duration for monsters that don't resist. -------------------------------------------------------------------------------- e9a2b5622a | Kate | 2021-11-11 18:08:37 +0000 Consistently redraw EV/SH values when incapacitated -------------------------------------------------------------------------------- 6f72491a82 | Kate | 2021-11-11 15:58:20 +0000 Don't let sleeping monsters try to use shields Fixes an oversight in merging cannot_move and cannot_act. Closes #2214. -------------------------------------------------------------------------------- 47ca5a425f | Perry Fraser | 2021-11-11 15:58:19 +0000 Refactor actor::cannot_move into actor::cannot_act With the change in 7190d3f, player::cannot_move and player::cannot_act became equivalent. This was in addition to the monster versions of those methods also being equivalent, which meant we can remove the super versions of them. This also corrects one instance where the lack of checking for sleepiness in player::cannot_speak was relied on to enable talking while sleeping. -------------------------------------------------------------------------------- 0321f2dd10 | Perry Fraser | 2021-11-11 15:58:19 +0000 Fix: consider the player unable to act while asleep Being asleep wasn't considered a condition in being unable to move, which led to issues like not having your evasion reduced while asleep. I investigated this after causative mentioned it in #crawl. [Committer's note: adjusted commit message.] -------------------------------------------------------------------------------- 2d8be16583 | Kate | 2021-11-11 11:54:11 +0000 Fix Cold Breath description (#2220) Closes #2220. -------------------------------------------------------------------------------- bb0bd99bb4 | Kate | 2021-11-11 11:46:05 +0000 Fix Yara's Head Instructor not having a description -------------------------------------------------------------------------------- 1a73be5ee4 | Kate | 2021-11-10 22:19:32 +0000 Let Noxious Bog affect the player's current tile Since you're now immune to it while active, there's no need to leave the player's current square unaffected. -------------------------------------------------------------------------------- 84f7f7b7e7 | Kate | 2021-11-10 21:35:48 +0000 Properly cancel Noxious Bog on level transition The terrain already expired on changing floors, but the duration lingered, which prevented recasting the spell on a new floor until it timed out. -------------------------------------------------------------------------------- 7b4740d1af | Kate | 2021-11-10 21:35:48 +0000 Don't mark rCorr useless with temporary rCorr active -------------------------------------------------------------------------------- 025dcb77dc | Nicholas Feinberg | 2021-11-10 11:30:18 -0800 Fix tentacle corners (Goratrix, dilly) Broken by 325244837d3070345b97a7eb4a78b7e1acbdd791. (There's probably a better fix.) -------------------------------------------------------------------------------- f98f3959e3 | Nicholas Feinberg | 2021-11-10 10:10:17 -0800 Devour hungry ghosts (Sastreii) Replace the old Putrid Mouth tile with a new one. -------------------------------------------------------------------------------- 1410851fad | advil | 2021-11-10 09:32:27 -0500 build: add a test placeholder This is a brute-force way of trying to figure out whether various DGL setups will copy subdirectories of webserver. -------------------------------------------------------------------------------- 0121872642 | Kate | 2021-11-10 01:03:09 +0000 Remove the Orb's effect on contamination Contamination is now much less a common status that players need to manage, and more a rare effect from miscasts and specific abilities/items. As such it no longer makes as much sense for the Orb to have a special (and fairly minor) interaction with it. If any special interaction is still desired, it'd be better to increase contamination received rather than to just reduce dissipation slightly. -------------------------------------------------------------------------------- 08208c227e | Kate | 2021-11-10 00:50:16 +0000 Adjust invisibility costs and contamination To simplify the effect and its costs, remove the contamination over time, and reduce the initial contamination for activating the ego. As with Irradiate, the darkgrey to lightgrey threshold is now also the threshold at which activating the ability again might cause yellow contamination. Increase the drain cost slightly to further penalise using it at lower success rates, and to make it less likely that the kills during the effect can quickly counteract the draining. Also remove the contamination from invisibility beams, since wands of invisibility are long gone. -------------------------------------------------------------------------------- 1d1595ee42 | Kate | 2021-11-09 13:39:08 +0000 Remove Invisibility as a player spell Invisibility is a very powerful effect, and has multiple sources (spell, potion and scarf ego). The spell is by far the most easily repeatable of these, making it much stronger and less interesting to make effective use of. The scarf still remains as a non-consumable source of invisibility, but is better balanced by the additional drain cost. -------------------------------------------------------------------------------- 1135068088 | Kate | 2021-11-09 13:39:08 +0000 Give Beogh orcs more health when surrendering Previously hostile orcs had a chance to convert when a Beogh-worshipping player would kill them, but were only given 1-4 health back so were likely to immediately die to any other nearby hostiles. Increase the healing up to a larger portion of their max health to make this less likely, especially when converting higher tier orcs or uniques. -------------------------------------------------------------------------------- e8106a3eec | Kate | 2021-11-09 13:39:08 +0000 Don't let hostile monsters level up Restrict levelling up to only divine allies (specifically to Beogh orcs, since undead can't level up anyway). This behaviour was barely noticeable otherwise, except in occasional cases of charming a monster and having it kill something else. -------------------------------------------------------------------------------- b444dcf96d | MainiacJoe | 2021-11-08 21:35:08 -0800 Add nine large Temple maps with 18-21 gods Closes #2124. -------------------------------------------------------------------------------- 2a3509429d | MainiacJoe | 2021-11-08 21:34:15 -0800 Expand label for category <<3>> to twenty altars -------------------------------------------------------------------------------- 923ab73998 | Nicholas Feinberg | 2021-11-08 11:54:20 -0800 Make Ignis less mad at non-worshippers (nicolae) -------------------------------------------------------------------------------- 68644deec8 | advil | 2021-11-08 09:30:15 -0500 feat: add some text to the chargen pseudo-milestone This is not a real milestone (it isn't saved, or written to the milestones file) -- it's only used in the webtiles lobby. So it should be fine to add some informative text to it. -------------------------------------------------------------------------------- 6ef7baa362 | advil | 2021-11-08 07:41:47 -0500 feat: transmit milestones/where info over webtiles sockets In order to update the lobby, the webtiles server needs various bits of information about ongoing games. Previously, this information was transmitted via 0-2 distinct channels: the .where file in the morgue directory, and the milestone tailing. (The 0 is because on just a plain `WEBTILES=y` build, where/milestone info was just extremely unreliable, and milestones weren't sent at all as far as I can tell.) This commit refactors things so that where info and milestones can just be sent directly to the webtiles server over the socket connect, rather than increasing the I/O load. (Probably not impactful on most servers, but possibly actually matters on CAO.) This change also simplifies client/server communication quite a bit. For versions with this patch, the webtiles server does not need to tail the milestones file, and does not need to read .where files at all, simplifying configuration as well. We do keep these capabilities around for legacy reasons, as I expect to backport this a bit but not very far back. Specific notes: * The crawl process still writes a .where file if DGL_WHEREIS is defined. This is necessary for dgl setups, but probably could be dispensed with otherwise. * If a crawl process sends direct where/milestone info, the server will stop paying attention to the indirect versions. This should make using older versions fairly seamless. * On the webtiles server side, some light refactoring so that milestones and wheres use the same code, moreso than before at least. * The last milestone is saved in a prop so that it can be shown when reloading, and explicitly synced on game start. (Previously it was just a static variable that was not saved.) * An explicit where is sent directly during character generation. -------------------------------------------------------------------------------- 06939e2a5b | advil | 2021-11-08 07:41:47 -0500 refactor: further refactor lobby sync * Dispense with caching the lobby_entry() result; if this needs to be cached it could be cached on ProcessHandler object itself (but I suspect it's not very important). The global state is now just a set of games with known stale lobby entries. * separate out lobby updating from the asynchronous loop code; this is just to make it easier to understand and refactor in the future. * Use a queue-then-flush paradigm, rather than send everything at once. This should do a better job of batching the message traffic. * Better avoid race conditions in case of asynchronous calls -------------------------------------------------------------------------------- 592c3b7cb7 | advil | 2021-11-08 07:41:47 -0500 refactor: do lobby updates on a schedule Previously, every time any game changed state in a way that would affect the lobby, the lobby update function was called immediately. This, so far as I can assess this sort of thing, scales quite poorly with the number of active players and the number of lobby viewers. The amount of data was still quite small, but the amount of send_message calls, it seems, was not. This commit refactors lobby updates to be sent all at once, by default every 2 seconds. The idea is put a configurable bound on the amount of traffic involved in lobby info, where lower-traffic servers could set this much lower (e.g. 1 or 0.5), and higher traffic servers could tweak upwards as needed. It should be mentioned that truly profiling webtiles in live situations is basically impossible as it stands, so this commit is based on some level of guesswork. It's also not tested yet in a real live situation. -------------------------------------------------------------------------------- b054d885db | Nicholas Feinberg | 2021-11-07 20:14:21 -0800 Remove Jiyva's stat shuffling It seems to have been meant as a perk, but it was pretty frequently detrimental to the player - not in the fun way of systems that encourage one to adapt to circumstances, but just in an overly complex and busted way. -------------------------------------------------------------------------------- fb90bdcb57 | Kate | 2021-11-08 02:35:31 +0000 Remove Disjunction's contamination cost It's not really necessary for balancing the spell - contamination is supposed to prevent recasting multiple times, but the cost was low enough that it could already be recast a lot of times before risking yellow glow, and it's high level enough that the MP cost works fine to prevent continuous recasting. -------------------------------------------------------------------------------- f37d360483 | Kate | 2021-11-08 01:03:24 +0000 Update a comment -------------------------------------------------------------------------------- 1b360eb39e | Kate | 2021-11-08 00:22:24 +0000 Add targeters for Silence and Liquefaction -------------------------------------------------------------------------------- 8d5f0ca64a | Kate | 2021-11-08 00:15:08 +0000 Display current/max level on mutation descriptions (Mike) -------------------------------------------------------------------------------- 00180f5fcc | Kate | 2021-11-07 22:02:19 +0000 Remove obsolete identification checks for reflection -------------------------------------------------------------------------------- ac2d178426 | Kate | 2021-11-07 21:58:13 +0000 Don't let Yred try to reflect reflected splash damage Fixes a crash when the player reflects a yellow draconian acid breath attack, it hits a monster, splashes back onto the player, and Yred tries to mirror that damage back onto a dummy monster that represents the player. -------------------------------------------------------------------------------- 108efc2627 | Kate | 2021-11-07 20:37:14 +0000 Fix misleading indentation -------------------------------------------------------------------------------- 581a213eff | Kate | 2021-11-07 20:21:10 +0000 Let monsters use Rift's bonus reach range And fix its display in the monster list so that it shows up as a polearm there. -------------------------------------------------------------------------------- 7e933cf55b | Kate | 2021-11-07 19:50:24 +0000 Let monsters use reaching attacks in any attack slot Reaching attacks previously only functioned in the first attack slot, but some mutant beasts could have them in later slots, resulting in the reach attack not functioning. -------------------------------------------------------------------------------- 19d727b07e | Kate | 2021-11-07 18:17:04 +0000 Remove unused AF_KITE handling Since this attack flavour has been removed. -------------------------------------------------------------------------------- de3ffcc593 | Kate | 2021-11-07 17:48:04 +0000 Give Excruciating Wounds a targeter As with transmutations and other self-enchantments. -------------------------------------------------------------------------------- 60983d4ba9 | Kate | 2021-11-07 00:23:51 +0000 Fix Serpent of Hell attack descriptions Due to various complicated handling for hydra-style multi-attacks, only their first bite attack was listed in their descriptions. -------------------------------------------------------------------------------- 74956062c1 | Kate | 2021-11-06 15:41:08 +0000 Adjust some mutation descriptions -------------------------------------------------------------------------------- 09f76e8c00 | Kate | 2021-11-06 01:50:21 +0000 Fix Xom chesspieces claiming to put undead to sleep And correctly give the "is unaffected" message instead. -------------------------------------------------------------------------------- 4fbe447692 | AdamPG | 2021-11-06 00:55:39 +0000 Readjust Ignis ability costs to 4/3 of original cost This gives the player 8 uses of Foxfire Swarm, each of which cost and additional 3 piety, leading to an increase of 24 piety cost - exactly the former cost of one use of Rising Flame (which is now free). -------------------------------------------------------------------------------- c9cd55e000 | AdamPG | 2021-11-06 00:55:39 +0000 Make Ignis' Rising Flame only usable once Cinder Acolyte has proven to be an incredibly strong start. In particular, the Rising Flame power changes the game in ways that make the entire early and mid-game into a foregone conclusion for any experienced reasonably-high-win-rate player. While strong starts such as Berserker already exist, these are all still susceptible to losing if one makes the various mistakes that players make in an average game of Crawl. Rising Flame, however, removes all consequences for mistakes. At starting Ignis Piety, the player gets four uses of Rising Flame. When they activate it, they are shafted upwards after a delay of 2+random2(3) turns (an entire turn faster than a teleport scroll!). This ability is probably the most powerful escape ability in the entire game and is simply too strong to be available from the start of the game in such a large quantity. A "get out of jail free card" for a player's worst mistakes is a cool idea, but it should only be available one time, similar to Tso or Kiku's capstone abilities. As such, this PR turns Rising Flame into a capstone ability, usable exactly once at any piety level and with no piety cost of its own. [Committer's note: squashed commits and updated commit message to reflect the change from an increased piety cost to a capstone ability. Closes #2209.] -------------------------------------------------------------------------------- b5f29a7041 | Nikolai Lavsky | 2021-11-06 00:03:45 +0000 fix: disable miscast-created allies when allies are forbidden As a followup to cf4520f7, this commit blocks one more source of allies who would immediately turn hostile under Okawaru or Sac Love. This covers Spellbinder melee and any other potential way of causing summoning miscasts on monsters. -------------------------------------------------------------------------------- e7ca7b5467 | Nicholas Feinberg | 2021-11-05 16:24:08 -0700 Reword clarity berserk slightly "Losing temper" reads very strangely to me; I've always seen it as "losing [your/my] temper". Perhaps it's a commonwealthism? In any case, it seems to imply that without this mutation, you could become enraged for no reason at all; let's try to fix that. -------------------------------------------------------------------------------- f458de4411 | Nikolai Lavsky | 2021-11-05 23:10:10 +0000 text: fix, reword, and extend a few mutation descriptions * To make style more consistent, this commit capitalizes stat names, adds a missing serial comma, and replaces +Stealth with Stealth+. * "Stab" has a special meaning for melee attacks, so replace it with the spiked tentacle's attack verb, "pierce". * Clarity blocking Rnd*Rage is a well-hidden mechanic, which is not mentioned anywhere in the game, so let's fix this too. -------------------------------------------------------------------------------- d4f0d3f9b2 | Kate | 2021-11-05 22:46:59 +0000 Remove checks for unidentified equipment Items equipped by the player and by monsters are always identified, so remove a lot of code that handled cases where the player didn't know whether they or a monster had a certain resistance or not. -------------------------------------------------------------------------------- 4e399c39f0 | advil | 2021-11-05 09:48:49 -0400 fix: make an ASSERT more informative This ASSERT has been triggering sporadic, unreplicatable crashes since 2018 or so. Maybe more information will help. (In particular, if one of these link values is corrupted somehow, this might give a clue as to how.) -------------------------------------------------------------------------------- afe8c5f9e9 | Nicholas Feinberg | 2021-11-04 15:59:56 -0700 Allow players to use anubis guard tiles -------------------------------------------------------------------------------- 31680bbd8b | Nicholas Feinberg | 2021-11-02 19:02:40 -0700 Celebrate true heroism (Sastreii) New Heroism and Duel invocation icons. -------------------------------------------------------------------------------- 75f770b44e | Edgar A. Bering IV | 2021-11-02 23:32:51 +0200 feat: make Duvessa permanently berserk when Dowan dies She waits to see you before going crazy. But the game of "kill Dowan first then escape to wait out the berserk and fight a normal Duvessa" always seemed a bit sad, considering Dowan's grief gave him permanent new strength. So lets let the bond run a bit deeper, and make Duvessa's rage eternal. -------------------------------------------------------------------------------- d6d7bb098e | Edgar A. Bering IV | 2021-11-02 23:30:27 +0200 fix: prevent petrified monster speech -------------------------------------------------------------------------------- 9f4689a14b | Edgar A. Bering IV | 2021-11-02 23:19:52 +0200 fix: don't time out any permanent enchantments on stair change -------------------------------------------------------------------------------- 03c7b27e48 | Nicholas Feinberg | 2021-11-02 13:36:35 -0700 Reduce crystal tome spell count Drop to 1-2 spells per cast, from 2-3. They're quite strong regardless, and can stand to be pulled back just a little bit. -------------------------------------------------------------------------------- 59c5b1f36e | Nicholas Feinberg | 2021-11-02 13:36:35 -0700 Increase living earthen tome HD Give em a better shot at hexing Depths characters. -------------------------------------------------------------------------------- 2d16a5e2fa | Nicholas Feinberg | 2021-11-02 13:36:35 -0700 Fix living spell HP display -------------------------------------------------------------------------------- fc378a028c | Nicholas Feinberg | 2021-11-02 13:36:35 -0700 Hopefully clarify living tome descriptions -------------------------------------------------------------------------------- a3f3a1a0a4 | Nicholas Feinberg | 2021-11-02 13:36:35 -0700 Cut living spell HP Make it easier to kill them before they cast. -------------------------------------------------------------------------------- b1e28150d3 | Edgar A. Bering IV | 2021-11-02 22:29:10 +0200 vaults: adjust a zot vault lich placement -------------------------------------------------------------------------------- b4ddf7de7f | Edgar A. Bering IV | 2021-11-02 22:26:26 +0200 vaults: adjust a zot vault draconian placement -------------------------------------------------------------------------------- 02bda5dcb3 | advil | 2021-11-02 12:36:46 -0400 docs: update placement.lua docs (perryprog) This replaces some obsolete documentation that referred to `placement.lua`'s predecessor, as well as updates the script --help output to include some things that got added but never documented. -------------------------------------------------------------------------------- 6f86257384 | Nicholas Feinberg | 2021-11-02 08:31:42 -0700 Improve armour/sh miss messages Account for to-hit being randomized after armour & shield penalties are applied, before they're compared to EV. Also de-indent. -------------------------------------------------------------------------------- 186eaeaa95 | Nicholas Feinberg | 2021-11-02 07:53:31 -0700 Remove the tail tail -------------------------------------------------------------------------------- 3d1f99b579 | Nicholas Feinberg | 2021-11-01 21:19:35 -0700 End All Hallow's Eve This reverts commit 91a516d0e768b6e4232327f2d9d008fc577132f3. -------------------------------------------------------------------------------- a603e38af3 | Nicholas Feinberg | 2021-11-01 16:36:08 -0700 Add a mutation menu To allow players to examine details of mutations. Lots of notes about good future improvements in get_mutation_desc(). -------------------------------------------------------------------------------- c1b1554a8f | Nicholas Feinberg | 2021-11-01 16:36:08 -0700 Minor mutation description tweaks Mostly to removed muts. -------------------------------------------------------------------------------- ddf5a44173 | Nicholas Feinberg | 2021-11-01 16:36:08 -0700 Add mutation DB -------------------------------------------------------------------------------- 90e1efd671 | Nicholas Feinberg | 2021-11-01 16:36:08 -0700 Separate out _get_fakemuts -------------------------------------------------------------------------------- 1fcdd13c02 | Nicholas Feinberg | 2021-11-01 16:36:08 -0700 Refactor form fakemuts Simplify poison immunity printing & pull out form fakemuts into their own category. -------------------------------------------------------------------------------- 130ae17fe5 | Kate | 2021-11-01 01:34:27 +0000 Reduce spellpower caps of some low-level spells Teleport Other, Sublimation of Blood, Spider Form, Inner Flame, Gell's Gravitas and Vampiric Draining - as level 2-3 spells, they shouldn't scale all the way up to 200 power. -------------------------------------------------------------------------------- 2d6b873594 | Kate | 2021-11-01 01:34:27 +0000 Don't let monsters pick up seen items they've dropped This allowed them to pick up their weapon again after being disarmed, for example. -------------------------------------------------------------------------------- 91a516d0e7 | Edgar A. Bering IV | 2021-10-31 20:36:10 +0200 hack: halloween tonight, be careful Since we're a bit late and didn't put this on Maurice let's give our players a spooky costume with a hasty options default. Doing this (or maurice) automatically using today_is_halloween() will come later. -------------------------------------------------------------------------------- c05be326da | gammafunk | 2021-10-31 01:11:00 -0500 feat: Tweak a Master Elementalist vault Remove the final chamber door in `mu_elemental_laboratory`, since it tends to allow players to sneak up on our secretive wizard too easilly. Also put a small window into the final chamber about halfway through the vault. Then players can see what they'll be up against as well as the potential rewards. -------------------------------------------------------------------------------- 550dbda0cd | advil | 2021-10-30 18:42:21 -0400 fix: tweak &P temple behavior when low on gods (nicolae) If the seed-chosen temple had fewer altars than an &P placed one, levelgen would simply place floor. This change repurposes an existing check for mapstat/objstat that places a Xom altar in this case. -------------------------------------------------------------------------------- 8c92f1e708 | advil | 2021-10-30 17:50:07 -0400 fix: suppress corrupted PlaceInfo error for wizmode commands This is treating the symptoms, but I think it is safe to ignore this fixup entirely for things like &P. (A better fix might be to make wizmode commands not need the fixup.) -------------------------------------------------------------------------------- 84b7309ef8 | advil | 2021-10-30 17:50:06 -0400 fix: make &P work in temple Previously, the selected map for this command was ignored in temple, overridden by the temple map chosen at seed start. This commit lets a FORCE_MAP_KEY prop override TEMPLE_MAP_KEY if both are set. This does not replace the TEMPLE_MAP_KEY prop, so `&ctrl-r` resets. A map that requires a layout will crash here; this could maybe be headed off by requiring the map to be usable in temple to place there in the wizmode code. I've fixed the crash so that it's an ASSERT at least, and not a segfault (which is how this initially presented). This commit also fixes the encompass warning for `&P` to check PLACE restrictions and not just DEPTH; it was ignoring PLACE before and so probably printing this warning for a bunch of unnecessary cases. -------------------------------------------------------------------------------- 0164abf027 | Kate | 2021-10-30 20:39:40 +0100 Don't consume corpses on Kiku torment failure -------------------------------------------------------------------------------- 4ac5789cae | advil | 2021-10-30 15:25:49 -0400 fix: remove an essentially unused function This function has both webtiles and local tiles code, but isn't used in local tiles. In webtiles it returns 1. Possibly intended for greater things in 1f9488b117fe8, but that didn't happen. -------------------------------------------------------------------------------- cc23663199 | advil | 2021-10-30 15:25:49 -0400 fix: explicitly use TargetConditionals.h in platform detection OS X provides a header that is in some ways quite similar to our platform.h, up to the macro naming style, but unfortunately uses a value of 0 rather than undefinedness for false. This has been around for a very long time (e.g. I found a version as old as 2000), and it looks like there have always been some collisions, but these are largely for for macos 12) added a few new ones that do matter quite a bit, in particular TARGET_OS_WINDOWS and TARGET_OS_LINUX are now #defined to 0 when building on OS X. This breaks many things. This commit takes the easy way out and does some selective #undefs. I've tried to fix a few of the old problems that don't really matter as well, e.g. the old version had noticed that TARGET_CPU_PPC was defined but didn't handle that correctly. I think in the longer run it could be better to change our prefixes, e.g. to DCSS_TARGET_OS_WINDOWS. But this is a bit of an annoying task. Resolves #2208 -------------------------------------------------------------------------------- b5831b966b | Kate | 2021-10-30 20:19:33 +0100 Adjust some Elyvilon abilities While Elyvilon's basic functionality is relatively strong, the god had a very large number of activated abilities and is heavily focused on using them with high invocations training, so was quite fiddly in practice. To streamline things slightly, make the lifesaving ability entirely passive, with no requirement to avoid attacking things (since Zin's Sanctuary is a more interesting version of that design). It now provides the standard good god lifesaving chance, plus an additional stronger piety-based chance which becomes guaranteed at 5* but has a piety-gated timeout. Rather than having two separate self-healing abilities, also remove the Lesser Healing ability and move the other active abilities earlier - Purification moves to 1* and is made slightly cheaper, and Greater Healing is renamed to Heal Self and moves to 3*. -------------------------------------------------------------------------------- 707b13c9aa | Kate | 2021-10-30 19:24:57 +0100 Improve Kikubaaqudgha's invoked torment Allow it to take corpses from adjacent squares instead of only the player's location, and guarantee at least partial torment protection. -------------------------------------------------------------------------------- 2b075f26b7 | Kate | 2021-10-30 19:20:35 +0100 Move some TSO active abilities earlier Moves Divine Shield to 1* and Cleansing Flame to 3*. The Shining One isn't really a useful god in the early game, and this doesn't really change that, but should make the god a little more usable if chosen from a faded altar, for example. -------------------------------------------------------------------------------- d57beee77b | Kate | 2021-10-30 19:20:35 +0100 Cap Gozag's gold distraction chance In edge cases (primarily casting level 9 spells in Ziggurats), it was possible to stack gold distraction so high that monsters could barely act. Adjust the probability of gaining a stack, so that it's now easier to gain multiple stacks at low values, but harder once lots of stacks have been gained, and cap the number of stacks at 20. This is unlikely to be relevant most of the time but should at least tone it down in extreme situtations. -------------------------------------------------------------------------------- f0b37e2a93 | Kate | 2021-10-30 19:20:35 +0100 Slightly reduce Ru's chance of passive retaliation From 1/4 at max piety to 1/5. Ru is very powerful for most characters, and while the sacrifices are a good tradeoff for this, having that power focused in the active abilities (with their cooldowns) is more interesting than having passive retaliation do too much of the work. -------------------------------------------------------------------------------- 5845fe868d | Kate | 2021-10-30 19:12:29 +0100 Highlight some Pan rune messages by default -------------------------------------------------------------------------------- b643f36830 | Kate | 2021-10-30 19:12:29 +0100 Remove a reference to spell hunger -------------------------------------------------------------------------------- abee14ce83 | Kate | 2021-10-30 19:12:27 +0100 Randomise the corpse used for Animate Skeleton Instead of picking the first location visited by radius_iterator. -------------------------------------------------------------------------------- 8f272e2798 | Kate | 2021-10-30 18:59:48 +0100 Remove some handling for multi-headed players -------------------------------------------------------------------------------- f7c1052996 | Kate | 2021-10-30 18:59:48 +0100 Update description for scrolls of fear -------------------------------------------------------------------------------- c1929b3ff3 | Edgar A. Bering IV | 2021-10-30 20:49:11 +0300 fix: recolour titans and antaeus in console -------------------------------------------------------------------------------- 0db16c8cc9 | Nicholas Feinberg | 2021-10-30 07:46:08 -0700 Add ArmiesAndCastles to the CREDITS -------------------------------------------------------------------------------- ef3a642a4e | Nicholas Feinberg | 2021-10-29 07:39:35 -0700 Fix using ?id under Ashenzari (particleface) Also remove an unused #include. -------------------------------------------------------------------------------- 7c675f85b1 | Nicholas Feinberg | 2021-10-28 21:01:04 -0700 Fix console builds? -------------------------------------------------------------------------------- ded9c35045 | Gopall | 2021-10-28 19:48:25 -0700 Prompt user when trying to enter ziggurat portal. Ziggurats are very dangerous. And the portal you enter through is disabled when you enter. It would be a good idea to prompt the user to prevent them from accidentally entering a ziggurat. -------------------------------------------------------------------------------- 340af05277 | Nikolai Lavsky | 2021-10-28 19:45:31 -0700 tile: add ability icons for the Olgreb, Dispater, and Asmodeus unrands -------------------------------------------------------------------------------- 9e3a184554 | ArmiesAndCastles | 2021-10-28 19:34:31 -0700 Add spell menu option -------------------------------------------------------------------------------- 1ad88e3242 | Aliscans | 2021-10-28 19:27:42 -0700 Only compile 27 functions when USE_TILE (or similar) is set. There were a number of functions which were only called if TILE, TILE_LOCAL or TILE_WEB was defined, but were defined unconditionally. Add #ifdefs to some of them to reflect the way they are used. -------------------------------------------------------------------------------- cf0edb70ba | Aliscans | 2021-10-28 19:27:42 -0700 Delete 43 unused functions. Make 1 DEBUG-only. Delete these unused functions: can_spawn_mushrooms() compare_skills() count_allies() count_desc_lines() count_monsters() count_neighbours() count_traps() downgrade_zombie_to_skeleton() drain_hp() fully_map_level() get_armour_repel_missiles() get_desc_quantity() get_random_stair() get_recent_messages() gozag_gold_in_los() ignite_poison_affects() inc_max_hp() init_abomination() is_helmet() is_real_food() item_from_int() item_int() macro_sendkeys_end_add_cmd() max_cloud_damage() mons_can_move_towards_target() mons_class_res_polar_vortex() mons_has_flesh() mons_has_incapacitating_ranged_attack() mons_has_incapacitating_spell() mons_secondary_habitat() multiple_items_at() num_feats_between() pack_item_identify_message() playable_job_names() playable_species_names() player_can_memorise() rand_round() set_hydra_form_heads() spell_is_form() tile_clear_map() tile_reset_feat() update_monster_symbol() zin_remove_all_mutations() Put "#ifdef DEBUG" around keyseq_to_str(). This is not used in the code, but this means that it can still be called through a debugger with the right compile option. -------------------------------------------------------------------------------- 3554995387 | hellmonk | 2021-10-28 19:20:36 -0700 adjust the slow spell Move it to level 1, but cap the power at 25. This might make slow more exciting early on AM without letting it remain too relevant later on. It still has a success bonus compared to other hex effects; this could be removed, but might require adjusting other sources of slow. -------------------------------------------------------------------------------- 776b58c23f | ArmiesAndCastles | 2021-10-28 19:17:21 -0700 Forbid invalid ghost spells -------------------------------------------------------------------------------- 6247938026 | ArmiesAndCastles | 2021-10-28 19:11:23 -0700 Solve wizard mode charms crash -------------------------------------------------------------------------------- 1d6e689fef | Santiago Acosta | 2021-10-28 19:07:31 -0700 Simplify mon_to_hit_base mon_to_hit_base asked if the attack was ranged or not. but this was pointless, since it always returned 18 + 2.5 * HD for skilled monsters or, 18 * 1.5 * HD for unskilled ones. Removed this distinction, and simplified the magic numbers. -------------------------------------------------------------------------------- 09e7bd7c26 | Aliscans | 2021-10-28 19:05:39 -0700 Don't say the map boundary can be burnt or dug through. Prevent get_feature_desc() from stating that terrain on the map boundary can burn or be dug through, as it can't. This reflects a restriction in destroy_wall(). Fix a typo in a comment. -------------------------------------------------------------------------------- de44f11507 | Gopall | 2021-10-28 19:03:49 -0700 Fix a Pan teleport closet -------------------------------------------------------------------------------- 1cc4480b13 | dilly | 2021-10-28 19:03:02 -0700 Give master elementalist willlpower Carry on, master elementalist. -------------------------------------------------------------------------------- 6bb2ce7825 | Perry Fraser | 2021-10-28 19:01:43 -0700 Rename Purgy to Pargi After an IRC discussion brought up by PleasingFungus/gammafunk/geekosaur, it was decided to rename Purgy to Pargi to avoid a potential comparison to bulimia. -------------------------------------------------------------------------------- 9ea0df9366 | ArmiesAndCastles | 2021-10-28 18:57:55 -0700 Solve lost soul crash -------------------------------------------------------------------------------- bb860f9c85 | Nicholas Feinberg | 2021-10-28 18:56:08 -0700 Adjust dpeg_arrival_tiny_a Be merciful (?) -------------------------------------------------------------------------------- 0f29109cba | Nicholas Feinberg | 2021-10-28 18:38:15 -0700 Add seven new Gastronoks (Sastreii) Replace Gastronok's tile with a much sillier one, and add six other tiles for players who want to set a custom tile. These are: - MONS_GASTRONOK_MUSTACHE - MONS_GASTRONOK_CLEANSHAVEN - MONS_GASTRONOK_HANDLEBAR - MONS_GASTRONOK_FU_MANCHU - MONS_GASTRONOK_SIDEBURNS - MONS_GASTRONAUT They can be set by using this rcfile option: tile_player_tile = tile:mons_gastronaut (Or likewise for other tiles.) -------------------------------------------------------------------------------- f7145f7991 | Nicholas Feinberg | 2021-10-28 18:15:39 -0700 Show Crypt rocks (Sastreii) New rock wall tiles for Crypt. -------------------------------------------------------------------------------- 75e6d9beac | Kate | 2021-10-28 16:12:16 +0100 Simplify scrolls of brand weapon Their list of brands with multiple different weights was fairly spoilery. Instead split the brands into "common" (vorpal, freezing, flaming, venom, protection) and "rare" (draining, electrocution, spectral, vampiric, chaos) categories, with each brand within those categories having the same weight, and add this information to the item description. In practice this is a relatively small change to the brand weightings, with the main exceptions of protection and chaos becoming noticeably more common. -------------------------------------------------------------------------------- 59de83eefb | advil | 2021-10-28 09:53:32 -0400 fix: NOWIZARD build compilation issues There are still a bunch of warnings that look harmless, but this should get it to build -------------------------------------------------------------------------------- 892d06dc2c | Kate | 2021-10-28 05:12:11 +0100 Move Ashenzari's item and trap identification to 1* Ashenzari is extremely strong and generically useful to any character, and in addition to the substantial skill boosts offered once cursed, granted a number of abilities up-front without requiring any curses at all. Instead move the trap protection and item identification to 1*, so that joining Ashenzari doesn't immediately identify all consumables for free and some investment is required. -------------------------------------------------------------------------------- 7a50183f53 | Kate | 2021-10-28 05:12:11 +0100 Remove an unused Jiyva god_passive And fix a typo describing some related functionality. -------------------------------------------------------------------------------- 0181a31188 | Nicholas Feinberg | 2021-10-27 07:25:52 -0700 Make Shoals less washed out (Sastreii) Tweaks to new stone wall tiles. -------------------------------------------------------------------------------- ef20177fd5 | advil | 2021-10-27 10:12:41 -0400 fix: remove a spurious # No idea if this could be causing monterey build problems somehow, but it doesn't need to be there. -------------------------------------------------------------------------------- 4a9143789a | Nicholas Feinberg | 2021-10-26 18:50:32 -0700 Actually add new Shoals tiles Oops! -------------------------------------------------------------------------------- 345791154b | Nicholas Feinberg | 2021-10-26 17:39:39 -0700 Add a pillar of the community (Sastreii) New Shoals stone wall tiles. Simply classic... -------------------------------------------------------------------------------- 66f9036eb4 | Kate | 2021-10-26 02:37:52 +0100 Make boulder beetles stop rolling when incapacitated -------------------------------------------------------------------------------- 095bd1b44f | Nicholas Feinberg | 2021-10-24 15:05:01 -0700 Show brimstone fiends the door (Sastreii) More brightness and contrast tweaks. -------------------------------------------------------------------------------- c0678643b6 | Kate | 2021-10-24 22:23:03 +0100 Remove shock as an option for black draconian breath Black draconian breath being uncontrollable works well to distinguish it from being another plain elemental-flavoured bolt, but makes it harder to use effectively and very high-variance. Remove shock as one of the zaps it can fire, and slightly increase the relative weight of orbs of electricity (from 33/33/33 shock/lightning/OoE to 60/40 lightning/OoE). -------------------------------------------------------------------------------- 5a7bdb8870 | Kate | 2021-10-24 22:07:26 +0100 Remove duplicate acid breath handling -------------------------------------------------------------------------------- 7be2a051a4 | Kate | 2021-10-24 20:03:31 +0100 Improve yellow draconian breath targeter So that it properly displays as a beam, instead of looking like it's smite- targeted. -------------------------------------------------------------------------------- 5dbd38fb6a | Kate | 2021-10-24 20:03:31 +0100 Let yellow draconian breath splash more consistently It previously couldn't splash if the monster it hit was killed by the initial damage. -------------------------------------------------------------------------------- e95497fc47 | Kate | 2021-10-24 20:03:31 +0100 Simplify some Shadow Creatures handling Since it's now only a scroll and not a player spell. -------------------------------------------------------------------------------- 190f86ba01 | Nicholas Feinberg | 2021-10-24 09:44:50 -0700 New Brimstone Fiend tile (Sastreii) Decided to take a break from puns for this one. Gotta mix things up :) -------------------------------------------------------------------------------- 73b70caff8 | gammafunk | 2021-10-24 06:19:49 -0500 feat: Remove a Gauntlet exit vault The map `gauntlet_exit_spiral` is a simple spiral Gauntlet exit map adapted from an exit vault for the original Labyrinth portal. This map is significantly harder than the other exits because it provides no cover over long corridors. It predates the minotaur having access to javelins, so this difficulty difference is unintentional. Furthermore it's not an especially interesting exit map on its own. The newly added `dreamdust_gauntlet_exit_labyrinth` map is more balanced and interesting than `gauntlet_exit_spiral`, and the former is also a Labyrinth reference, so I'm removing the latter. It's possible to rework the map's layout to give the player some better terrain while retaining a spiral aspect, but it would make more sense to make a new map at that point. -------------------------------------------------------------------------------- 7e422d3a0a | gammafunk | 2021-10-24 06:00:19 -0500 feat: Some tweaks for a Gauntlet exit map For dreamdust_gauntlet_exit_labyrinth, use alternating patterns to place dead ends not cardinally adjacent to wall openings, which would make the dead end not function. Tweak the inner-most wall to always a path around corners that doesn't create a diagonal choke point. Finally, move the map to the end of the DES section, so that the maps are ordered by when they were added. Closes #2166. -------------------------------------------------------------------------------- b7d1d2055b | DreamDust | 2021-10-24 06:00:19 -0500 A Gauntlet exit map Similar to my other labyrinth vault, dreamdust_labyrinth, but scaled down and turned into a gauntlet exit vault. Commiter's Note: Tweaked commit message and squashed a fix commit. -------------------------------------------------------------------------------- 6a1266e7b4 | gammafunk | 2021-10-24 06:00:19 -0500 feat: Some adjustments to two large themed maps For `dreamdust_labyrinth`, this is a large vault that ultimately places a single monster. Although the larger maze is visually interesting, there's a lot of dead space. This commit scales down the maze by removing one set of stone walls. Additionally it simplifies the substitutions and introduces an alternating pattern to prevent the dead end from sometimes placing adjacent to the single opening in the wall in a way that prevents the dead end from functioning. For `dreamdust_isle_of_ice`, I've rebalanced the monster lists for each placement depth and added loot appropriate for the threat. For monsters, since this vault is evoking the Ice Cave aesthetics and monster themes, I've made monster lists that combine the "natural" and "undead/demonic" sets, choosing depth-appropriate monsters from the Ice Cave common monster lists used in that portal. The earlier Dungeon and Lair placements use the "easy" Ice Cave monsters, the later Dungeon uses the "hard" Ice Cave monsters, and for Depths I've logically extended the sets to include top end "hard" monsters and a few additional threats form Cocytus. I've added a mix of the usual loot types as well as one thematic Ice Cave loot item that borrows some of the loot definitions used in the portal. The monster and loot item counts are the same for all depths, only the types of monsters change. Ice statues have a chance to place in Dungeon and Lair, with a chance for a second ice statue in late Dungeon. For Depths, we use an orange crystal statue. I've tweaked the appearance of the vault to be more consistent with the Ice Cave portal for console, and added vault connectors near the front of the map, so the vault will be better integrated with the level layout. -------------------------------------------------------------------------------- 8fcd438c92 | DreamDust | 2021-10-24 06:00:19 -0500 Two large themed vaults dreamdust_isle_of_ice: An ice-themed vault on the edge of the map. Original inspiration is how Antarctica looks on a 2D world map, but I'm a terrible artis. So quickly gave up on replicating it. dreamdust_labyrinth: An homage to the old labyrinths. I gave it the lowest WEIGHT since it's a large vault and I think it works best as a very rare easter egg. Committer's Note: Combined commits and tweaked commit messages. -------------------------------------------------------------------------------- 10fb06eb29 | DreamDust | 2021-10-24 06:00:19 -0500 A small loot vault dreamdust_deal_with_the_devil: Some devilish being is trying to tempt players into using a powerful but dangerous piece of equipment. Original plan for this vault was to generate a randart armour with Harm, but this apparently isn't possible. Unfortunate. -------------------------------------------------------------------------------- ac3eafeb5c | gammafunk | 2021-10-24 06:00:19 -0500 Some fixes and adjustments to some float vaults For `dreamdust_black_sun_cult`, use the new correct name for demonspawn black suns. Tweak placement to allow on branch ends, since there's nothing special about this vault that needs to avoid that. For `dreamdust_experimentation`, mix in some "experimental" hostile monsters along with the wizards, to make the vault a bit less mundane. Scale loot and monster count better with depth of placement. For the decorative monsters, use either only human or animal species monsters depending on the monster set chosen, all with permanent enchants, and have them generate awake. For `dreamdust_cat_pyramid`, slightly increase the number of sphinxes, placing 3 on-average and up to 5 to balance the vault's difficulty relative to its loot. Use the good loot potion set instead of random potions, and thin out the loot count a little. This way there's a bit less loot, but it's higher quality. Spread the loot items out in the vaults interior, moving external gold to inside the vault. Tweak the vault layout to prevent statues from blocking the door and to give a more complete path around the outside of the vault. -------------------------------------------------------------------------------- 3ea58914d7 | DreamDust | 2021-10-24 06:00:19 -0500 Some float vaults `dreamdust_black_sun_cult`: Vault featuring a fire and necromancy based cult. In the Dungeon, players will encounter sun demons and a demonspawn black sun, while in Zot they'll find powerful draconians and a black sun worshipping an orb of fire. Rewards are a book (either a manual or a spellbook) and a fire-related item. `dreamdust_cat_pyramid`: A cat-themed pyramid with a couple guardian sphinxes and some offerings as loot. `dreamdust_experimentation`: Some wizards have been performing inhumane experiments... Kill them, stare in horror at what they've created, and then feel free to loot their potion stash! :) Committer's Note: Merged commits and cleaned up commit message. -------------------------------------------------------------------------------- 79a10526bc | gammafunk | 2021-10-24 06:00:19 -0500 feat: Some tweaks to a Shoals vault For `dreamdust_from_the_deep`, the custom water and wall tile visuals taken from the Sewer portal are out of place for the visuals of Shoals. The vault's themes directly referencing the Abyss, so this commit removes the custom water tiles and replaces the Sewer wall tiles with Abyss rock wall tiles. Also replace the gravestone tile for the statue with the newly added tentacle statue tile and remove the custom description. Custom statue descriptions used only in one vault tend to confuse the player as to whether the statue might some special effect, which this one doesn't. -------------------------------------------------------------------------------- 7e8daab784 | DreamDust | 2021-10-24 06:00:19 -0500 A Shoals vault dreamdust_from_the_deep: An "eldritch" vault full of tentacle and chaos monsters. Gives a randart ring and a spellbook with malign gateway & summon horrible things as rewards. Commiter's Note: Cleaned up commit message. -------------------------------------------------------------------------------- f6f64a616a | Kate | 2021-10-24 01:35:50 +0100 Give Blink a power-dependent cooldown Blink was the final player spell that ignored spellpower completely, and was also one of the worst offenders for being universally desirable without requiring any noticeable skill investment. Give it a power cap of 50 and a short cooldown (which is also applied to evokable blink on randarts, but no other methods of blinking - scrolls of blinking and forced blinks from monster spells are unaffected). At full power the cooldown is reduced all the way to zero. -------------------------------------------------------------------------------- c1fbb6f34a | Nicholas Feinberg | 2021-10-23 16:22:37 -0700 Do some deep trolling (Sastreii) New DTEM and deep troll shaman tiles, tweaked for better visibility. -------------------------------------------------------------------------------- 4d584c6bc1 | Kate | 2021-10-23 22:44:42 +0100 Rename a removed mutation So that it doesn't have the same name as an existing mutation for wizmode purposes. -------------------------------------------------------------------------------- b99661e8b9 | Kate | 2021-10-23 22:44:42 +0100 Fix a wispform typo -------------------------------------------------------------------------------- a01ba6cf96 | Kate | 2021-10-23 22:44:42 +0100 Don't make -Potion duration display as a mutation Moves the display for lichform's inability to drink potions to the form's list of innate fake mutations - possibly these should be extended to allow marking a form mutation as good/bad to determine colour, rather than special-casing bad mutations with colour tags. -------------------------------------------------------------------------------- 5ef96339b7 | Kate | 2021-10-23 22:44:42 +0100 Make Inner Flame smite targeted (perryprog) Inner Flame was strong but often a little fiddly to use - making it smite targeted allows it to still be used with foxfires blocking line of fire, for example. Closes #2175 (and implements the change slightly differently, with the beam/zap still kept so that it can be used elsewhere). -------------------------------------------------------------------------------- fe11b99a14 | Kate | 2021-10-23 22:44:42 +0100 Let player hexes set ally targets As with direct damage spells, hexing a monster indicates that you probably want your allies to attack it. Hibernation is kept as an exception, since the player is more likely to want to stab themselves than to have their allies try to do so. -------------------------------------------------------------------------------- 0812ffde7f | Nikolai Lavsky | 2021-10-23 22:44:09 +0100 fix: don't show Rage % when the player can't be affected by *Rage Don't show the Rage chance on the character overview screen for lifeless undead and for players with Clarity. -------------------------------------------------------------------------------- 20c1a8e840 | Aliscans | 2021-10-23 22:43:29 +0100 Shrink some overview screen labels to make them fit better Reduce the width of the first column of labels from 9 to 8. This creates a 1 character gap between the right edge of the Stlth field and the second column of labels. Set the length of the Stlth, HPRegen and MPRegen labels using cwidth. This means that every field in the two label columns has its width set by cwidth. Remove loops from _stealth_bar(). -------------------------------------------------------------------------------- 47f3eba078 | Nicholas Feinberg | 2021-10-22 08:22:14 -0700 Add a spooky new halloween tile (Sastreii) Not currently used for anything but could be fun for Maurice. -------------------------------------------------------------------------------- 841cac7204 | Nicholas Feinberg | 2021-10-22 08:09:07 -0700 Shatter Morrison's legacy (Sastreii) New broken door tiles. -------------------------------------------------------------------------------- ff097466f2 | Kate | 2021-10-21 17:09:34 +0100 Simplify sickness status display It's a much simpler effect than it was in the distant past, and can just be displayed straightforwardly instead of changing colour depending on remaining duration. Also fixes it not being correctly displayed by potions of cancellation. -------------------------------------------------------------------------------- e4f7e7e258 | Kate | 2021-10-21 03:57:34 +0100 Adjust a distortion message So that it doesn't overlap with the messaging for Lugonu's Bend Space or translocation miscasts, which resulted in misleading message colouring by default. -------------------------------------------------------------------------------- 1f2755edf2 | Kate | 2021-10-21 03:57:10 +0100 Give Bend Space a chance to blink monsters at the destination Bend Space's power-dependent chance to blink and damage adjacent monsters mostly acts as flavour and to slightly distinguish it from regular Blink. To lean into this and Lugonu's chaotic nature a little more, let it also blink monsters at the destination. Blinking monsters at the destination also has the added bonus of making it slightly less likely to end up next to a hostile creature. -------------------------------------------------------------------------------- 5bcc4f242e | Kate | 2021-10-21 02:25:10 +0100 Remove an obsolete parameter -------------------------------------------------------------------------------- ad6df49e81 | Kate | 2021-10-20 01:23:27 +0100 Make the player immune to their own Noxious Bog The spell's utility was previously very heavily dependent on whether the player had easy access to flight. Make it a little easier to use without needing access to flight, since it already does have strong restrictions on where it can be cast in the first place. (This can also technically be used to gain immunity to monster-cast sludge, which is probably fine.) -------------------------------------------------------------------------------- e46a2d6e3a | Kate | 2021-10-20 01:23:27 +0100 Fix spacing -------------------------------------------------------------------------------- a55568f2eb | advil | 2021-10-19 17:51:19 -0400 lint: checkwhite -a -------------------------------------------------------------------------------- 42619f35cc | advil | 2021-10-19 17:50:58 -0400 docs: MSYS2 install tweaks for python issues The main contentful change here is to be consistent about using the binary name `python3` instead of `python`. The reason for this is that apparently these days `base-devel` forces install of the `python` package as a dep of various things included in it, and we also install the `mingw-w64-x86_64-python` package as part of that toolchain. Having the latter installed (which uses the `python3` binary name) seems to break regular `python` in current MSYS2 versions, because when you load `python` the python path (as seen in `sys.path`) gets set wrong, to the mingw toolchain version. Because of this it fails to load any c libs due to binary incompatibility (`math` being the one that shows up when trying to import `yaml`). Anyways, this confusing situation doesn't actually impact building crawl, because the build steps themselves already use `python3`, it just means this step that was supposed to check `yaml` was producing an error. The situation is possibly an outright MSYS2 bug, though I'm not entirely sure where to report or ask about it. Because the build actually works fine as-is, I don't think any deeper change is merited on our part (e.g. uninstalling one or the other python, each of which is a dep to a corresponding version of gdb). This commit resolves #2195, which proposed a less direct workaround for getting an attempt to import `yaml` not to crash. -------------------------------------------------------------------------------- 5d44ed7e61 | robertxgray | 2021-10-19 22:22:58 +0200 Show gold for Gozag worshippers in small layout Also adjust Android permissions -------------------------------------------------------------------------------- b91baff9cc | Nicholas Feinberg | 2021-10-18 21:06:12 -0700 Maybe fix an engulf bug -------------------------------------------------------------------------------- 66d609a797 | Nicholas Feinberg | 2021-10-18 21:03:36 -0700 Make living spells more reckless (causes bugs) Allow living iceblast spells to target an adjacent player, removing their regard for their own existence. This probably causes some new bugs. I don't know what, but I suspect there's something. -------------------------------------------------------------------------------- 4011e67c31 | Nicholas Feinberg | 2021-10-18 17:03:51 -0700 Put the last nail in the coffin (Sastreii) New Crypt door tiles of all shapes and sizes. Dead cool. -------------------------------------------------------------------------------- 30a9fa1a03 | nicolae-carpathia | 2021-10-18 17:15:42 -0400 Add/fix synonyms for statue tiles, vault that uses them Fixes the synonyms for the two new statue tiles, adds synonyms for all the statue tiles that didn't have any, and adds the new tile synonyms to dreamdust_ecumenical_altar_statues, which uses the synonyms to make sure the two statues placed are identical. -------------------------------------------------------------------------------- a8797d1ae1 | Nicholas Feinberg | 2021-10-17 21:19:34 -0700 Clear engulf after rising flame (Prakerore) -------------------------------------------------------------------------------- d288e3ce45 | Kate | 2021-10-18 04:24:54 +0100 Clear engulf status when monsters swap places (Daunt) -------------------------------------------------------------------------------- 1ffa25e84c | Kate | 2021-10-18 04:03:29 +0100 Fix a header-build-tests error -------------------------------------------------------------------------------- e885453c89 | Kate | 2021-10-18 03:59:30 +0100 Improve Yara's Violent Unravelling targeter Display a message when aiming at a monster that can't be unravelled. -------------------------------------------------------------------------------- 182c74e625 | Kate | 2021-10-18 03:59:30 +0100 Make monster Injury Mirror dispellable Monster enchantments are generally dispellable even if they're divine/priestly in origin and undispellable on the player (see 8836bdb7d9), but Injury Mirror had been missed from the updated list. -------------------------------------------------------------------------------- 48537fa010 | Kate | 2021-10-18 03:59:30 +0100 Remove an obsolete spell targeter -------------------------------------------------------------------------------- 3278d6a771 | Nicholas Feinberg | 2021-10-17 07:53:47 -0700 Take new Sastreii tiles for granite Two new statue tiles. -------------------------------------------------------------------------------- 6a1b92adce | Kate | 2021-10-17 14:48:37 +0100 Fix Refrigeration and OTR targeters (Goratrix) -------------------------------------------------------------------------------- c014c758b5 | Kate | 2021-10-17 14:39:43 +0100 Reduce some code duplication -------------------------------------------------------------------------------- daf460b524 | Kate | 2021-10-17 02:07:26 +0100 Remove a duplicate #include -------------------------------------------------------------------------------- 47fb96b963 | Kate | 2021-10-17 01:51:07 +0100 Upgrade Corpse Rot and PoG targeters Correctly handle corridors and adjacent walls for Corpse Rot, to show when it has a chance of spilling out and when it's guaranteed to affect a cell. Highlight squares that overlap for both portals in the Passage of Golubria targeter, to make it visually clearer that they're two distinct target areas. -------------------------------------------------------------------------------- 0a521eb1f5 | Kate | 2021-10-17 00:35:00 +0100 Adjust targeter_radius behaviour Change a number of radius spell targeters so that the caster's tile isn't automatically displayed as affected, unless it's actually a spell that can affect the caster such as Static Discharge. For Battlesphere, also slightly adjust the spell's behaviour so that the valid squares for recalling an existing battlesphere are the same as the squares for summoning a new one. -------------------------------------------------------------------------------- ee0c6bb3a6 | Kate | 2021-10-17 00:35:00 +0100 Add a spell targeter for Passage of Golubria -------------------------------------------------------------------------------- 50bfc30901 | Kate | 2021-10-17 00:35:00 +0100 Make Passage of Golubria's range scale with power Passage of Golubria was one of the few remaining spells that ignored spellpower completely, and was a desirable tool for anyone able to cast it. To make it less useful with low investment, scale its range with spellpower, from 2 at 0 power up to full LOS at 100 power. For practical spellpower values, this results in range 4/5 with minimal skill to cast the spell, and range 6/7 with more skill investment. -------------------------------------------------------------------------------- 6308e9f754 | Kate | 2021-10-17 00:34:56 +0100 Add a spell targeter for Corpse Rot -------------------------------------------------------------------------------- db29cd8f73 | Kate | 2021-10-17 00:12:34 +0100 Make Corpse Rot create more clouds with higher power Corpse Rot was one of the few player-castable spells that ignored spellpower completely, and was also fairly awkward to make good use of despite the strength of miasma clouds. Allow it to rot multiple corpses from a single stack, and give it a power-dependent chance of creating an extra miasma cloud per corpse in LOS. With high power and/or high numbers of corpses, also allow it to spread out to radius 2, once all adjacent squares have been filled with miasma. -------------------------------------------------------------------------------- 162e43154e | Nicholas Feinberg | 2021-10-16 10:17:14 -0700 Add a howler of a new tile (Sastreii) New Bunyip tile. -------------------------------------------------------------------------------- 0e9bf3705b | Nicholas Feinberg | 2021-10-16 09:18:30 -0700 Clarify explore mode (venx) -------------------------------------------------------------------------------- 4c3c5a04a9 | Nicholas Feinberg | 2021-10-16 08:29:54 -0700 Add ?/ to the main menu TODO: - Somehow show a proper response when regex searches (e.g. ?/M) don't find anything, instead of silently failing. (This works in local tiles and console, but not in webtiles.) - Tiles? -------------------------------------------------------------------------------- c179e30c89 | Nicholas Feinberg | 2021-10-14 11:12:35 -0700 Let Discord wake sleeping monsters Instead of leaving them unaffected. Seems simpler to reason about for players. -------------------------------------------------------------------------------- df75b09677 | Nicholas Feinberg | 2021-10-14 11:06:11 -0700 Simply divine tile changes (Sastreii) New tiles: - Angel - Daeva - Profane Servitor - Pikel - Goblin -------------------------------------------------------------------------------- 1651b1f1e0 | Kate | 2021-10-14 03:57:15 +0100 Update Pacification description It was changed in ff9e726d5e to give full XP. -------------------------------------------------------------------------------- 144af121cd | gammafunk | 2021-10-13 13:11:13 -0500 feat: Roomify Vaults branch Desolation entries Similar to what was done with 1b783e53 for Wizlab entries, move Vaults branch Desolation entries into rooms. Add floor border to some entries so they work better as Vaults rooms. This border won't cause any issues for placement outside of Vaults (i.e. in Elf), so I'm not going to CLEAR it outside of Vaults branch. One entry is a large diamond shape that won't work terribly well as a Vaults room, so it has 0 weight only for Vaults. -------------------------------------------------------------------------------- df74fcfb57 | gammafunk | 2021-10-13 13:10:30 -0500 feat: Move Vaults branch Wizlab entries to rooms Currently, Wizlab entries in the Vaults branch place through the normal CHANCE method as minivaults, but non-room vault placement doesn't work well in Vaults. These vaults routinely destroy parts of the Vaults layout, making the room vaults placed by the layout less effective. In the worst case, ghost vault rooms can be partially broken, releasing the ghost vault contents into the level without player interaction. This commit does for Wizlab entries the same thing as was done for ghost vaults: give them a special tag and Vaults room generator that applies the desired chance, placing the entries as rooms if the chance is successful. We use the existing entries by modifying the setup function. No layout changes were necessary to adapt these vaults into Rooms, but I did clean up the decorations in mu_enter_wizlab_7 to be more Zot-like and reglyphed and cleanup up a couple other vaults. and making some slight changes to Wizlab entry vaults where necessary. -------------------------------------------------------------------------------- a7a6a45411 | gammafunk | 2021-10-13 11:34:25 -0500 fix: Generalize a vault depth range Use depth ranges that don't indirectly reference branch length. -------------------------------------------------------------------------------- faba86c3f8 | gammafunk | 2021-10-13 11:34:25 -0500 feat: Merge door vaults maps For the variations of door_vault placing in the Vaults branch, we previously had separate vaults for these. Similar to to the ghost vault merge done in 17de5e6, this commit merges the Vaults branch variants into their parent vaults, adjusting the parent to have a ring of floor tiles and the necessary tags. -------------------------------------------------------------------------------- 71136c5590 | nicolae-carpathia | 2021-10-12 13:07:34 -0400 Slightly improve documentation for vault ORIENT: statement -------------------------------------------------------------------------------- 66cdd625d7 | advil | 2021-10-12 10:05:19 -0400 fix: condense logging on webtiles connection timeout Based on 7bb4a8268b, one thing I can say is that in Tornado 4+, when a timeout finally reaches the point of closing out the socket, there can be a really large number of async write Futures waiting to be failed, that all get their callbacks triggered within a few ms of each other. This situation in and of itself indicates some issues in our code, e.g. one culprit apparently is lobby messages, which look to be really inefficient and scale badly with the number of players on the server. However, it seems possible here that the server thrashing conditions are triggered by just too much logging in response to this sudden burst of callbacks. I still haven't replicated any of this locally, so this is all somewhat speculative. However, for exceptions indicating that the connection is closed, now that I have seen some logging, I don't think there's a huge need to keep the verbose logging on (it can always be restored if I need more data). This commit logs just the first one, and keeps track of the total number of failed callbacks on connection end, printing that in the final close message. Regular exceptions will still be fully logged, if they happen. This commit also adds correct handling for StreamClosedError in tornado 4. -------------------------------------------------------------------------------- 4eb62b627b | advil | 2021-10-11 22:30:09 -0400 fix: remove debug code oops -------------------------------------------------------------------------------- 7bb4a8268b | advil | 2021-10-11 22:28:55 -0400 feat: more debugging info for Future exceptions This is aimed at debugging CAO thrashing on disconnects, which I can't replicate locally. This leads to extremely spammy debug messages when this issue happens, so may need to be reverted, but this should be quite rare in normal circumstances. -------------------------------------------------------------------------------- 7e9dba17c3 | Kate | 2021-10-11 00:04:19 +0100 Shorten some welcome messages So that they'll fit on a single line in the message area. -------------------------------------------------------------------------------- 885e983cc2 | Kate | 2021-10-10 23:29:32 +0100 Update CREDITS.txt -------------------------------------------------------------------------------- 1c50d1d167 | Perry Fraser | 2021-10-10 23:28:39 +0100 Fix: redraw tiles when breath ability gained (#2142) Before, until TilesFramework::update_tabs() was called, the tiles abilities pane would not appear when receiving your first ability by way of draconian breath. This amends that by calling layout_statcol when Draconian maturity is reached. -------------------------------------------------------------------------------- 770bde8897 | Perry Fraser | 2021-10-10 23:28:26 +0100 Fix: don't list walljump twice in the ability pane while silenced (#2121) Closes #2120. -------------------------------------------------------------------------------- 2b6bb2fd11 | Kate | 2021-10-10 21:33:44 +0100 Don't let grunt_zot_stairs_overgrown turn orbs of fire into oklobs Fixes a Zot stair vault being able to turn any monster into an oklob if it's standing in one of the spots where a valid plant used to be. -------------------------------------------------------------------------------- 0d26b95db6 | Kate | 2021-10-10 17:24:45 +0100 Let monsters use potions of brilliance -------------------------------------------------------------------------------- ad9de1bfc8 | Kate | 2021-10-10 17:07:06 +0100 Don't let monsters read scrolls while unable to speak Scroll-reading was prevented under silence, but not when engulfed or muted by Zin recite. -------------------------------------------------------------------------------- c2b38c0785 | Kate | 2021-10-10 17:07:06 +0100 Adjust some monster emergency spells Remove Minor Healing and Invisibility from a few books that were already quite full or where they weren't likely to be relevant (orc high priests, sphinxes, and deep troll shamans lose Minor Healing, and necromancers and the Enchantress lose Invisibility). -------------------------------------------------------------------------------- 33d3b24fc1 | Kate | 2021-10-10 17:07:06 +0100 Remove some unused handling for monster scroll use Pacified monsters would in theory try and use scrolls of blinking and teleportation, but the scroll use check also required them to have a foe nearby, which would never be the case. -------------------------------------------------------------------------------- e0297cdf13 | Kate | 2021-10-10 17:07:01 +0100 Remove Teleport Self as a monster spell The timely follow-up to 9d39c9a61c - only Sonja, Prince Ribbit, and Maurice were left using it, and for all of them it was still unlikely to be particularly interesting to deal with. -------------------------------------------------------------------------------- 84cb2ea78e | Kate | 2021-10-10 01:44:07 +0100 Reduce the electrocution brand's chance to trigger Electrocution highly overperforms as a weapon brand - not only is it rare for monsters to resist it, its damage was high enough to compete with multiplicative brands such as vorpal/freezing/flaming even on larger, slower weapons. Reduce its chance to trigger from 1/3 to 1/4 per hit, to make it slightly less of an obvious best choice. -------------------------------------------------------------------------------- 587649e3ce | Kate | 2021-10-10 01:44:07 +0100 Let LRD work on permarock walls Since the main function of permarock is just to be indestructible, and LRD no longer destroys walls. -------------------------------------------------------------------------------- a6156daa3a | Kate | 2021-10-10 01:42:58 +0100 Make Demonic Touch's attack chance independent from str/dex Give it a fixed 2/5 chance to trigger, rather than the standard str/dex check followed by a 1/2 chance, since its damage is also independent from stats and other bonuses. The aux attack still has to successfully hit the target (and uses the normal tohit calculations), but should now be more effective early, before the main draw of the vulnerability effect shows up. -------------------------------------------------------------------------------- 1f24579cd5 | Kate | 2021-10-10 01:28:55 +0100 Clarify pain brand description for Djinn As with elemental staves, add to the description to indicate that spellcasting skill isn't good enough to make use of pain weapons. -------------------------------------------------------------------------------- d89666f14f | Kate | 2021-10-10 01:28:55 +0100 Allow training currently-useless skills with !XP And also allow toggling the display of base skills/enhanced skills. -------------------------------------------------------------------------------- 6c90c26265 | Kate | 2021-10-10 01:28:31 +0100 Fix targeting not being reset on phantom mirrored enemies Targeting was being reset on the caster instead of on the mirrored target. -------------------------------------------------------------------------------- da0c5dcf31 | Kate | 2021-10-10 01:15:32 +0100 Fix a KMONS line in nzn_ghost_randoct Looks to have been accidentally broken when the vault was refactored in 388b075d1f. -------------------------------------------------------------------------------- e759d193ff | Santiago Acosta | 2021-10-09 23:53:25 +0100 Fix some Phantom Mirror bugs Bug 1 is simple: When a monster casts phantom mirror on another monster, the casting monster is unentangled/unconstricted. This behaviour is unintended, as clearly, the monster being copied should be freed instead. Bug 2 is more subtle: When a monster is copied, its constriction status is not copied (as intended). However, the enchantment applied by BVC to indicate direct constriction IS copied. This results (in tiles) in a graphical bug, where the monster has the BVC icon, but can move around and act as normal. Closes #2122. -------------------------------------------------------------------------------- e5425f880d | Nikolai Lavsky | 2021-10-09 23:45:07 +0100 fix: add a usefulness check for Elyvilon's self-healing abilities Without such check, it's easy to over-heal and waste piety. Closes #2169. -------------------------------------------------------------------------------- 19d156f19b | Aliscans | 2021-10-09 23:45:07 +0100 Fix: Give useful notes when an ally dies. Previously, the death of a unique ally would be marked with the note "Your ally died". Insert the name of the deceased. Closes #2133. -------------------------------------------------------------------------------- 500345e458 | MainiacJoe | 2021-10-09 23:45:07 +0100 Take note when a Ds is revealed as monstrous [Committer's note: Monstrous status was tracked as a DGL milestone, but wasn't conveniently visible from in-game. Closes #2125.] -------------------------------------------------------------------------------- f509bdd586 | MainiacJoe | 2021-10-09 23:45:07 +0100 Take note when player prays at an ecumenical altar In the morgue, it will be referred to as, "the altar of an unknown god," since I've discovered that some players think the term, "ecumenical altar" refers to an altar in the Ecumenical Temple. -------------------------------------------------------------------------------- 0446da8ef9 | nicolae-carpathia | 2021-10-08 20:48:43 -0400 Add some entries to miscname.txt This includes entry messages for when you first arrive in the dungeon, along with some new adjectives for the Orb of Zot and also some new Halloween variants, which I hadn't realized were even a thing. Also includes some new messages for Hell effects. Fun times all around! -------------------------------------------------------------------------------- 0357d9c091 | nicolae-carpathia | 2021-10-08 16:48:35 -0400 Fix a Halloween typo, just in time -------------------------------------------------------------------------------- 4a3272bca7 | Nicholas Feinberg | 2021-10-08 11:26:41 -0700 Clarify Discord sleep failure (CarefulOdds) -------------------------------------------------------------------------------- 3c9886e45e | Kate | 2021-10-07 23:21:09 +0100 Add a missing comma (perryprog) And a related compile check. -------------------------------------------------------------------------------- 4e9751bbfc | advil | 2021-10-07 17:41:34 -0400 docs: remove an obsolete sentence in options documentation Since e74157ce7a5c and preceding commits, no artefact can be evoked in the way that the removed sentence was alluding to. -------------------------------------------------------------------------------- 35d0774509 | Kate | 2021-10-07 20:33:17 +0100 Fix an off-by-one error -------------------------------------------------------------------------------- 1ca825e530 | Kate | 2021-10-07 19:37:03 +0100 Add a compile check for some aux attack handling -------------------------------------------------------------------------------- e23450071b | Kate | 2021-10-07 19:32:26 +0100 Give monster draconians fixed colours per job While the draconian colour/job system works better than it did on monster demonspawn (since they're more noticeably differentiated by their breath weapons), it still allows for a very large set of possible monsters. Instead give every draconian job a single default colour when randomly generated: white = stormcaller, green = monk, purple = shifter, yellow = annihilator, black = knight, and red = scorcher. Pale and grey draconians already don't randomly generate. Vaults have been edited to stick to these combos, but in cases where the vault is self-contained and based on a specific theme they can manually override them (for example a fire-themed vault could place red draconians of any job, or a conjurations-themed vault could place annihilators of any colour, as long as the vault sticks to a single colour or job in each case). -------------------------------------------------------------------------------- 7f772adbe3 | Nicholas Feinberg | 2021-10-07 11:14:23 -0700 Add Sastreii to the dev team Welcome! 🎊 🎊 🎊 -------------------------------------------------------------------------------- baef9634d7 | gammafunk | 2021-10-06 11:44:22 -0500 fix: ghost vault logic The ghost vault logic changes in 17de5e62 were partially incorrect and messed up ghost vault placement. We need to have ghost vaults placing outside of the Vaults branch always set a CHANCE, but not set CHANCE for the Vaults branch. Furthermore ghost vaults exclusive to the Vaults branch should only exist as so-called Vault rooms in the file `vaults_rooms_ghost.des`. The vaults in this file have no set DEPTH so that they never attempt to place as minivaults but are still selectable by the `vaults_ghost` tag. However 17de5e62 had these vaults also set a CHANCE, which caused this to be applied to a default depth of *all levels*, even ones not included in the ghost vault range. Furthermore the conditional in `ghost_setup()` incorrectly didn't set CHANCE if the `vaults_setup` argument was true, even for ghost vaults that placed both in Vaults and outside of Vaults. This commit fixes these issues. For Vaults exclusive ghost vaults in `vaults_rooms_ghost.des`, we have them set a new `set_chance` arg for `ghost_setup()` to false to prevent setting the CHANCE at all. The vaults in this file thus only rely on the `vaults_ghost` tag to be used (and only in the Vaults branch). This argument defaults to true, so ghost vaults outside of this file will get their CHANCE set properly for non-Vaults branches. Furthermore we give any such vault a CHANCE weight of 0 specifically in Vaults. This prevents a ghost vault that places both outside of Vaults (as a CHANCE vault) and inside of Vaults (as a ghost vault room) from ever independently placing in Vaults branch as a minivault via CHANCE. -------------------------------------------------------------------------------- ad74161d1b | Kate | 2021-10-06 16:46:37 +0100 Don't crash on chardump after making tentacle attacks Caused by adding a new aux attack type but not handling it in action count displays, oops. -------------------------------------------------------------------------------- 539b0f7ac7 | Kate | 2021-10-06 02:29:16 +0100 Remove talons as a demonspawn mutation Unlike the other body slots with multiple options (horns/antennae, and now claws/demonic touch), there's no noticeable mechanical distinction between hooves and talons, and hooves are much more demonic. -------------------------------------------------------------------------------- 7b6c64ccd2 | Kate | 2021-10-06 02:12:21 +0100 Add a demonspawn gloves slot mut: demonic touch The demonic touch mutation grants an offhand touch attack which deals a small amount of irresistible damage (not increased by skills/stats, and not reduced by AC). At level 3 it blocks the gloves slot and also applies the vulnerability status effect for a short duration. -------------------------------------------------------------------------------- b5b0ca8da5 | Kate | 2021-10-06 02:12:21 +0100 Add a demonspawn cloak slot mut: weakening stinger The weakening stinger mutation gives demonspawn a tail and a stinger, granting a tail-slap aux attack. At level 3, it becomes large and sharp enough to block the cloak slot, and begins to apply the weakness status on hit (to all except undead and nonliving monsters). -------------------------------------------------------------------------------- 4e51291bfa | Nicholas Feinberg | 2021-10-05 16:44:15 -0700 Make berserk monsters break more doors This is pure theme, but it feels right, you know? -------------------------------------------------------------------------------- deb3d7f7b4 | Nicholas Feinberg | 2021-10-05 14:35:25 -0700 Supply Snake stone surfaces (Sastreii) ssssssss -------------------------------------------------------------------------------- ff9e726d5e | Nicholas Feinberg | 2021-10-05 12:05:35 -0700 Make Pacify give full XP As with Banishment, Pacification is already something the player dedicates significant resources to achieve - piety, mp, Invocations skill, a god... Getting half XP feels bad, and there's no balance requirement for it, so toss it. -------------------------------------------------------------------------------- 07eab104ef | Nicholas Feinberg | 2021-10-05 12:05:35 -0700 Remove portal mimics (hellmonk) A little bit too cruel. Timed portals are a fun minigame; having a chance of a no-prize isn't great. I'll add some kind of mimics somewhere else someday, Hep willing... -------------------------------------------------------------------------------- 3e9935cbe5 | gammafunk | 2021-10-05 11:42:59 -0500 fix: Correct a lua syntax error (Sergey) A bad search and replace, oops. -------------------------------------------------------------------------------- cfc00ec14d | Nicholas Feinberg | 2021-10-04 22:11:34 -0700 Solve the problem of evil Refactor away MH_EVIL to simplify the concept of holiness. -------------------------------------------------------------------------------- 6ae9c628c9 | Nicholas Feinberg | 2021-10-04 22:11:12 -0700 Fix monster sustain limit descriptions 'obsidian statue can sustain at most three...' -> 'The obsidian statue can sustain at most three...' -------------------------------------------------------------------------------- 3aaae7bc06 | Nicholas Feinberg | 2021-10-04 21:53:27 -0700 Don't color SH red while Petrifying? Since, per 7dc2aef8cabe0b31, Petrifying no longer disables SH. (Petrified does.) I couldn't make the coloring work while testing, but hopefully it does. -------------------------------------------------------------------------------- fe5b701de9 | Kate | 2021-10-05 01:08:41 +0100 Update some vault demonspawn The Pan Orc vault previously used non-monstrous base demonspawn, and Wucad Mu's monastery used monstrous base demonspawn. Re-stat the dummy demonspawn monster to have similar stats to old monstrous demonspawn and put them back in both vaults, reducing the number of other threats (knights, sorcerers and high priests) in the Orc end vault to compensate for the more dangerous demonspawn. Also restore these buffed demonspawn to the zombie spawn list. -------------------------------------------------------------------------------- b65a5730ee | Kate | 2021-10-05 01:08:12 +0100 Give demonspawn corruptors entropic weave Replacing their temporary malmutation, since there's a decent amount of permanent malmutation in Pan anyway, and corrosion is a more immediate and reliable threat. -------------------------------------------------------------------------------- 82a91f0f04 | Kate | 2021-10-05 01:08:12 +0100 Adjust demonspawn weapon sets Greatly trim down the list of weapons in the weapon sets used by demonspawn corrupters and black suns (keeping the same odds of them having a demon weapon). -------------------------------------------------------------------------------- b058677d0a | Kate | 2021-10-05 01:08:12 +0100 Remove monster icemail As with Ozocubu's Armour, giving monsters extra AC that sometimes melts isn't worth the extra complexity compared to just giving them the AC unconditionally. Demonspawn stats have been adjusted in the previous commit to be more appropriate per-class without the icemail bonus. -------------------------------------------------------------------------------- 10ef46f4bb | Kate | 2021-10-05 01:08:06 +0100 Simplify monster demonspawn Monster demonspawn using draconian-style colour/job combinations was flavourful but ultimately just made them overcomplicated, since base demonspawn were mostly unremarkable and didn't provide very meaningful distinctions other than monstrous demonspawn having much more health and damage than the rest. Instead remove all base demonspawn, and make each of the classed demonspawn effectively have a fixed base type: warmongers are monstrous (extra health, damage and 2 aux attacks); blood saints are infernal (rF+++, +3 AC and AF_FIRE attacks), black suns are gelid (rC+++, +6 AC and SInv), and corrupters are torturous (rN+++, +3 EV and 1 aux attack). They also all gain increased willpower, since previously classed demonspawn were (presumably unintentionally) inheriting the reduced willpower of their base type. The old separate base/job tiles have been updated and merged together by wormsofcan. Demonspawn bands are adjusted to contain a single greater demon and 1-2 other classed demonspawn. -------------------------------------------------------------------------------- 249bb1af34 | advil | 2021-10-04 17:30:12 -0400 fix: use correct keymap context for level maps (Nasst) This seems to have gotten lost in translation when this view was widgetified in 08ff59a6b337511f. I guess that indicates how much people actually use this feature. -------------------------------------------------------------------------------- 0edeeca3e2 | Kate | 2021-10-04 21:44:41 +0100 Tweak Call of Chaos effects again Move berserk to the list of rare "backfire" effects, since allied monsters are often spell-based, and the positive effects can already apply haste and might separately (but it's fun to have at least some chance of sending nearby demons berserk). -------------------------------------------------------------------------------- 9b3319b32b | Nicholas Feinberg | 2021-10-04 12:58:16 -0700 Don't let wandering monsters break doors Reduce ambient noise. -------------------------------------------------------------------------------- 992ecb606c | Nicholas Feinberg | 2021-10-04 12:55:12 -0700 Break doors less often To reduce incidental noise. 1/5 instead of 1/3 chance. -------------------------------------------------------------------------------- 388b075d1f | gammafunk | 2021-10-04 12:07:40 -0500 feat: Ghost vault adjustments This commit expands the placement of a number of ghost vaults, allowing them to place in Vaults as ghost vault rooms, and in some cases allowing them to place in additional branches. It also adjusts monster and loot placement for a few vaults. List of changes by vault: hellmonk_ghost_happy_afterlife: Allow this vault to place in all branches. It's pretty general, hence good to have in the set of simple ghost vaults that can place everywhere. Replace the second potion with a scroll. The former was itself a replacement for the removed ration, and while two potions works fine thematically, so does the idea of having good reading material for the afterlife. More loot variety is also nice. nzn_ghost_randoct: Allow this vault to place in Vaults. Also revamp its use of monster statues to consistently have a chance to place a relevant statue everywhere it places. Use orange crystal statues for later depths and retain its use of ice statue or oklob for Lair and earlier Dungeon. Make the use of branch-specific "boss" monsters more consistent in terms of how those are used along with multiple ghosts, so that we always have the chance to have up to three ghosts, instead of this limit being lower for some of the later placement depths. Refactor some of its conditional code. gammafunk_ghost_necromancy: Tweak its monster placement NSUBST to place more at minimum, but with the same average and clean up a few monster lists to pose a better threat for certain branches. gammafunk_ghost_ooze: Allow it to place also in Elf, Vaults, Depths, and Zot, choosing an appropriate slime distribution for each branch. Mix in some of the debuffing eye monsters. This vault began with a specific "death" theme using nothing worse than death oozes, but those are gone, so just go with the more general theme of Slime Pits monsters. gammafunk_ghost_mausoleum: Allow it to place also in Spider and Vaults, using appropriate undead for those branches. Tweak the Zot derived undead list to use only a few choice monsters. biasface_ghost_orc_armoury: Add two good potion or scroll loot items that places sometimes for D:14-15 and always for Vaults. gammafunk_ghost_smash: Allow it to place also in Vaults and Depths. Rework the good weapon equipment of the highest tier monsters to sometimes include giant (spiked) clubs. Introduce fire giants, frost giant, ironheart thundehulks, and iron giants, using them appropriately in the later placement Depths. gammafunk_ghost_wrathful_warriors: Allow it to place in Vaults. Tweak the monster equipment so that ranged weapons aren't used, since Trog no longer gifts launchers/ammo. Tweak monster lists to remove ranged-specific monsters. gammafunk_ghost_abyssal_escape: Allow it to place in Vaults. Improve the equipment given to certain distortion wielding monsters. Remove the Ring of the Hare as a potential loot item, as it now has no translocations theme. Remove trees from vault border, so it can't be broken into trivially. Mark the vault as `transparent` with the inner portions appropriately masked as `opaque`. hellmonk_ghost_big_iron: Allow it to place in Vaults and Crypt. Add some intermediate upgrading of hat quality. -------------------------------------------------------------------------------- 08eb9380c9 | gammafunk | 2021-10-04 12:05:03 -0500 feat: Improve a monster weapon selection function The function `dgn.monster_weapon` is used to give vault monsters higher quality weapons appropriate to their function. Add one-handed and two-handed classes for "warrior" and "knight" to allow vaults using this function to specify the handedness of the desired weapon. This is useful when when the original monster always recieves a weapon of a specific handedness, e.g. tengu monsters always have a buckler and ancient champions always use a two-hander. Update a few ghost vaults to use these new classes where appropriate. -------------------------------------------------------------------------------- 17de5e62ec | gammafunk | 2021-10-04 12:04:45 -0500 feat: Simplify Vaults branch ghost vaults Currently for ghost vaults in the Vaults branch, we maintain separate copies of existing vaults. This was done because Vaults branch ghost vaults must be defined as so-called vault rooms that have special tagging and, in some cases, changes to layout relative to the original ghost vault. However in all cases this wasn't actually necessary, since the original vault could have relatively minor modifications allowing it to be uses as-is in both branches. This commit merges the Vaults branch vaults back into the original vaults, mainly by copying over any Vaults-specific monster and loot definitions and by generalizing the ghost vault setup code to do any required Vaults branch tagging and setup. We remove the `vaults_ghost_setup()` function, and modify `ghost_setup()` to have a boolean argument that performs any setup related to the Vaults branch when the argument is true. We also modify the terrain of these vaults to give more spacing near areas that could create single square corridors should the vault place as a Vaults room. In some cases this just adds a row of floor near the vault entrance, but other vaults need an addition border of floor to surround the entire vault. Transporter vaults are now marked `passable` (for Vaults) and `transparent` with relevant sections masked with `opaque`. The transparent/opaque masking isn't required, but helps the layout code properly determine the vault's connectivity. The ghost vault setup function is now documented. The ghost vault guidelines will be updated in the future. -------------------------------------------------------------------------------- d048e4c10b | gammafunk | 2021-10-04 06:55:55 -0500 fix: Rework the border of a ghost vault In ebering_ghost_funeral_grove, the vault border is made of trees with a destruction veto. This isn't revealed to players except when they attempt to destroy the tree, which is spoilery. Additionally it has odd gameplay side effects with respect to certain spell effects. This commit adds a border of stone to the vault, retaining the use of trees for the vault's interior, and removes the tree destruction veto. The vault's theme still very much comes across with this change. -------------------------------------------------------------------------------- afb812fb24 | gammafunk | 2021-10-04 06:55:55 -0500 feat: Move a Shoals-only ghost vault to shoals.des Part of a forthcoming reorganization of ghost vaults. Now dat/des/variable/ghost.des is for ghost vaults that place in multiple branches. Similarly to how we handle other vaults, any ghost vaults that place in only one non-Dungeon/Depths branch go in the respective branch file. -------------------------------------------------------------------------------- 9f6c0e134a | Kate | 2021-10-04 03:12:00 +0100 Simplify Call of Chaos Greatly reduce the number of effects it can apply, to slightly reduce the interface burden of having to check lots of monsters for different status effects. -------------------------------------------------------------------------------- aa1e17a07e | Kate | 2021-10-04 03:09:31 +0100 Adjust Plane Rend and Forceful Invitation Tweak both branch-based summoning spells to be more distinct and to summon better threats. Remove Lair and Orc as options from Forceful Invitation, remove all the Lair branches from Plane Rend to focus it on the deeper branches, and adjust a number of the summon sets for both spells. -------------------------------------------------------------------------------- 8e0189d5dd | Kate | 2021-10-03 23:05:21 +0100 Make Zin and TSO more effective at cleaning up blood -------------------------------------------------------------------------------- 6fc52098c6 | Kate | 2021-10-03 22:08:30 +0100 Reword an unequip message -------------------------------------------------------------------------------- cf4520f741 | Kate | 2021-10-03 22:03:23 +0100 Disable more unrand-created allies when allies are forbidden So that reaping from Zonguldrok and demons from the obsidian axe are consistently blocked under both Ru's Sacrifice Love and Okawaru's no-allies conduct. -------------------------------------------------------------------------------- 20facfdd61 | Nicholas Feinberg | 2021-10-03 09:44:27 -0700 Disable Zonguldrok reaping under Oka (dilly) -------------------------------------------------------------------------------- 333b8329f1 | Nicholas Feinberg | 2021-10-02 20:35:27 -0700 Re-randomize energy temporarily While we continue discussion. We'll hopefully remove it again in a little bit. Reverts c20955654e95f046d01c06ff82ebef2e971ceded. -------------------------------------------------------------------------------- d698ae2ba6 | Nicholas Feinberg | 2021-10-02 20:00:55 -0700 Clarify Battlesphere description (kab) -------------------------------------------------------------------------------- c2ca4e2432 | Nicholas Feinberg | 2021-10-02 16:33:20 -0700 Refactoring -------------------------------------------------------------------------------- bdb9d174a4 | Nicholas Feinberg | 2021-10-02 13:46:38 -0700 Break doors In certain circumstances, it's possible for players to door-dance, repeatedly closing doors in the face of an enemy who then opens the door, etc. This allows the player time to heal and gives a decent chance the enemy will simply forget about them. There's already a chance for doors to creak, creating noise, but this has a very limited impact on the tactic. To weaken this somewhat (in context of recent changes to random energy), give a 1/3 chance of doors breaking whenever monsters open them. This turns them into 'broken doors', which can be re-locked by vault wardens but are otherwise useless. (If we simply destroyed the doors, players would be incentivized to repeatedly open doors until they broke in some circumstances in Vaults, to mitigate vault wardens.) This should have fairly little impact on most players, but it sure was a pain in the butt to make crude sprites for. -------------------------------------------------------------------------------- c20955654e | Nicholas Feinberg | 2021-10-02 13:46:38 -0700 Remove random energy Random energy has a long and dismal history. It was invented as a means to discourage repetitive and boring play patterns (pillar-dancing, door-dancing, break-dancing, etc), but signally failed to do so. Instead, it obfuscated game mechanics, added situations that felt 'unfair', and generally kludged everything up. It was a bold experiment, but it's been clear for many years now that it's failed. Let's move on. -------------------------------------------------------------------------------- 0594cd7a83 | Kate | 2021-10-02 18:17:59 +0100 Prompt when trying to Drain Life with no valid targets This could probably use a proper targeter, too. -------------------------------------------------------------------------------- f117bdfcbe | Kate | 2021-10-02 17:54:14 +0100 Fix Drain Life tracer -------------------------------------------------------------------------------- 36912a808a | Kate | 2021-10-02 17:46:23 +0100 Fix Drain Life working on firewood -------------------------------------------------------------------------------- 98e7288b7f | Nicholas Feinberg | 2021-10-02 09:42:27 -0700 Fix piercing allies (dilly) 98ec5579a34455a245d inadvertently disabled piercing for all allies with beam-type attacks (lightning spires, merfolk javelineers, etc). -------------------------------------------------------------------------------- a2639ab843 | Nicholas Feinberg | 2021-10-01 17:00:07 -0700 Power up a leggy boy (Sastreii) New Gloorx Vloq tile. Did you know that Gloorx had spooky shadow shoulder tendrils this whole time? I didn't! -------------------------------------------------------------------------------- b15b5f7f7d | Kate | 2021-10-02 00:13:08 +0100 Adjust some demon resistances Remove rPois from hell hounds, as with all the other demons that are closely related to living creatures, and give hell hogs fire immunity. -------------------------------------------------------------------------------- 717728bcc0 | Nicholas Feinberg | 2021-10-01 09:17:22 -0700 Restore treeform rTorm Broken by 662dcd36ddf41f5a366a00f7f19567d347cff114 . See comment about some issues here. -------------------------------------------------------------------------------- b193047a1f | Kate | 2021-10-01 01:57:06 +0100 Tweak wording -------------------------------------------------------------------------------- 6b7ffc0d7b | Kate | 2021-10-01 01:46:25 +0100 Fix Pacification working on sleeping undead Caused by 70bc44f8 changing the pacification check to look specifically for the "sleeping" status (applied to natural, holy and demonic monsters), but not the "dormant" status (applied to undead, nonliving and plant monsters). -------------------------------------------------------------------------------- 738fa26ca9 | Kate | 2021-10-01 01:46:25 +0100 Improve Pacification failure messaging -------------------------------------------------------------------------------- d1ff7b2e8d | Kate | 2021-10-01 01:46:25 +0100 Make Elyvilon care about plants Lets Elyvilon lifesaving work on plant allies, and lets Pacification work on intelligent plants - most plants are mindless so still can't be affected, but thorn hunters (animal intelligence) and shambling mangroves (human intelligence) can now be pacified. -------------------------------------------------------------------------------- 399c192ba0 | Kate | 2021-10-01 01:39:43 +0100 Don't consider worshippers of good gods as innately holy beings Separates out checks that should care about innate holiness (obtainable only by being a literal angel, daeva etc) from things that should care about whether something is merely a priest of a good god. Fixes some theoretical weird edge cases such as nonliving monsters being also considered holy if they worship a good god and for example, losing their innate fear immunity as a result. Ideally mon_holy_type should be further simplified and every monster (and the player) would innately fall into exactly one holiness category, with the MH_EVIL flag being separated out and handled elsewhere. -------------------------------------------------------------------------------- b600878595 | Kate | 2021-10-01 01:39:43 +0100 Remove holiness restrictions from Intoxication and spores The other existing limits on these abilities still make sense without them them being usable on natural holiness only, so remove the holiness restriction and make them a little more flexible. Alistair's Intoxication now affects any intelligent monster that isn't poison-immune, so can now affect many demons and holies, and intelligent plants (which is currently only shambling mangroves), although these mostly do have poison resistance so are harder to affect. Spore explosions are now able to affect demons and holies, and still don't affect unbreathing monsters (undead, nonliving, and plants). -------------------------------------------------------------------------------- 662dcd36dd | Kate | 2021-10-01 01:39:38 +0100 Don't give plant holiness monsters innate rN+++ Since plants are now a set of actual monsters instead of only decoration, it feels odd that they're living creatures but can't be affected by draining or negative energy. Remove their innate rN+++, but keep their torment immunity (since it makes more sense that pain-flavoured effects wouldn't work). Other draining-flavoured effects that previously only worked on natural monsters now work on plants, too - including Scythe of Curses miscasts, vampiricism, and Ghoul health-on-kills. Withered plants in Crypt/Tomb keep their rN+++. Firewood in particular remains unaffected by vampiricism, to prevent decorative plants being available for free healing. -------------------------------------------------------------------------------- 070a2a64fb | Kate | 2021-10-01 01:25:43 +0100 Allow demons and holies to be feared/berserked As part of an effort to reduce the number of effects that are restricted to natural monsters only, to increase some of the distinctions between undead/demonic/nonliving holinesses, and to allow some more flavourful interactions. Lore-wise, demons and holies are supposed to be of similar stock aside from their god alignment, so are grouped together here. They're also established to be like living creatures in a number of ways - they're generally intelligent, can be poisoned, and have souls, so it feels appropriate for them to feel emotions in some way and be able to go berserk and be feared. (Importantly this also allows the zealot's sword to send divine allies berserk, for any TSO worshippers who happen to find it.) -------------------------------------------------------------------------------- 2d0446b249 | Kate | 2021-10-01 01:21:04 +0100 Display torment immunity in monster descriptions Since it's separate from negative energy resistance/immunity. -------------------------------------------------------------------------------- 575fbe42a6 | Kate | 2021-10-01 01:21:04 +0100 Let frenzy apply haste/might to all affected creatures Previously it could affect creatures of any holiness, but only natural holiness creatures were hasted/mighted. Instead make it work the same way on any affected creature. -------------------------------------------------------------------------------- 544b704789 | Kate | 2021-10-01 01:21:04 +0100 Simplify mass enchantment handling Remove a lot of old code for now-unused mass enchantments, and some old assumptions about what can be affected. Should also fix messaging around firewood when using a scroll of fear. This could still use some more substantial refactoring ideally! -------------------------------------------------------------------------------- 5885fe61e5 | Kate | 2021-10-01 01:21:04 +0100 Rebrace -------------------------------------------------------------------------------- 7719699fd9 | Nicholas Feinberg | 2021-09-30 07:54:26 -0700 Upgrade ghost sewer tiles -------------------------------------------------------------------------------- d7573fbb20 | Nicholas Feinberg | 2021-09-30 07:50:38 -0700 Fix sewer entry c tiles (12653, Majang) Broken in 115e938b4e1d6. -------------------------------------------------------------------------------- f77a47075d | Nicholas Feinberg | 2021-09-28 20:05:50 -0700 A few more minor doc fixes -------------------------------------------------------------------------------- 911e869b65 | Nicholas Feinberg | 2021-09-28 20:03:24 -0700 Update background creation guide -------------------------------------------------------------------------------- c72452776e | Santiago Agustín Acosta | 2021-09-28 13:29:05 -0400 feat: improve archer description (#2164) Improves the description given for for monsters bonus damage in 619f226: the goal is to make it easier for the player to understand what damage will be gone if they get the monster to stop attacking with ranged weaponry, and to convey the damage bonus for thrown ammo as well as launched. [commiter's note: light commit message edits] -------------------------------------------------------------------------------- 173413878b | Nicholas Feinberg | 2021-09-28 08:29:57 -0700 Clarify *Rage desc (kate) -------------------------------------------------------------------------------- fb8421d2c4 | Nicholas Feinberg | 2021-09-28 08:04:35 -0700 Revert: "Revert "fix: Clarity once again blocks *Rage"" Now that Chei doesn't give penance for getting mad, but instead only gets even (see 2dc4ca50970f), we can once again treat berserkitis and artefact rage as unintentional and let Clarity prevent it properly. This matches player intuition ('clear thoughts' do seem like they should prevent gettin real salty). Balance implications should be minimal. Reverts 35c06b56. -------------------------------------------------------------------------------- 619f226d55 | Nicholas Feinberg | 2021-09-28 07:42:08 -0700 Describe archer bonus damage When a monster with the archer flag is wielding a ranged weapon, show the bonus damage it gets from that in its description. -------------------------------------------------------------------------------- aa5fe0c46d | Nicholas Feinberg | 2021-09-27 21:42:46 -0700 Make shard shrikes battify after shooting The design intent was always for these lil guys to wander off after hitting OR shooting, but I never bothered checking to see if it actually worked. It didn't! But now it will. This is probably a minor nerf, since they'll spend a couple turns wandering around instead of hitting or shooting after they shoot you. If players think they're too weak now, something can be arranged. -------------------------------------------------------------------------------- ab23d0e057 | Nicholas Feinberg | 2021-09-27 21:22:20 -0700 Consider *Rage a bad prop Randomly berserking is very likely to get you killed. It is funny, though. -------------------------------------------------------------------------------- 4a18f0a723 | Nicholas Feinberg | 2021-09-27 21:21:37 -0700 Actually really remove +Rage It was 'removed' but was still generating on randarts, resulting in randarts with few or no props. -------------------------------------------------------------------------------- 4214526f7d | Kate | 2021-09-28 02:17:04 +0100 Rebrace -------------------------------------------------------------------------------- 9c95886402 | Kate | 2021-09-28 02:16:23 +0100 Don't place shafts in the Abyss with Rising Flame -------------------------------------------------------------------------------- 3153ac1ab2 | Kate | 2021-09-28 02:16:02 +0100 Cancel Rising Flame on abandoning Ignis -------------------------------------------------------------------------------- 18fa513841 | Kate | 2021-09-28 02:14:24 +0100 Mark amulets of faith as useless under Ignis Since they have no effect. Also de-duplicate the code handling this. -------------------------------------------------------------------------------- 5d3631ad8e | Kate | 2021-09-28 00:43:42 +0100 Fix spectators having the wrong species -------------------------------------------------------------------------------- 34f850c0d2 | Kate | 2021-09-28 00:17:16 +0100 Make Okawaru Arena spectators into real monsters Rather than vault renames of humans. Doing so allows fixing a few edge cases - they have no attacks and give no XP, and can no longer be recalled into duels by convokers, they're given higher HD so that they're more likely to notice that a duel is happening if the player is very stealthy, and they no longer appear in the monster list. -------------------------------------------------------------------------------- 0384439e04 | Kate | 2021-09-27 22:58:34 +0100 Spread out *Rage's randart weight slightly With the removal of evokable berserk, *Rage had quite a high weight compared to other negative properties - instead spread out a bit of its weight to *Noise and Fragile. -------------------------------------------------------------------------------- b1a8950f57 | Kate | 2021-09-27 19:13:53 +0100 Reglyph some snakes and eels Move eels off ; and onto S, since they were the only remaining monster using ; as the ancient "fish/water monster" glyph (and this frees up ; for walking tomes). To make room for eels and also to improve visibility of some other monsters, also shuffle around some colours: Electric eel: lightblue ; -> lightcyan S Sea snake: lightcyan S -> lightred S (for better visibility in water) Lava snake: lightred S -> yellow S (for better visibility in lava) -------------------------------------------------------------------------------- 7ee5da7d44 | Kate | 2021-09-27 19:13:53 +0100 Replace a hardcoded number with its #define -------------------------------------------------------------------------------- 5a15c83aae | Kate | 2021-09-27 19:10:44 +0100 Display some attack flavours in the monster list Specifically reaching, constriction and trample - chosen because they're the three attack flavours that carry over to derived undead, and getting information on which zombie out of a group of zombies has a certain attack flavour is very awkward. For other attack flavours, players can at least be sure that a certain tile or glyph represents one specific monster and so will have one specific set of attack flavours, whereas derived undead are only distinguished by size in console or body shape/genus in tiles, which isn't sufficient to communicate what they can actually do. Other ideas on how to better display this information would be welcome, since this change on its own isn't enough to properly address the problem. -------------------------------------------------------------------------------- 207b005307 | nicolae-carpathia | 2021-09-27 08:17:00 -0400 Make edits to some vaults based on comments Made some changes based on ebering's comments: nicolae_coc_kraken_the_ice: change kraken undead to just simulacra nicolae_coc_caroushell: set WEIGHT to 2 nicolae_coc_on_the_berg: mark fog machine origins with shallow water nicolae_coc_wendigon: add { nicolae_geh_tyrants_menagerie: remove hell hounds and narguns nicolae_hells_demon_pit: branch conditions for demons nicolae_hells_seeping_fissure: branch conditions for cloud types nicolae_hells_slight_mixup: remove mismatched weapons, renamed to nicolae_hells_giants_party, made it oriented centre nicolae_tar_fifth_circle: chance to place toxic bog instead of W -------------------------------------------------------------------------------- ff8c9aff81 | nicolae-carpathia | 2021-09-27 08:17:00 -0400 Add Gehenna lava maze vault This vault has enough subvaults that I gave it its own file. I think this makes three files in /branches/ just for my own vaults. Also there's a checkwhite in here somewhere. -------------------------------------------------------------------------------- 40b5bdf05a | nicolae-carpathia | 2021-09-27 08:17:00 -0400 Move multi-Hell vaults to their own file Move vaults that are intended to place in multiple Hells into their own file in /dat/branches/, called hells.des. -------------------------------------------------------------------------------- c41377e160 | nicolae-carpathia | 2021-09-27 08:17:00 -0400 Add new vaults to Tartarus new vaults. decor. encompass. monsteriferous. somehow, my willpower to write this commit has been halved... -------------------------------------------------------------------------------- 4fe6ac43cf | nicolae-carpathia | 2021-09-27 08:17:00 -0400 Add new vaults to Cocytus As before: cool new vaults of all kinds for the smaller new Cocytus. -------------------------------------------------------------------------------- 1f62ee5ebf | nicolae-carpathia | 2021-09-27 08:17:00 -0400 Add new vaults to Gehenna Like the previous commit, a selection of decor, monsteriferous, and encompass vaults for the new, smaller Gehenna layouts. -------------------------------------------------------------------------------- 5ae6719378 | nicolae-carpathia | 2021-09-27 08:17:00 -0400 Add new vaults to Dis New vaults for Dis, designed to work with the new monsters and smaller level layouts. Decor, monsteriferous, and encompass vaults are all here. -------------------------------------------------------------------------------- 3bccd9ccbf | Neil Moore | 2021-09-26 18:19:18 -0400 Minor changelog fixes [skip ci] -------------------------------------------------------------------------------- 4f1c8046e5 | David Damerell | 2021-09-26 13:53:42 -0500 Recite to the correct group (12652) Commit 5f4c38d67a61b9ac2c9eef99dcee94b507b00502 changed the ordering of items in enum recite_type but did not notice the choice of sinners, sins, and virtues in zin_recite_text() is dependent on this to, say, complain about amorphous wretches in a RECITE_CHAOTIC. [ Committer's note: thanks to stoat soup for the patch ] -------------------------------------------------------------------------------- 6f645e4c1d | Nicholas Feinberg | 2021-09-25 22:00:09 -0700 Rev up yaktaur tiles (Sastreii) New Revenant, Yaktaur & Yaktaur Captain tiles. You would not believe how much discussion there was about the revenant. LRD is a divisive subject... -------------------------------------------------------------------------------- 4b64996d49 | Nicholas Feinberg | 2021-09-25 21:55:30 -0700 Have ice statue, will travel (railbird80) Don't claim that stationary monsters can travel through anything, regardless of their habitat. Arguably I should still display their habitat and use a different word in place of 'travel', but I have a hard time imaginging when it would matter. -------------------------------------------------------------------------------- 9f97627e2a | Kate | 2021-09-24 22:12:40 +0100 Move revenants from L to z Since they're actual real spooky skeletons and can be affected by LRD, move them to the glyph specifically for skeletons. Also tweak their description to make this a little clearer. -------------------------------------------------------------------------------- 4d8ae7cab5 | Kate | 2021-09-24 22:12:40 +0100 Update some LRD colours Match the monster colour directly for a few crystal monsters that had different explosion colours. -------------------------------------------------------------------------------- 8885160007 | Kate | 2021-09-24 22:12:40 +0100 Give curse toes their own genus It's funny for them to be technically liches, but not actually good for the the theoretical case of a curse toe and a ton of liches coming into view, which would previously have grouped them all together into a single "comes into view" message. -------------------------------------------------------------------------------- af8216a34e | Edgar A. Bering IV | 2021-09-24 15:31:23 -0500 fix: correctly display and apply Dis corrosion -------------------------------------------------------------------------------- 3bad584f25 | advil | 2021-09-23 18:06:04 -0400 tile: octagonal wizmode ability tiles from Sastreii -------------------------------------------------------------------------------- 4b98be1b05 | Nicholas Feinberg | 2021-09-23 13:35:56 -0700 Buff walking tome XP Put em somewhere around lichen and titans, to match their intended threat level. -------------------------------------------------------------------------------- c9a36226f5 | advil | 2021-09-23 15:09:03 -0400 fix: tiles for wizmode terrain abilities Apparently people don't like question marks in their GUI. These break the octagonal ability tile convention, sorry. If someone has interest in making these into octagons, feel free. -------------------------------------------------------------------------------- f8e193620d | Edgar A. Bering IV | 2021-09-23 11:23:08 -0500 doc: update the changelog through 0.28-a0-524-g197395d739 -------------------------------------------------------------------------------- f0617a802e | Nicholas Feinberg | 2021-09-23 09:21:57 -0700 Fix a goofy message -------------------------------------------------------------------------------- 197395d739 | Nicholas Feinberg | 2021-09-23 09:06:12 -0700 Describe quicksilver bolt effects In the spell description. -------------------------------------------------------------------------------- 0e5110bbff | Nicholas Feinberg | 2021-09-23 08:34:33 -0700 Make Tiamat's tile more visible (Sastreii) "I'm a god. How can you kill a god? What a grand and intoxicating innocence..." Also change her to SIZE_LARGE to match her new tile. -------------------------------------------------------------------------------- 4794fbc64e | Nicholas Feinberg | 2021-09-23 08:30:00 -0700 Galvanize Sastreii's Monster Often incorrectly called just 'Sastreii'. -------------------------------------------------------------------------------- 115e938b4e | Nicholas Feinberg | 2021-09-23 08:12:54 -0700 Use new sewer tiles for sewer entrances This is information asymmetry between tiles and console, but it looks really cool. (Plus, ossuary entrances already do the same thing.) -------------------------------------------------------------------------------- fb1784a141 | Nicholas Feinberg | 2021-09-23 08:03:50 -0700 Hack: fix threat values 2eadbcdadce4 made late-game monsters worth much less XP, which made the game count them as unthreatening. This is unsound. Revert to the historical threat values. -------------------------------------------------------------------------------- bfeecf2fc5 | Kate | 2021-09-22 23:17:53 +0100 Give Blinkbolt a fixed LOS casting range It previously had a variable range based on power (copied directly from Lightning Bolt), but this was almost never actually relevant in practice - raiju and spark wasps always cast it at range 7, Storm Form would almost always have either 6 or 7 range for any character reasonably capable of casting it, and beasts from the box of beasts would almost always have range 7 except at extremely low power. Instead of keeping these barely noticeable range variations, simplify the ability and allow it to always be cast at full LOS range. -------------------------------------------------------------------------------- 36894cfc38 | Nicholas Feinberg | 2021-09-22 11:08:35 -0700 Nerf divine living tomes Drop them from 3-5 living spells per cast to 2-3, same as other tomes. Also fix descriptions for all living tomes being nondeterministic. -------------------------------------------------------------------------------- 4d5786efa1 | Nicholas Feinberg | 2021-09-22 08:59:59 -0700 Reduce javelin/boomerang generation Throwing weapons are intended to be an auxiliary tool for players to use tactically, not a primary 'killdudes' mechanism. They have LOS range and strong damage, so it's very important that there is a limited supply of these weapons. Shoals in particular broke this assumption. Javelineer bands provided huge numbers of javelins and boomerangs. Shoals generated more javelins than the rest of an average 3-rune game put together (!), and nearly as many boomerangs. Now that monsters have unlimited ammo, reduce most monsters' ammo generation considerably, along with a small tweak downward for random ammo stacks. This should help keep ammo limitations relevant for a 3-rune game. Urug and the Minotaur still get big javelin stacks, since that's their special thing. -------------------------------------------------------------------------------- 5a36c9af25 | Nicholas Feinberg | 2021-09-22 08:36:50 -0700 Brighten up husks' disposition Increase contrast vs swamp floor tiles. -------------------------------------------------------------------------------- c05233ca19 | advil | 2021-09-22 09:07:26 -0400 fix: add some numpad bindings for the skill menu Webtiles/console only (where the latter is extremely variable depending on TERM settings, as usual). Resolves #2117 -------------------------------------------------------------------------------- 0d7ab7f379 | Nicholas Feinberg | 2021-09-21 16:32:20 -0700 An immobile stone gathers much moss (Sastreii) New stone wall tiles for Swamp and Sewer. -------------------------------------------------------------------------------- 47465dbb04 | Nicholas Feinberg | 2021-09-21 16:22:53 -0700 Tweak orc weapon offsets again (ardl, gammafunk) -------------------------------------------------------------------------------- 960c72b710 | advil | 2021-09-21 10:27:04 -0400 fix: clean up failed crawl processes correctly in webtiles I think this should fix the lobby in scenarios we see where something goes very wrong with the webtiles server and the lobby ends up looking like there are many duplicate games. What was happening is that if an exception prevents the crawl process from starting altogether, the cleanup code was also throwing an exception on this first logging call because self.process was None. This prevented the inprogress file from getting removed, and the webserver's ongoing game table from getting cleaned up. This will unfortunately make it *harder* to see when a webtiles server is completely borked, so possibly something should be done about that. I did add an error message to the player when this happens. (In the process of adding this, I attempted to alleviate a race condition that was preventing exit dialogs from being shown when a process never started. Hopefully I did so correctly. Basically, multiple go_lobby messages in close timing will wipe out an exit dialog if it's already been shown.) -------------------------------------------------------------------------------- cc94558de3 | Nicholas Feinberg | 2021-09-20 21:35:55 -0700 Reduce delay for top-end twohanders It takes a ludicrous amount of XP to reach extremely high weapon skill in Dungeon Crawl, which made the rare top-end weapons (executioner's axes, lochaber axes and triple swords) hard to justify using. These are intended to be very exciting items, so it's sad that they ended up being 'traps' even for most characters that are interested in using their weapon type! In combination with the earlier XP curve changes, reducing delay by 1 aut each should hopefully make these weapons more viable for use in 3-rune games. New skill to mindelay: - Executioner's axe: 24 (was 26) - Bardiche: 24 (was 26) - Sword sword sword: 22 (was 24) -------------------------------------------------------------------------------- 2e89a317aa | AdamPG | 2021-09-20 21:35:55 -0700 Reduce the experience cost of high-level skills The cost of increasing a skill from 20 to 27 was more than the cost of increasing a skill from 0 to 20, making training extremely high level skills (e.g. for level 9 spells or slow two-handed weapons) a poor investment for most of the game. This commit makes the implicit quadratic-with-break-point formula explicit, and divides the break point contributions to skill costs above level 9 by 2. This has the following implications: * Skill costs up to level 9 are unaffected; * The new cost of skill level 15 is half-way between the old costs of level 14 and 15; * The new cost of skill level 20 is approximately the same as the old cost of skill level 19; * The new cost of skill level 27 is approximately the same as the old cost of skill level 25; * The decreases in costs are roughly equivalent to a +1 increase in aptitude by skill level 23, and the impact is always smaller than a +2 increase in aptitude. [Committer's note: code refactored.] Closes #1733. -------------------------------------------------------------------------------- 2eadbcdadc | Nicholas Feinberg | 2021-09-20 21:34:01 -0700 Cut late-game XP This commit reduces the total XP in a 3-rune game by about 20%, overwhelmingly concentrated in late-game areas. D and Lair are almost unchanged, while Zot loses about a third of its XP, for example. This should help compensate for impending apt changes, and also generally help with the late-game difficulty slump. -------------------------------------------------------------------------------- 902bb890a6 | Nicholas Feinberg | 2021-09-20 17:31:10 -0700 Flush some good art right down the toilet Repurpose last commit's Swamp wall tiles for Sewer. -------------------------------------------------------------------------------- c9b6b5e602 | Nicholas Feinberg | 2021-09-20 16:54:56 -0700 New Sastreii tiles (bloated husk etc) Also included are some Swamp tiles, but those are currently unused - I'm not sure what the best place to put them is. Maybe they should replace the existing rock tiles? -------------------------------------------------------------------------------- 9ecc6377bc | Nicholas Feinberg | 2021-09-20 16:46:12 -0700 Update battlesphere description (ardl) -------------------------------------------------------------------------------- 2d6a64c10f | Nicholas Feinberg | 2021-09-20 16:46:12 -0700 Fix Gozag player ghost speech (Spaninq) Oops! -------------------------------------------------------------------------------- f79e20f00e | Nicholas Feinberg | 2021-09-20 16:46:12 -0700 Fix Sting effect tile (spaninq) Oops! -------------------------------------------------------------------------------- 83f2989fac | Kate | 2021-09-20 02:14:13 +0100 Fix crashes when attempting to leave Zot For games where Depths was generated in a broken version, fix up the branch entry location for Zot and hopefully allow leaving the Zot again without crashing. -------------------------------------------------------------------------------- 6c43a8f463 | Implojin | 2021-09-19 21:46:17 +0100 fix: allow unrand air enhancer stacking (#2134) e08c5e17fd added an air enhancer to the amulet of the air, but unlike the rest of the spell enhancers in the game, it didn't permit stacking this with the elemental staff. This looks to me like an oversight rather than a balance issue, (especially given that you could still stack the amulet with a vanilla staff of air), so here's a fix. -------------------------------------------------------------------------------- eef7685dc3 | Implojin | 2021-09-19 21:45:30 +0100 Fix missing MUT_NOISE_DAMPENING punctuation (#2141) -------------------------------------------------------------------------------- 121bc3e445 | advil | 2021-09-19 12:32:23 -0400 fix: branch entry depths for zot and zigs This will ensure that zot entry actually generates. (I think it may also cause a fix up for any games without it on depths 4? Not sure.) -------------------------------------------------------------------------------- 516edc7163 | advil | 2021-09-19 11:35:43 -0400 test: tweak a bunch of CI test output * Remove the rng test, I think this is no longer needed * Apply some indents in a few cases * Remove most of the vault-related output; hopefully the failing seed number will be enough if this trips. This level of output was really from back when this test often failed. -------------------------------------------------------------------------------- 203a4d6027 | advil | 2021-09-19 11:35:34 -0400 fix: further update unique tests for shallower depths -------------------------------------------------------------------------------- 8b1ebaf2f3 | Nicholas Feinberg | 2021-09-19 08:17:04 -0700 ...fix the build? -------------------------------------------------------------------------------- 613524ee8a | Nicholas Feinberg | 2021-09-19 07:56:32 -0700 Shift orc weapons 1px left Feels better with their new beefy look. -------------------------------------------------------------------------------- 9bb89235eb | advil | 2021-09-19 10:33:11 -0400 fix: update fixup for depths portals to new values Also, comment on the code duplication. -------------------------------------------------------------------------------- e2d2658822 | Nicholas Feinberg | 2021-09-18 21:37:11 -0700 Fix the build Oops -------------------------------------------------------------------------------- 98ec5579a3 | Nicholas Feinberg | 2021-09-18 21:34:48 -0700 Make allies avoid shooting you (Torax) Use aimed_at_spot to have allies avoid hitting the player when they miss their actual target. Keep enemy & neutral behavior the same. It seems polite. -------------------------------------------------------------------------------- 3d4abc6862 | Nicholas Feinberg | 2021-09-18 21:09:52 -0700 Switch Sting back to its old tile The poison arrow is way too big and fancy for a level 1 spell. Partially reverts 3cb921fa598. -------------------------------------------------------------------------------- c732d1d4b8 | Nicholas Feinberg | 2021-09-18 21:06:04 -0700 Make Abyssal Knights a bit dumber Move 1 int into str and 1 into dex. They're no berserkers, but they're still not particularly inclined towards spellcasting, and they're weak enough that we might as will give them some slightly better suited stats. -------------------------------------------------------------------------------- 3788438092 | Nicholas Feinberg | 2021-09-18 21:04:35 -0700 Remove Tukima's Dance's power boost (hellmonk) Recent changes (removing monster weapon delay, allowing Tukima's Dance to affect ranged weapons) have made the spell much more powerful. It no longer needs the power boost it got when I originally rewrote it, so... let's toss it. -------------------------------------------------------------------------------- a22a9363c6 | Nicholas Feinberg | 2021-09-18 20:59:18 -0700 Ban channeling when you can't cast (gressup) Standardize and streamline. It might be helpful to have extra messaging here when you enter one of these states while channeling - it might be too easy to miss right now. -------------------------------------------------------------------------------- 706b79e7bb | Nicholas Feinberg | 2021-09-18 20:41:13 -0700 Remove tarantellas' bite Tarantellas are a perfectly fine monster and a great name pun, but their theme is extremely misleading. If a spider bites you, you'd naturally expect rPois to protect against the effects. But that's not how tarantellas work! Instead, make their attack a 'touch'. That should hopefully make their behaviour a little more intuitive, though I expect some people will still be surprised by the pure fact of them being spiders... -------------------------------------------------------------------------------- 2322c75162 | Nicholas Feinberg | 2021-09-18 20:36:22 -0700 Fix cloud targeters (CarefulOdds) They can't actually hit stuff through transparent walls. Broken since, god, 098d46cfcc740f maybe? Not sure, honestly. -------------------------------------------------------------------------------- 6302f7b1d6 | Nicholas Feinberg | 2021-09-18 20:25:47 -0700 Remove Depths:1 (mostly) Recent changes to differentiate Depths from Vaults caused it to become considerably more intense. That's not a bad thing! But 5 straight levels of powerful intensity are a bit much. Let's draw it down to 4. Vaults have mostly been adjusted, but I'm sure I missed a few. -------------------------------------------------------------------------------- c45d5503f1 | Nicholas Feinberg | 2021-09-18 20:04:29 -0700 Clarify Conjure Living Spells desc Specify which spells a given tome will create in the spell description. -------------------------------------------------------------------------------- e8cdce0153 | Nicholas Feinberg | 2021-09-18 19:56:12 -0700 Plop walking tomes in Depths Replacing the high tier deep elves, which still have plenty of other places to show up (Elf, Vaults:5, many vaults, etc). On average, looks like you'll see about two tomes per Depths. -------------------------------------------------------------------------------- a443631078 | Nicholas Feinberg | 2021-09-18 19:42:29 -0700 Make Blink Allies Encircling drain energy (ardl) Don't let enemies hit you on the same turn they get blinked encircling around you. It seems excessively cruel to be hit by 5 guys who weren't on screen the turn before. -------------------------------------------------------------------------------- f8b08d3f47 | Nicholas Feinberg | 2021-09-18 19:42:23 -0700 Axe ironbound beastmasters Ironbound beastmasters were a whole pile of cool ideas, none of which quite panned out. - They depended very heavily on their bands, which tends to work poorly (it's pretty common for monsters to get separated) - They had some hacks to guarantee they'd only generate with bands, which broke monster queries and still didn't prevent them from getting separated. - The effects of their spell was poorly communicated to players - the energy system is a very secret under-the-hood effect, unlike e.g. haste, which has a visible effect. - They weren't tuned to the point of being very strong. (This is the most fixable issue.) There was some discussion of replacing them with a summoner that calls and berserks harpies and such, and we could still do that. For now, though, let's roll back this experiment. Partially reverts 0b001bae985. -------------------------------------------------------------------------------- ea7fc97e4c | Nicholas Feinberg | 2021-09-18 15:42:34 -0700 Give orcs a workout (Sastreii) New basic orc and orc warrior tiles. -------------------------------------------------------------------------------- 4d16425fc6 | Nicholas Feinberg | 2021-09-18 15:38:30 -0700 Add a truly thrilling trio (Sastreii) -------------------------------------------------------------------------------- 5baa6b73be | Nicholas Feinberg | 2021-09-16 19:17:31 -0700 Spider stone sprites (Sastreii) SSSS SSSS -------------------------------------------------------------------------------- b47aa1321a | Nicholas Feinberg | 2021-09-16 17:55:39 -0700 Add a truly thrilling trio (Sastreii) New tiles: zombie human, elf, and ogre.n -------------------------------------------------------------------------------- 0b43c73ce0 | Nicholas Feinberg | 2021-09-16 07:38:35 -0700 Fix Ignis invocation frames (Sastreii) -------------------------------------------------------------------------------- 0f06bd746f | Nicholas Feinberg | 2021-09-15 17:11:03 -0700 New zombie tiles (Sastreii) Lizard and large and in charge. -------------------------------------------------------------------------------- 7dc2aef8ca | Nicholas Feinberg | 2021-09-15 08:03:36 -0700 Simplify Petrifying (dilly) Don't consider petrifying creatures to be fully incapacitated. This fixes a bug in which petrifying monsters couldn't shoot or throw (though they could still cast spells, attack, etc). It also allows all petrifying (but not petrified) creatures, monsters and players, to block attacks with shields, which probably doesn't matter that much. -------------------------------------------------------------------------------- 535839065c | Nicholas Feinberg | 2021-09-14 17:37:22 -0700 Fix slime wall death message Broken in e619aef00bffaae3f811d3ff97aa9ddea2c37f07. Oops! -------------------------------------------------------------------------------- 079b763570 | Nicholas Feinberg | 2021-09-14 17:24:39 -0700 Electrify cats and calamari (Sastreii) Two new species-specific Storm Form tiles. -------------------------------------------------------------------------------- 50180c0d78 | Nicholas Feinberg | 2021-09-14 11:39:27 -0700 Storm Form player tile (Sastreii) -------------------------------------------------------------------------------- 27616f31e4 | Kate | 2021-09-14 18:26:12 +0100 Don't crash when failing to pacify nothing Targeting empty space with pacification is allowed so that invisible monsters can be pacified, but doing so still costs a turn to avoid leaking information. However if the attempt to use the ability rolled a failure, it would instead crash when targeting an empty space due to a missing fail_check(). -------------------------------------------------------------------------------- 5218f81949 | Kate | 2021-09-14 18:26:12 +0100 Adjust some randart names Remove "of Battle" to avoid overlap with the unrand, and Australianise some spelling. -------------------------------------------------------------------------------- 5de4b4396b | Edgar A. Bering IV | 2021-09-14 09:17:37 -0500 fix: give seracall its own beam name -------------------------------------------------------------------------------- e8575c7553 | Edgar A. Bering IV | 2021-09-14 09:08:26 -0500 fix: restore berserk and confusion checks for evocables (12651) The misc evokers had confusion (but not berserk) checks in their specific methods, while wands had no checks at all. -------------------------------------------------------------------------------- 103e827438 | Edgar A. Bering IV | 2021-09-14 08:11:21 -0500 feat: replace hell contam with temporary mutations In the game of one of these things is not like the other, the contam hell effect produced permanent strategic damage, the other two produced XP gated strategic damage. Contam hits a few more things other than mutations (putting a brake on miscasts and preventing invis) but the interaction with the mutation system is the noticable part in hell. At the rate we'd like to apply hell effects, however, it gets to be a bit much in terms of permanent damage. So let's try temp mutations. -------------------------------------------------------------------------------- 5e7bb1d84c | Edgar A. Bering IV | 2021-09-14 08:11:21 -0500 feat: slow down hell effects Still trying to dial these in to a good place. The larger effects less frequently make for spikes, which are more exciting (do I gamble and press on I'm almost there) than smaller more frequent attrition. -------------------------------------------------------------------------------- e2dae52223 | Nicholas Feinberg | 2021-09-13 21:06:00 -0700 Remove unthings None of these placeholder monsters exist enough to even be used in vaults. -------------------------------------------------------------------------------- 0687ed57fd | Nicholas Feinberg | 2021-09-13 12:26:56 -0700 New randart name Specifically to break formatting. -------------------------------------------------------------------------------- 941f9de75c | Nicholas Feinberg | 2021-09-13 09:14:22 -0700 Reorganize Mlio Since it no longer appears in Depths. -------------------------------------------------------------------------------- 6aa5aab5a4 | Nicholas Feinberg | 2021-09-13 07:57:04 -0700 Remove an antique "faith special case (hellmonk) If you were at 15 piety or less when you removed the amulet of faith, you wouldn't lose any piety. This was introduced in the very first commit that added "faith, 5871154a2e, and has never really had a good reason to exist. Simplify. -------------------------------------------------------------------------------- 2dc4ca5097 | Nicholas Feinberg | 2021-09-12 21:19:52 -0700 Make Chei chill out Instead of being angry at berserk rage, just turn off the haste (as Chei already did when you quaffed un-id'd !zerk). In general, there aren't a lot of situations where divine penance for actions is more fun than your god just shutting things off. This (esp in light of recent changes to e.g. zerkitis) was no exception. -------------------------------------------------------------------------------- 91930fd77e | Nicholas Feinberg | 2021-09-12 20:11:38 -0700 Walking Tome tiles (Sastreii) Book it! -------------------------------------------------------------------------------- aa0f46ea79 | Neil Moore | 2021-09-12 21:33:22 -0400 Two new splash screens by KaoNedong Licensed under CC0. Source for the images: https://www.deviantart.com/kaonedong -------------------------------------------------------------------------------- 4afc6ae9f4 | Kate | 2021-09-13 00:20:54 +0100 Fix tag_upgrade compilation -------------------------------------------------------------------------------- ce0acab4f2 | Kate | 2021-09-12 23:52:33 +0100 Replace Leech's *Rage with Harm *Rage is a fairly severe downside and means the player should expect to berserk in every combat, which heavily limits the chances of any items with it from being actually used. It's very thematic on the Wrath of Trog and necklace of Bloodlust, and the zealot's sword also has a unique (although perhaps hard-to-utilise) interaction with berserk, but the other unrands with *Rage could use different downsides to encourage still using them. The hat of the Bear Spirit could use a new idea, but for Leech, replace *Rage with Harm (and drain-on-unequip to prevent it from being freely swappable). The only other use of Harm on an unrand is the robe of Misfortune, so Leech's guaranteed vampiricism seems like a fun place to encourage trying to work around Harm's downsides. -------------------------------------------------------------------------------- cbfb7e9818 | Kate | 2021-09-12 23:52:23 +0100 Remove the Elemental Staff's Will++ Since it doesn't fit the elemental theme, and it's now a pretty strong actual weapon on top of giving out a heap of resistances. -------------------------------------------------------------------------------- b5e7e19f26 | Kate | 2021-09-12 23:25:36 +0100 Give the *Rage inscription its star back Since the * is inscription-ese for "this thing triggers some random portion of the time when x condition is met" (as with *Noise, *Slow, *Corrode). -------------------------------------------------------------------------------- 73f125ba1b | Kate | 2021-09-12 23:25:19 +0100 Remove an unused parameter -------------------------------------------------------------------------------- 0f1c06f14f | Kate | 2021-09-12 23:25:12 +0100 Fix compilation -------------------------------------------------------------------------------- 2fb25c9035 | Edgar A. Bering IV | 2021-09-12 17:10:28 -0400 feat: combine berserkitis and item Rage The separate displays and (slightly) separate semantics for "go berserk on melee hit" confounded the issue, especially since berserkitis' chances are so small at low levels. This commit changes berserkitis to simply grant angry percentage points, identical to other sources of random berserk. It does mean that berserkitis now works through clarity and causes Cheibriados penance. This is consistent with the previous commits: berserkitis only triggers on melee attacks, which are intentional. If this is too severe some grace can be hacked in for Chei followers, but the fraction of characters that will find berserkitis much worse than they already do is tiny. -------------------------------------------------------------------------------- e692aea802 | Edgar A. Bering IV | 2021-09-12 17:08:49 -0400 feat: remove evoked berserk, increase *Rage berserk chance Step-by-step we have been cutting back on items that add active abilities to the 'a' menu: even with the quiver these abilities are often forgotten by players for ui reasons since they only come from artefacts (+Inv is the remaing exception) so aren't frequently encountered. A player can't forget to use a "passive" ego. *Rage was meant as a bad property. With a 5% chance to berserk it was small enough that one could take a swing here and there and not expect to berserk (making it an unreliable source of zerk), but large enough that a player trying to use it had to approach fights expecting to go berserk in every fight. This commit removes +Rage in favor of giving *Rage a greater chance to trigger berserk, currently 20%. This leans into the "always be ready to zerk", while being low enough that it's not a guaranteed immediate berserk in desparate situations. The insrcription is changed simply to "Rage". When it comes to changing unrands: - Leech and Bear Spirit might want lower (or 0) Angry values, but for now they both get the standard 20% for clarity; - the necklace of bloodlust, which has a swap penalty and extra zerk powers, gets a 50% zerk chance - the wrath of Trog, with its swap penalty, keeps its 50% zerk chance - the Zealot's sword gets the standard 20% chance; The chance contribution is shown in the item description, and the total zerk chance is shown in the character overview if nonzero. -------------------------------------------------------------------------------- d8b2e6da16 | Nicholas Feinberg | 2021-09-12 12:15:42 -0700 s/inflammable/combustible (FIQ) Reduce ambiguity about the meaning of FIRE_VULN. -------------------------------------------------------------------------------- a6d6528d93 | Edgar A. Bering IV | 2021-09-12 13:00:12 +0200 fix: clarify battlesphere description (12644) -------------------------------------------------------------------------------- 35c06b56df | Edgar A. Bering IV | 2021-09-12 12:59:05 +0200 Revert "fix: Clarity once again blocks *Rage berserk (Mantis 12640)" This reverts commit 51f8dfeb475ed0e39ea3046524384fdaf5c92adb. Commit 51f8dfe intentionally made *Rage on artefacts an intentional source of berserk, as equipping the item and attacking in melee is intentional, and otherwise Chei players could get access to penance free berserk (the hates item code is only for generating the warning prompt, penance comes from actually using it). This revert clarifies the description of *Rage to make it read as intentional source of berserk (like the potion or +Rage), which clarity does not block. It also displays the items contribution to the berserk chance, and makes these contributions linear so the probability is clear to players. -------------------------------------------------------------------------------- 1f95980246 | Nicholas Feinberg | 2021-09-11 21:32:30 -0700 Clarify Ash wrath (JF) -------------------------------------------------------------------------------- b986a403c0 | gammafunk | 2021-09-11 22:03:30 -0500 fix: Don't give cloud rings to friendly pan lords Before this commit, friendly pan lords from the Pentagram card could get cloud rings that would damage the player and their allies. Prevent this by passing the necessary attitude information to the ghost demon code we use to initialize pan lords. -------------------------------------------------------------------------------- 51f8dfeb47 | Seve Monahan | 2021-09-11 14:02:42 -0500 fix: Clarity once again blocks *Rage berserk (Mantis 12640) 516ec7 unintentionally caused *Rage to work on characters with Clarity. This is because 'intentional' rage bypasses Clarity, and 516ec7 caused *Rage berserks to be classified as intentional. Since 911e812, *Rage artifacts have been classified as intentionally hasty at all times. This has similar implications for Chei worshippers as 516ec7 was intending (i.e, Chei worshippers can't use *Rage artifacts without provoking penance). As a result, I do not believe any further changes to the Chei/*Rage interaction are necessary. -------------------------------------------------------------------------------- 34660d7429 | advil | 2021-09-11 13:03:29 -0400 fix: improve SIGHUP handling in clua code on dgl builds User lua that involved hand-rolled prompts could interact in a bad way with SIGHUPs, prevent the game from ever properly handling the HUP. The following example based on long-time crash generator `ziggurnaut` is a case in point: { function ready() force_prompt("asdf") end function force_prompt(text) while true do crawl.formatted_mpr(text) crawl.formatted_mpr("Type p", "prompt") res = crawl.getch() if string.lower(string.char(res)) == "p" then break end end end } If the player disconnects at the prompt, the `while` loop runs in a tight loop because getch returns immediately without a client, and the loop never exits on its own, so the HUP isn't handled. The webserver does detect this 10s or so later, and kills the process with SIGABRT, so the issue isn't catastrophic, but it still is 100% cpu for that time period and generates an annoying crash report in #crawl-dev. (For reference, the best thing to do here on the current API would be to also accept ESC (27) at any prompt implemented in a loop like this; getch returns ESC on disconnects. Or just use crawl.yesno instead of trying to write a custom one.) This commit piggybacks on the clua throttle code to check for HUPs if the throttle trips; if a HUP has been seen it immediately errors out of clua code, which leads to a graceful shutdown of the process. It's possible this could use its own separate hook (which would let it work by default on non-DGL builds as well, and possibly be checked more often), but the main problem here is on webtiles so I'm going with this more minimal solution for now. -------------------------------------------------------------------------------- 1af55ca459 | advil | 2021-09-11 13:03:29 -0400 fix: don't allow c_message reentry This hook is already pretty wild, given the arbitrary points where mpr can be called from, but it's additionally very, very easy to trigger recursion that would be infinite if it weren't for the lua stack limit. Depending on what happens this recursion can be quite cpu intense as well, even with the stack limit. This commit just prevents any recursive triggering of the hook in a heavy-handed way. (Overall, I find this hook quite worrying, and I suspect it still needs substantial auditing.) -------------------------------------------------------------------------------- 8072b577e9 | advil | 2021-09-11 13:03:29 -0400 fix: step up lua throttle aggressiveness On testing, a tight loop in ready() takes nearly 3 minutes to get killed by this on a fast cpu, and does still have a noticeable cpu impact until then -- I expect it'd be much worse on a busy server. This commit makes the throttle kill scripts much more aggressively, and also, if ready() in particular is killed by the throttle, keeps it from running again. If this runs up against legitimate online use we can adjust, but I really think it won't. I tested this on qw, and qw does trip the throttle but never more than ~4 times in a row at the absolute max. So 15 is still extremely conservative. It's possible that this could be tightened even further: e.g. by starting the throttle time at something like 128ms instead of 2, or by reducing the number of lua instructions this is checked between (currently defaults to 50000 I think). No impact outside of webtiles. -------------------------------------------------------------------------------- b603f484b2 | Nicholas Feinberg | 2021-09-11 08:15:45 -0700 Scorch and Flame Wave tiles (Sastreii) -------------------------------------------------------------------------------- e3cd3e9c68 | Nicholas Feinberg | 2021-09-10 20:00:27 -0700 Stoker tile (Sastreii) I'm stoked. Are you? -------------------------------------------------------------------------------- 4cf4cd4993 | Nicholas Feinberg | 2021-09-10 10:08:01 -0700 Dial down tile_show_threat_level defaults Only show on nasties by default. -------------------------------------------------------------------------------- 3d58a18ffd | Nicholas Feinberg | 2021-09-10 10:02:08 -0700 Ignis altar tile (Sastreii) -------------------------------------------------------------------------------- 3d5cecec24 | Nicholas Feinberg | 2021-09-10 09:15:51 -0700 Make a BIG removal Remove SIZE_BIG, switching monsters into either SIZE_LARGE or SIZE_GIANT as seems appropriate. Following up on 7bd0902ce6cc84c6, we really don't need two sizes that are 'bigger than any player race'. Is a yaktaur bigger than a centaur? How does a spatial maelstrom compare in size to a fire dragon? These are questions that we don't care about and shouldn't bother with. This is a small buff to dragon form and maybe a nerf to something else. Who knows. -------------------------------------------------------------------------------- 07589e2de0 | advil | 2021-09-10 11:58:17 -0400 fix: remove comma -------------------------------------------------------------------------------- 392f49ab0d | Nicholas Feinberg | 2021-09-10 08:40:45 -0700 Remove Okawaru Commander title (Graveyardigan) Since Okawaru now prevents you from commanding anyone. Toss in 'Myrmidon' instead, shifting "Warmonger" one higher. -------------------------------------------------------------------------------- 579aff930e | Nicholas Feinberg | 2021-09-10 08:23:57 -0700 Refactor Ignis quiver logic (advil) Allow quivering but don't do so by default. -------------------------------------------------------------------------------- 32eb216c14 | Nicholas Feinberg | 2021-09-10 08:22:35 -0700 Don't autoquiver wizmode abilities Makes testing default quiver stuff impossible. -------------------------------------------------------------------------------- e87aa7cc50 | Nicholas Feinberg | 2021-09-10 08:17:05 -0700 Default tile_show_threat_levels Experimentally set tough and nasty on by default, in an attempt to make it clearer to players when something spooky is headed their way. -------------------------------------------------------------------------------- 118590704b | Nicholas Feinberg | 2021-09-10 08:12:59 -0700 Ignis ability icons (Sastreii) Might want to recolor these or Trog's at some point to avoid overlap, but confusion doesn't seem very likely. -------------------------------------------------------------------------------- c56ee47f37 | Nicholas Feinberg | 2021-09-10 07:59:22 -0700 Searing Wretch tile (Sastreii) https://cdn02.plentymarkets.com/qozbgypaugq8/item/images/1625/full/PSTR-DOOM002. jpg -------------------------------------------------------------------------------- 1448048969 | Nicholas Feinberg | 2021-09-09 11:18:36 -0700 Turn down Hell effects Per popular demand. - Contamination down 25% (from 4-8k to 3-6k). - Stat drain down 33% (from 2-7 to 1-5). HP drain is unaffected. These numbers are still fairly arbitrary and remain subject to revision in either direction. -------------------------------------------------------------------------------- b8cf3755b2 | Nicholas Feinberg | 2021-09-09 11:13:25 -0700 Don't quiver Ignis abilities (various) Too pricey, too easy to misfire. Womp womp. -------------------------------------------------------------------------------- 6657d4870c | Nicholas Feinberg | 2021-09-09 11:09:26 -0700 Nargun tile (Sastreii) https://media.discordapp.net/attachments/747522859361894521/885578302797021234/S chermata_2021-09-09_alle_19.31.21.png -------------------------------------------------------------------------------- da42bb4400 | Nicholas Feinberg | 2021-09-09 07:46:38 -0700 Wendigo tile (Sastreii) when do they call it wendigo when you wendy go the cold food wendy go hot eat the food? -------------------------------------------------------------------------------- d0eccab798 | Nicholas Feinberg | 2021-09-08 11:45:25 -0700 Dragon cleanup (Sastreii) -------------------------------------------------------------------------------- b4fee303d0 | advil | 2021-09-08 14:17:11 -0400 fix: remove a book that required a lvl 1 hex This book placement is not saved by ffd9c288d6fe because there's nothing to reroll -- it'll crash unless there is a level 1 hex. Could be replaced? But for now I'm just removing it to fix crashing games. -------------------------------------------------------------------------------- af36da5c11 | Nicholas Feinberg | 2021-09-08 07:38:10 -0700 New Cactus & Manifold tiles (Sastreii) New tiles for the Manifold Assault and Summon Cactus Giant spells, along with a new tile for the Cactus Giant itself. -------------------------------------------------------------------------------- d71735cc25 | Nicholas Feinberg | 2021-09-07 15:54:29 -0700 Add Ignis altar description Oops! -------------------------------------------------------------------------------- d1dd6c5fb5 | hellmonk | 2021-09-07 14:04:56 -0400 feat: add an ambush vault to lair It's called ambush because there am a lot of bush. -------------------------------------------------------------------------------- 0c02eea278 | Nicholas Feinberg | 2021-09-07 09:16:54 -0700 New Kobold tiles (Sastreii) Goodbye, kobold vest. You will be missed. -------------------------------------------------------------------------------- 3dc288482e | Nicholas Feinberg | 2021-09-07 08:30:18 -0700 New zombie tiles (Sastreii) Gnoll, orc, wolf, bear, hydras. -------------------------------------------------------------------------------- 01ebcbcbcd | sdynet | 2021-09-07 08:16:38 -0700 Simplify the ranger card There are too many monsters with similar roles on this card. I want to cut out too many branches and leave only those who match the name of this card. Modified Effect: Now it summon only these three(centaur warrior, naga sharpshooter, deep elf master archer). -------------------------------------------------------------------------------- 4da15c877b | John Stahara | 2021-09-07 08:13:11 -0700 Accurately order a comment with the variables it describes -------------------------------------------------------------------------------- cae3918e47 | Perry Fraser | 2021-09-07 08:12:07 -0700 Improve Ratskin Cloak god interactions [Committer's note: - Don't allow the cloak to spawn rats that should hate you (hell rats under good gods, any rats under Oka or Sac Love) - Unmark the cloak as evil.] Closes #2102 -------------------------------------------------------------------------------- cf6c460519 | Nicholas Feinberg | 2021-09-07 07:59:26 -0700 Tweak Ignis wratch status msg (dilly) -------------------------------------------------------------------------------- 55a29874ef | Nicholas Feinberg | 2021-09-07 07:45:43 -0700 Make Scorch suitable for sauna use Create steam clouds when it hits someone in water, for consistency with other fire effects. -------------------------------------------------------------------------------- de365fb1df | Nicholas Feinberg | 2021-09-06 13:39:49 -0700 Cut Storm Form power scaling 20% It's a bit stronger than I intended at high power, partially because I got the math slightly wrong when setting it up. Let's scale it back somewhat. -------------------------------------------------------------------------------- 9c2f8b1708 | Nicholas Feinberg | 2021-09-06 13:15:01 -0700 Reduce Searing Ray power scaling Searing Ray is a fun and distinctive early-game spell. However, with the current damage values, it remains surprisingly effective well into Lair branches, reducing the need to branch out into new spells. To increase variety, let's keep the min damage the same while reducing the max damage about 25%, from 3d7 to 2d8. (Fewer dice should also increase variance, which is nice.) -------------------------------------------------------------------------------- ffd9c288d6 | advil | 2021-09-06 14:02:57 -0400 fix: reroll spell schools for crashing hex books After d4a3b56016 removed corona, there are currently no level 1 hexes. The vault spec randbook generation code did not handle cases where a vault spec could not find any spells at all, which happened for some early randbook placements that tried to include a single level 1 spell, if they rolled hexes after this change. This commit adds a somewhat convoluted means of rerolling the book discipline(s) if the first try fails. It does fix the version of this crash that I have replicated. -------------------------------------------------------------------------------- bef64dd269 | hellmonk | 2021-09-05 23:53:28 -0400 Rework the flesh golem This Cigotuvi wizlab monster is a reskinned iron golem, so it got buffed when they did. While a wizlab-depth player can certainly deal with a slow 300 hp monster, it feels pretty awful to have to do it. Lower it to ~100 hp and give it corrupting pulse so it has something to do besides walk slowly at you. -------------------------------------------------------------------------------- 6a72785379 | Nicholas Feinberg | 2021-09-05 10:59:27 -0700 End Ctouch on hitting will∞ (Graveyardigan) To save players who have made poor life decisions (e.g. casting Confusing Touch when going up against a fire elemental), make Confusing Touch end itself when you hit something that has infinite willpower (and hence can never be affected). -------------------------------------------------------------------------------- d4a3b56016 | Nicholas Feinberg | 2021-09-05 10:43:13 -0700 Make the hex 'Corona' monster-only See discussion in cafe5c4f27db83f. We may offer some compensation to arkane markspersons at a future date. (Or we may decide they're fine as-is.) -------------------------------------------------------------------------------- 69098e2f6d | Kate | 2021-09-05 00:53:25 +0100 Shorten a vault shop name It was too long to display the "What would you like to do?" shop prompt in console. -------------------------------------------------------------------------------- 4bac719ec2 | Nicholas Feinberg | 2021-09-04 12:09:37 -0700 Don't let sp. servitors cast v weak spells https://www.reddit.com/r/dcss/comments/phpjtn/ Also prune some monster-only spells. -------------------------------------------------------------------------------- b337144f63 | Kate | 2021-09-04 19:30:26 +0100 Staticify a function -------------------------------------------------------------------------------- d1960fc7b0 | Nicholas Feinberg | 2021-09-04 10:45:04 -0700 Make nonflammable trees block fire (ardl) (But really people shouldn't be using nonflammable trees! Booooo) -------------------------------------------------------------------------------- eb13ee3423 | Nicholas Feinberg | 2021-09-04 10:22:10 -0700 Maybe fix !cancel fly desc (particleface, shummie) Don't claim that !cancel will remove permanent sources of flight (e.g. items, species, etc) when you had some other actually dispellable duration active. -------------------------------------------------------------------------------- c0c42a9b79 | advil | 2021-09-04 10:57:45 -0400 build: improve messaging if `git describe` fails This message was pretty cryptic and didn't cover one major case at all (when `git describe --tags` fails because the repository is a shallow clone). The new error is extremely verbose but hopefully provides much better hints as to what went wrong. This also adds a comment documenting a workround to gen_ver.pl. This workaround seemed too niche to me to put in INSTALL.md, but maybe it should be there? See discussion in #2115 -------------------------------------------------------------------------------- e240ad9e29 | hellmonk3 | 2021-09-04 00:46:55 -0400 Merge pull request #2110 from crawl/delightfullyreddevilish feat: rework red devils -------------------------------------------------------------------------------- bc928eaac7 | hellmonk3 | 2021-09-04 00:36:00 -0400 feat: add six wizlab maps Expand Crawl's wizlab offerings: -Eringya's Formal Garden (removed in 0.17) returns with a modified layout, nastier archers, and the addition of some of the swamp monsters that have been added between then and now. -Tukima's Studio (also removed in 0.17) returns with a modified layout and several brand-new monster types to complement the dancing weapons: walking tomes, which cast living spells that cast themselves at the player. Thanks to PleasingFungus for the monster concept. -Yara's Duelist Academy features mana vipers, lots of warrior-mages wielding antimagic weapons, and a fearsome semi-unique Head Instructor who likes to dual-wield triple swords. -Borgnjor's Mausoleum features both corporeal and incorporeal undead. Lost souls occasionally appear when monsters are killed, making big fights scarier. A cult of halazid warlocks serve as the final encounter. -Maxwell's Workshop features an array of golems and big, meaty workers who wield big, meaty maces. You'll find some of Maxwell's cast-off equipment here, perhaps including the legendary artifacts themselves. -Alistair's Party Mansion features an array of wizards and their bizarre guests. There's some good consumables to be had if you don't mind crashing the party of the century... and wading through statrotting clouds of degeneration. In addition to the new wizlabs, this commit removes the golem set from the Tomb of Doroklohe (because it was mostly taken by Maxwell), so that map will exclusively place demons or undead now. The inner chamber of Iskenderun's Mystic Tower was also changed slightly; classed purple draconians will show up to make the end a bit more dynamic. With luck, we will soon have new tiles for the added maps and monsters, but until then you can enjoy some truly q u a l i t y art. -------------------------------------------------------------------------------- 0fcadc17a9 | Kate | 2021-09-04 04:14:10 +0100 Capitalise fruit And remove some duplicate entries from the randart name database. -------------------------------------------------------------------------------- 1a7b1a870f | Kate | 2021-09-03 22:28:38 +0100 Remove the book of stone from vaults Missed in the previous commit, oops. -------------------------------------------------------------------------------- db61641bf8 | Kate | 2021-09-03 21:53:38 +0100 Make Bolt of Magma a monster-only spell With the addition of Flame Wave, fire magic now has a very wide range of mid-level attack spells (which fits the school's flavour), but Bolt of Magma sticks out as one of the remaining old-style bolt spells and is much less interesting than the newer spells around it. Even with it removed, fire magic still is still more heavily weighted towards direct attack spells than other elements. Earth magic also now has access to Borgnjor's Vile Clutch at the same spell level, which fills a similar purpose but again has a more interesting design. Lightning Bolt remains as a classic bolt spell which has been more intentionally kept around due to the bouncing behaviour fitting air magic's theme. Some spellbook contents are shuffled to accomodate the change, and the book of Stone is removed to avoid repeating too many spells. -------------------------------------------------------------------------------- 8d994e73c7 | Nicholas Feinberg | 2021-09-03 07:57:29 -0700 Probably fix flame wave crash (spaninq) Off by one. -------------------------------------------------------------------------------- 4d1e82e741 | advil | 2021-09-03 10:25:05 -0400 fix: don't corrupt place_info on &ctrl-r in the vestibule As usual, place_info handling is a complete mess and extremely brittle. This crash could happen because the vestibule is a depth 1 connected branch, so a fixup corrected levels_seen in files.cc before getting to the wizmode handling for this field for this command, which assumed that it was uncorrected. This commit adds a workaround on top of the fixup. The fixup was originally created for a very specific bug but is *also* necessary for `&ctrl-r` in the vestibule, because otherwise the following assert crashes due to the branch depth. Possibly place_info validity handling should be entirely rethought. Resolves #2067 -------------------------------------------------------------------------------- 142c4e0e00 | advil | 2021-09-03 09:30:39 -0400 fix: improve `auto_switch` behavior with two bad weapons This makes the check on the current weapon and the target weapon identical, following a suggestion in #2057. I was initially worried that this would lead to further special cases but I think it's ok. This commit also makes an item definedness check explicit, where before it relied on `is_melee_weapon` to do the right thing. Resolves #2057 -------------------------------------------------------------------------------- 57a78d8006 | advil | 2021-09-03 09:16:10 -0400 docs: better document auto_switch=true This is a clarification in response to #2057, though I won't immediately close that issue. -------------------------------------------------------------------------------- 7265e17f22 | advil | 2021-09-03 08:43:40 -0400 fix: remove incorrect key handling for primary fire Handling for `()Q` was incorrectly inherited from action_cycler. Resolves #2083 -------------------------------------------------------------------------------- 741b2176ff | robertxgray | 2021-09-03 11:22:54 +0200 Fix minor display error on stat loss This bug is specific to the small layout -------------------------------------------------------------------------------- b254ac4902 | Nicholas Feinberg | 2021-09-02 21:21:18 -0700 Update the manual For the foxfire -> scorch swap. -------------------------------------------------------------------------------- 4726060ac2 | Kate | 2021-09-03 05:14:22 +0100 Update options_guide -------------------------------------------------------------------------------- c9e9834ff9 | Kate | 2021-09-03 05:11:55 +0100 Remove an extra character from Flame Wave desc -------------------------------------------------------------------------------- 0a9eca1c1b | Nicholas Feinberg | 2021-09-02 17:43:53 -0700 Update FE spell list As part of the mission of increasing variety across games and making backgrounds more of a 'starting kit' than a fully game-defining role, make Flame Wave the new top end of Fire Elementalists' start kit. Together with Scorch, Fire Elementalists should have a more fun and varied early game while still wanting to branch out by the time they reach Lair. -------------------------------------------------------------------------------- f3a705cdda | Nicholas Feinberg | 2021-09-02 17:43:53 -0700 New Spell: Flame Wave (L4 Fire/Conj) Flame Wave is a channeled spell (like Searing Ray) that blasts your surroundings with ever-wider waves of flame. It's intended to be a fun (and spectacular!) capper to the Fire Elementalist start. Fact sheet: - Max damage 10 + pow * 0.4. - Channel costs 1 MP per turn. - Can be channeled twice normally, for a max radius of 3. - Veh range extension allows a third channel at radius 4. - Noise starts at 12 (shout+) and goes up by 2 per turn. - Burns trees (very efficiently!) It would be nice to explain how Veh works in the spell description. -------------------------------------------------------------------------------- 79de503ca0 | Edgar A. Bering IV | 2021-09-02 11:46:17 +0300 fix: adjust hell effect strength The timing reduction in the final balance got hell effects in about the right place in terms of frequency, and contam in the right place for quantity. Drain was checking rN, which players carry a lot of. Instead of turning it up to big number, this commit makes hell effect drain ignore rN. Stat drain was hitting with reasonable frequency, but the XP available made it worked off easily. This commit increases the amount of stat drained. -------------------------------------------------------------------------------- 0ad3c213c0 | hellmonk | 2021-09-01 22:41:33 -0400 feat: rework red devils Instead of kiting (annoying), let red devils impede the player's movement more directly by giving them a melee attack flavor that inflicts barbs if any damage is dealt. They still spawn with polearms, so can use this to their immediate advantage especially in groups. -------------------------------------------------------------------------------- 9e0c098162 | Nicholas Feinberg | 2021-09-01 15:14:13 -0700 Add Scorch to FE and CA As discussed in the previous commit. Also push CA back toward spellcasting stats - you'll have to start with melee for a level or so, but I'd like for it not too be *too* hard to get Scorch castable. -------------------------------------------------------------------------------- 08d601b168 | Nicholas Feinberg | 2021-09-01 15:14:12 -0700 New spell: Scorch (L2 Fire) Scorch is a damage spell that strikes a random enemy within 3 tiles, dealing fire damage to them and (if it beats AC & resists) applying Cerebov's rF- debuff to them for a few turns. Currently, it does 2d5 damage at 0 power, scaling to 2d10 at 50 power. Veh extends range as usual. Scorch is intended to provide additional variety to the Fire Elementalist early game (reducing reliance on Foxfire) and to make Cinder Acolyte feel more distinctive from FE by replacing its Foxfire entirely. -------------------------------------------------------------------------------- 33c4956463 | Edgar A. Bering IV | 2021-09-01 17:41:43 +0300 fix: further tweak the Manifold Assault desc -------------------------------------------------------------------------------- 937acc2988 | Edgar A. Bering IV | 2021-09-01 08:37:18 +0300 fix: clarify Manifold Assault description -------------------------------------------------------------------------------- 6a4b6a32f9 | Edgar A. Bering IV | 2021-09-01 08:32:55 +0300 feat: downgrade Fighters to a buckler The starting kite shield on a Fighter was in a weird place. It had the kind of very long term value that the recent changes to spellcasting backgrounds have moved backgrounds further away from. It was completely reasonable to put some enchant armour scrolls into it and use it throughout the game. Unlike the aux armour of other backgrounds which provide 0-1 AC at the start and 2-4 AC at best, the kite shield starts out around 8SH and without enchants or increased dexterity rises to 13SH with training; it is a significant portion of the user's defenses. On the other hand, with the 0.27 change linearizing shield delay penalty, the shield was a liability for normal sized races. The penalty was sufficiently high that "remove your shield turn 1" advice reappeared and was not unreasonable. This is unfortunate, as a starting kit should ideally be useful at game start. Given the above, lets replace the kite shield with a buckler. The buckler will be worth using on turn 1, but any normal-sized heavy melee fighter will want to find an upgrade... or consider a two-hander or an alternate character archetype, depending on what drops. Races that cannot use a buckler get a kite shield. Currently this leaves the background description and manual intry as is---both simply mention "shield". -------------------------------------------------------------------------------- f8c7cfddd9 | gammafunk | 2021-08-31 22:03:27 -0500 feat: Despoiler loot and monsters in a Lair ending For due_jungle_book, the thematic loot item guarded by the obsidian statue is at a position where one had to step in view of the statue to see the item at all. Additionally the statue is easy to autoexplore into, and the area in which it resides is rather cramped for it to be able to use its summons. This commit encloses the loot item in a clear stone room with a clear door, placing the statue in front. The room is visible from another room usually encountered before the statue area. Hence the player can always see basic information about the loot item before deciding to fight the statue, and the statue itself will likely be seen and autoexcluded before it's reached. An additional bonus is that the loot item can't simply be apported without fighting the statue, since the door must be opened first. Finally, we clean up the terrain surrounding the statue to open up space a little, allowing its summons to work better. -------------------------------------------------------------------------------- 84fbe2c6ea | hellmonk | 2021-08-31 22:44:53 -0400 fix: don't spawn an oklob vault as often -------------------------------------------------------------------------------- 46f4d3c346 | Nicolae Carpathia | 2021-08-31 18:53:19 -0400 Change a miniruin subvault for better wand placement -------------------------------------------------------------------------------- b29a9eb848 | Nicolae Carpathia | 2021-08-31 18:53:19 -0400 checkin the whites -------------------------------------------------------------------------------- 5d38da674a | Nicolae Carpathia | 2021-08-31 18:53:19 -0400 Two new encompass vaults for Desolation Two new encompass vaults for Desolation: Pilgrimage, in which the three mini-ruin subvaults are laid out linearly across the salt flats, and Temple, which eschews subvaults entirely and scatters loot around the outlines of an ancient crumbling temple. -------------------------------------------------------------------------------- 8f02261bec | Nicolae Carpathia | 2021-08-31 18:53:19 -0400 Add a handful of Desolation mini-ruin subvaults -------------------------------------------------------------------------------- c8992b3357 | Nicolae Carpathia | 2021-08-31 18:53:19 -0400 New entry vaults for Desolation Inspired by the famous report "Expert Judgement on Markers to Deter Inadvertent Human Intrusion into the Waste Isolation Pilot Plant", these entry vaults are designed to suggest that the Desolation is not a place of honor and no great deed is commemorated there. Lower weights since they're big. -------------------------------------------------------------------------------- 4e71d33c19 | Nicolae Carpathia | 2021-08-31 18:53:19 -0400 Change the statue tiles used in Desolation Statues are renamed to "ruined idols" in Desolation, but the description says they've all had their features removed, while the statues still use the regular dungeon tiles, which have plenty of features. After discussion in the discord, use the crumbling column tiles for now for statues in Desolation. At least they're featureless. -------------------------------------------------------------------------------- 963f628cec | Nicolae Carpathia | 2021-08-31 18:53:19 -0400 Rearrange the order of subvaults in Desolation Put the paired intact/wrecked vaults in a separate section from the unpaired singleton vaults. The other arrangement was driving me bonkers. -------------------------------------------------------------------------------- 3674f0abaf | Nicolae Carpathia | 2021-08-31 18:53:19 -0400 Fix some subvault misconceptions in Desolation The desolation_ruins_setup function called by all the subvaults in Desolation doesn't need to subst . = , - the main vault can't replace anything in a subvault anyway. Also, subvaults don't need ORIENT statements. -------------------------------------------------------------------------------- e74157ce7a | advil | 2021-08-31 18:21:55 -0400 refactor: remove CMD_EVOKE_WIELDED Until recently, there were only 3 holdouts that used this command, all unrands. Previous commits moved those unrand evocations into abilities in order to have a cleaner, more standardized, UI for them, leaving nothing that uses evoke wielded. Based on past discussion, we are unlikely to add anything that does use it, and item-specific abilities are generally better. As part of this I've removed all the old stuff for triggering reaching weapons via evocations; this was partly dismantled already as part of the introduction of CMD_PRIMARY_ATTACK. For one-key triggering of Olgreb (a common request), there are two recommended solutions after this commit: quiver the ability and use `p`, or just macro the ability like any other. -------------------------------------------------------------------------------- 28a71e5310 | advil | 2021-08-31 18:21:55 -0400 fix: add ability descriptions for dispater/asmodeus Also, tweak the Olgreb description. This commit intentionally leaves the artefact descriptions of these abilities in place (which lets them be obvious while not wielding them). -------------------------------------------------------------------------------- 31e2066950 | advil | 2021-08-31 18:21:55 -0400 refactor: converk staff of olgreb evoke to an ability As with the previous two commits, this lets a much more straightforward version of the power be shown to the player. As part of this, I have simply removed the fail check. This required 5 evo skill to get to 100%, which is trivial; it originates from earlier versions of the staff that could also cast venom bolt. -------------------------------------------------------------------------------- b9327a18ab | advil | 2021-08-31 18:21:54 -0400 refactor: convert staff of dispater evoke to an ability This allows for better transparency for the costs, more code reuse, etc. I have provisionally converted the HP cost to a percentage, which overall should work better for damnation. This is currently set at 10%, and it may be a nerf to many characters at higher HPs. Further adjustment might be required. -------------------------------------------------------------------------------- 3858e25e18 | advil | 2021-08-31 18:21:54 -0400 refactor: Convert Sceptre of Asmodeus evoke to an ability This regularizes the interface to the sceptre, allowing nice things like showing the fail rate, etc. The existing evocations check didn't fit well into the more standardized ability.cc checks, so I've adjusted it (I think this is a buff, but I'm not sure it matters -- anyways, others can feel free to adjust further). -------------------------------------------------------------------------------- b16ebcc8e8 | Edgar A. Bering IV | 2021-09-01 00:37:30 +0300 feat: don't place shafts in hell The small levels and placement of hatches give a fast enough dive, shafts are an ultra fast forward. We'll permit Fo to shaft in hells and permit shafts in vaults for the hells, so that they can be used as vault "loot". -------------------------------------------------------------------------------- 51d9a1de7a | Edgar A. Bering IV | 2021-09-01 00:37:30 +0300 fix: new hell mosnter description tweaks (PleasingFungus) -------------------------------------------------------------------------------- 46c4a727e1 | Edgar A. Bering IV | 2021-09-01 00:37:30 +0300 feat: update doom howl spawns -------------------------------------------------------------------------------- 4b270e8d09 | Edgar A. Bering IV | 2021-09-01 00:37:30 +0300 fix: describe stoker movement (dilly) -------------------------------------------------------------------------------- 5fa11ae2f9 | Edgar A. Bering IV | 2021-09-01 00:37:30 +0300 text: add some newlines (PleasingFungus) -------------------------------------------------------------------------------- 5d3d9a63fa | Edgar A. Bering IV | 2021-09-01 00:37:30 +0300 vaults: adjust Tartarus vaults for new monsters Add the new Tar cast to the vault des. Some places shadow demons were replaced with doom hounds, for the summon effect, and others profane servitors for the "shadowy flavour". Most reapers are gone but a few stick around as guests. -------------------------------------------------------------------------------- 4c841b28f7 | Edgar A. Bering IV | 2021-09-01 00:37:30 +0300 vaults: adjust monsters in Cocytus vaults Some care was needed to make sure there's simulacra around for the wendigo, but placing wendigo bands can take care of that when needed. Otherwise, blizzard demons were replaced by titans or shard shrikes depending on context, and several vaults were 098-ified. -------------------------------------------------------------------------------- 3d3c2c6d84 | Edgar A. Bering IV | 2021-09-01 00:37:29 +0300 vaults: adjust Gehenna vault monsters This adjusts all Gehenna vaults to use the new cast. Fewer changes than the Dis vaults, mostly replacing sun demons with searing wretches and sprinkling in some creeping infernos. -------------------------------------------------------------------------------- 2bde554b36 | Edgar A. Bering IV | 2021-09-01 00:37:29 +0300 vaults: Dis end vault monster set adjustments In line with the Dis changes, remove trash mobs and replace with the new Dis cast. As with the non-end vaults, a few juggernauts sneak in as a guest threat, and the cacodemons in the one grunt ending stick around. Might have been too heavy with caustic shrikes on some of these. -------------------------------------------------------------------------------- f8756136d3 | Edgar A. Bering IV | 2021-09-01 00:37:29 +0300 vaults: adjust non-end Dis vault monsters and cleanup Adjust monster sets of Dis vaults. When possible I tried to stick with or switch to 098. When vault storyline demanded eg. a humanoid or a boss monster one was chosen from the new Dis cast appropriately. Occasionally some vaults desired slightly more variety, and juggernauts get sprinkled in there. I'd considered putting them on the Dis spawn table, but a few vault cameos seems to be better for them. -------------------------------------------------------------------------------- 3a40abb400 | Edgar A. Bering IV | 2021-09-01 00:37:29 +0300 vaults: make hangedman_mysterious_dungeon_monster_house 098 Essentially. The generic undead are preserved (with some branch flavoring so Cocytus wendigo have simulacra to collapse), and the "fodder" placements are replaced with 09. The "boss" is specified to be a top tier threat for the branch. -------------------------------------------------------------------------------- 8b58bad9cc | Edgar A. Bering IV | 2021-09-01 00:37:29 +0300 feat: new Cocytus spawn table The icy hell, ruled by Antaeus, this monster set has a slightly more cryptonatural feel, keeping with the "newness" of Cocytus in the lore. The monster mix aims to beset the player with iceblasts, cold, and status effects (much worse under -Potion) This places the following monsters in addition to the cross hell threat set. "basic" branch welcome monsters: - simulacra Using the adjusted simulacra list, these simulacra either hit hard, are fast, or mess up player position (often two or more). - freezing wraiths Somewhat on the weak side for hell, a lucky slowing hit goes much further when a player cannot obtain potion help. - frost giants Lower tier colossus, following Antaeus' leadership. "branch flavour" monsters: - titans More of Antaeus' pals. Titans' airstrike is spooky in Coc's mostly open layouts, as is their flight over deep water. - azure jelly Rarer, might be a bit too weak for its place, but a good cold monster with big ol hits. - wendigo To help slower simulacra really nail the player, the wendigo can turn them into 3d43 iceblasts (one time only, destroyingn the simulacrum), in addition to having stunning burst and some strong melee. Wendigo are fragile and cannot fly, however, so they can be managed with care using Cocytus' terrain. - nagrun Earth spirits who were here first and tolerate the new hell that was dug out around them. Petrification is much more threatening if it can't be cancelled, so these earth spirits come with it, plus AF_VULN to help it land. "signature threat" monsters. Equal chance at max depth, otherwise more shrikes - shard shrike Basically TIE fighters with blue lasers. A player favorite. - ice fiend The cold tier 1 demon. -------------------------------------------------------------------------------- 58b44f322d | Edgar A. Bering IV | 2021-09-01 00:37:29 +0300 feat: new Tartarus spawn table The decaying hell, this monster set is out to bewitch the player and drown them in foul miasma. Unlike other hells, because of the misma quantity no living holiness monsters are added. This places the following monsters in addition to the cross hell threat set. "basic" branch welcome monsters: - spectral things The generic late population is adjusted so that the spectrals that place should be a somewhat serious threat to the player, if they start to swarm. - shadow wraiths Not very hard hitting, but AF_DRAIN_SPEED makes these a thematic mix. - eidola Also not very hard hitting (could they gain dispell undead lol?) but with Tar's new Will/2 their Cause Fear has a chance at landing and constraining player movement. "branch flavour" monsters - profane servitors A monster from "elsewhere" repurposed to service in Tartarus. Some concern about this aura and silence aura being difficult to see in combination in console. They're a nice melee threat and combined with their aura a nice threat multiplier. - bone dragons Big dumb hits. Thwacks. Tramples. - putrid mouths Somewhat similar to ushabti, putrid mouths are a stronger melee threat in addition to the warning cry and miasma breath. They apply poison and stat drain fitting in with Tar's theme. - doom hounds Definitely not spirit wolves. Everyone's favorite "summoner" monsnter. - silent spectres (rarer, flat distribution) These are sprinkled in to fit with Tar theme and provide a unique tactical challenge. Much rarer than regular monsters. "signature threats" - tainted leviathans A C genus monster for tar. With mesmerisation to use the Will/2 branch-wide effect, a miasma ring, silence, and large rocks, these giants are an all-around top tier threat. - tzitzimimeh The branch's tier 1 demon. -------------------------------------------------------------------------------- a5164bd282 | Edgar A. Bering IV | 2021-09-01 00:37:29 +0300 feat: new Dis spawn table The iron city, this uses a mix of new and classic monsters to beset the corroded player with big hits (wham pow), metal splinters, and prevent their escape with fetters and barbs. This places the following monsters in addition to the cross hell threat set. "basic" branch welcome monsters that fall off with depth and aren't used for ood rolls beyond max depth: - ancient champion Iron shot, haste, good hits. Currently they have skeletal warrior bands, perhaps that should change. - war gargoyle Metal splinters and fast, but not tough. - iron dragon Metal splinters and stronger melee than a war gargoyle, tougher as well. Unfortunately they're slow, so currently less frequent. Might be worth making them speed 10. "branch flavour" monsters to fill out the regular threats: - iron golem Buffed iron golems are hard to kill and hit really hard at normal speed, so it is not good to be next to them. That's easy to do because they're slow, but it does mean they might block an escape in the kind of layouts Dis generates. - caustic shrike The pigeons of Dis. Recontextualize a top-tier depths threat as a regular friend in the iron city. Their corrosive attack stacks with the present Dis corrosion for maximum fun! - quicksilver elementals At least one Dis castle places quicksilver dragons (good flavor, but not really strong enough for a Dis threat). These elementals are a cross between a quicksilver ooze, a qsd, and a shard shrike. Quicksilver bolt will remove some corrosion, but do you really want to keep one as a pet? - crystal echidna Iron golems are slow, many other Dis threats are regular speed. To help everyone along these spiny green helpers have throw barbs, along with crystal bolt so they're not defenseless on their own. The cramped layouts of Dis should give them many bolt bouncing opportunities. "signature threat" monsters (becoming equal chance at max ood). - iron giant The classic C, with harpoons and iron shots and now hurling buffed iron golems (which get a swing on the turn they're thrown). - hell sentinel The tier 1 demon of Dis. -------------------------------------------------------------------------------- 1c5eef2bd2 | Edgar A. Bering IV | 2021-09-01 00:37:29 +0300 feat: new Gehenna spawn table The firey hell, this uses new monsters along side classic favorites to beset the player with fire storms, fireballs, and burn away their resistance. This places the following monsters in addition to the cross hell threat set. "basic" branch welcome monsters that fall off with depth and aren't used for ood rolls: - hell hog The classic fast fireballing demon. Their fireballs hit enough to hurt and they swarm, but they aren't so tough. - fire giant Increasing placement of 'C' genus monsters in hell is a lorebuilding exercise. Not as fast as hell hogs, stronger melee. - salamander tyrant The highest tier salamander monster, recontextualized here in hell. Their lava spells work well in Gehenna's lava pool terrain. "branch flavour" monsters that fill out the regular spawns in the mid range and fall off for ood (but not as sharply as the cross-hell set): - balrug Classic demon; subsequent changes to the other hells makes this one of the few non-fiend non-common demons appearing. - searing wretch Resistance stripping melee threat. - stoker (less common) Ranged, maintain range threat. In Gehenna's layouts corners are hard to comeby, and hiding from creeping infernos is a good deal trickier than dodging oods. Setting them off early is a possibility for the player, but comes at a cost. - creeping inferno (less common) Like a lurking horror, but with Fire Storm. "signature threat" monsters that fill out the ood weight. At depth 7 helephants are more common than fiends, and at the depth cap they have equal chances. - hellephant 3d40 bolt of fire (ow!), trample, and blink. Tough but not too tough defenses. A good firey monster for the firey hell. - brimstone fiend Every hell needs a thematic 1 and the brimstone fiends are the fiends for Gehenna. -------------------------------------------------------------------------------- 1c56b440e8 | Edgar A. Bering IV | 2021-09-01 00:37:29 +0300 feat: define a cross-hell spawn population To unify the hell branches, this defines a population subtable that produces "cross-hell" threats: a flat (falling off in ood range) sprinkling of tormentors and hellions bringing suffering to the damned, plus rare lichen making sundry unholy pacts. Lore note: Lichen, having mastered life and death, are not minions of hell or bound there. They're simply visiting. So we don't want to put a ton in any hell, even Tartarus. -------------------------------------------------------------------------------- cec1ff2907 | Edgar A. Bering IV | 2021-09-01 00:37:29 +0300 feat: enable a higher ood cap for hells In order to let 098 pick out true nightmares without making each hell 6/7 roll oops all fiends, let's set an ood cap that we can work with. Technically we lose a bit of expressivity at the deepest possible 8 depth, but I don't think that's needed. -------------------------------------------------------------------------------- a084dd16cf | Edgar A. Bering IV | 2021-09-01 00:37:29 +0300 feat: revise generic_late_zombie populations (nojaa) The generic_late_zombie population is used for derived undead base classes in areas where the player is expected to be quite strong. This commit adjusts the way depth is handled by the picker so that the population list has its own depth cap (independent of branch depth caps). It also changes the monster selection to focus on derived undead that are either fast or interfere with player movement or both, with a few hard hitters for good measure. -------------------------------------------------------------------------------- e6604a7e06 | Edgar A. Bering IV | 2021-09-01 00:37:29 +0300 feat: adjust derived undead attack flavours This commit allows spectrals and simulacra to constrict and reach (losing the flavor brand on that attack) and all derived undead to trample. These "physical" attack flavours mess with player positioning in various ways; not including them on the higher tier derived undead made it challenging to use those derived undead as serious threats. -------------------------------------------------------------------------------- 5587a7b593 | Edgar A. Bering IV | 2021-09-01 00:37:29 +0300 feat: new monster, nargun Without cancellation pots, status effects are much more deadly in Cocytus. Nargun are modelled after the Australian mythic stone creatures, and are gargoyle-esque: they hit hard, have big AC, and a threatening spell but weak HP. In this case they bring Petrify to the mix, along with AF_VULN and a big HD to help it land. They are lrdable and treated as icy. -------------------------------------------------------------------------------- a7dcba2b6e | Edgar A. Bering IV | 2021-09-01 00:37:29 +0300 feat: new monster, wendigo Wendigo are a new Cocytus monster. They're somewhat flimsy and act as threat multipliers, with stunning burst and a new spell seracfall. Seracfall turns a simulacrum in view into a very high power (3d43) iceblast. Cocytus will have plenty of simulacra around as part of the overhaul, but many simulacra are slow. The wendigo "help" the simulacra along in a couple of ways. The targeting also means that a player facing a wendigo plus simulacra will have to manage LOF from several directions as the simulacra advance. -------------------------------------------------------------------------------- 5a7b489cf3 | Edgar A. Bering IV | 2021-09-01 00:37:29 +0300 feat: new monster, tainted leviathan A non-fiend top tier threat for Tartarus. Tainted leviathans come with mesmerise and a cloud ring to pull players into. Oh! And they're giants so they thro rük. -------------------------------------------------------------------------------- 0cc904eb20 | Edgar A. Bering IV | 2021-09-01 00:37:29 +0300 feat: new monster, putrid mouth Putrid mouths are a new Tar monster, meant to be a more substatial (ha) wraith genus monster to fill out the branch flavour set of threats. They are based on Chinese mythology around hungry ghosts and re-use the old hungry ghost tile since it was so cool. As a monster they aren't the toughest of Tar threat, but the mix of miasma, poison, and warning cry should combine with the small levels to prevent a player who mismanaged the encounter from recovering before reenforcements arrive. -------------------------------------------------------------------------------- 6bad965b88 | Edgar A. Bering IV | 2021-09-01 00:37:29 +0300 feat: new monster, crystal echidna Meant as a "support caster" type monster for Dis, crystal echidnas have barbs (to confine the player's movement while slow things catch up) and crystal bolt (to be a bolt-bouncing threat when they're met alone in the cramped rooms of most Dis layouts). Crystal Echidna are nonliving and explode like green crystal for LRD. -------------------------------------------------------------------------------- e42411b9ad | Edgar A. Bering IV | 2021-09-01 00:37:29 +0300 feat: new monster, quicksilver elemental I considered simply using quicksilver oozes or quicksilver dragons in Dis, as both are reasonably strong late-game threats. However both dragons and oozes are vulnerable to some of the collateral damage done to allies by hell minions. It seemed like a better idea to make a monster in a genus that won't fall so easily to tormennts, since the new Dis list already has its share of living creatures. This monster is something like a cross between a quicksilver dragon and a shard shrike, with batty movement and qs breath, though not as fast as a shrike. Not 100% happy with repeating the shard shrike gimmick, could instead just make quicksilver oozes torment immune. (How does one torment a blob of quicksilver anyway?). -------------------------------------------------------------------------------- 6bbbebb4f9 | Edgar A. Bering IV | 2021-09-01 00:37:29 +0300 feat: buff iron golems (amcnicky) Iron Golems are slow, and slow monsters are often sad. Dis has iron giants, which can throw them into range, which makes them more exciting. Except they're also not that strong, and attack slowly to boot. To make them a better Dis monster this gives them a big buff to their AC and HP, the idea being that they are avoidable but will block a player's manouverability. To make their obstruction to manouvering even more pointed, they get buffed attack and a second attack, and attack at normal speed. The normal speed attack ensures that (depending on monster list sequencing) they get a good chance to swing at the player after being thrown. Big big big ruk. -------------------------------------------------------------------------------- a2eda6f88b | Edgar A. Bering IV | 2021-09-01 00:37:29 +0300 feat: new monster, stoker Stokers are a ranged harrassment and positioning threat in Geh. The player can defeat one solo by setting off its own creeping infernos against it, but in a fray this back-line threat should keep the player off balance with wind blasts and inferno-firestorms. -------------------------------------------------------------------------------- a95eead60a | Edgar A. Bering IV | 2021-09-01 00:37:29 +0300 feat: new monster, searing wretch A hard-hitting melee threat for Gehenna, searing wretches are ghoul genus monsters that stack on fire, sticky flame and strip fire resistance. They are complementary to the other Geh threats, which all have some sort of ranged component, and other than hellephants are a bit flimsy at hell depth. -------------------------------------------------------------------------------- b7fef34776 | Edgar A. Bering IV | 2021-09-01 00:37:29 +0300 feat: new monster, creeping inferno Creeping infernos are a new monster for Gehenna. Operating with lurking horror move rules, creeping infernos unleash a power 120 fire storm at their location upon death. The savvy player will be able to use them to advantage, so we won't place too many, but the player caught off guard will be exploded. -------------------------------------------------------------------------------- 751aad3b66 | Edgar A. Bering IV | 2021-09-01 00:37:29 +0300 vaults: adjust Tartarus vaults for new hell levelgen Fewer encompasses here, large vaults again get ORIENT: centre to keep them from wandering off, stairs adjusted. -------------------------------------------------------------------------------- 8c116a9034 | Edgar A. Bering IV | 2021-09-01 00:37:29 +0300 vaults: adjust Cocytus vaults for new hell levelgen Similar to Dis, several of these vaults are very large and given ORIENT: centre, one is turned into an encompass. Stair placement fixed up. -------------------------------------------------------------------------------- ffef9bb0b2 | Edgar A. Bering IV | 2021-09-01 00:37:29 +0300 vaults: adust Gehenna vaults for new hell levelgen -------------------------------------------------------------------------------- 0cff350621 | Edgar A. Bering IV | 2021-09-01 00:37:29 +0300 feat: add green crystal to Dis While Dis is the Iron hell, it is also notionally earth/metal themed. Moreover elemental iron can crystalize. So let's spice up the wall types a bit. Currently this is accomplished by repurposing serial_glass to place green crystal instead of glass. Other Dis specific crystal vaults welcome. -------------------------------------------------------------------------------- 2e6bbc7fcc | Edgar A. Bering IV | 2021-09-01 00:37:29 +0300 vaults: adjust Dis vaults for new level generation Several large Dis vaults disconnected the level and were practically encompasses in their own right; they get promoted. Other large vaults are given ORIENT: float or trimmed as need be to get them to play nice with the new small levels. All stair placing vaults have their placements adjusted for single stairs. -------------------------------------------------------------------------------- e5be5493b6 | Edgar A. Bering IV | 2021-09-01 00:37:29 +0300 vaults: revise miscelaneous vaults appearing in hell This commit adjusts vaults that are defined in various files other than the branch specific vault files. Vaults that are too large are removed from hell spawning and appropriate conditionals for stairs are added. Vaults that break connectivity (elevators) are also dropped from the hells spawn lists. -------------------------------------------------------------------------------- 4708905124 | Edgar A. Bering IV | 2021-09-01 00:37:29 +0300 feat: only place one up and down stair in the hells This changes the level generator to only place one stair in each hell branch, as a complement to the previous change to level generation size. This commit will currenlty break crawl due to the number of vaults that place disconnected stair bubbles in Hell. Follow-up commits will be adjusting hell vaults to account for all level generator changes. -------------------------------------------------------------------------------- 43dec93354 | Edgar A. Bering IV | 2021-09-01 00:37:28 +0300 feat: add error checking for some dungeon builder lua -------------------------------------------------------------------------------- 903cbe717e | Edgar A. Bering IV | 2021-09-01 00:37:28 +0300 feat: shrink Hell subbranches on floors 1-6 This commit converts hells layouts to use the new dgn.builder_bounds() instead of dgn.max_bounds(), adding parameterization on grid size for some procedural values that were previously hard coded. The dive portion of the hells can be exciting, but quickly becomes a slog if the player must make the dive a second or third time, due to how the stairs work. By shrinking the levels we reduce the time a player spends with unfun repetition and increase the time spent in "good dive moments". A subsequent commit will reduce the number of stairs spawned on each level to 1 guaranteed stone stair. -------------------------------------------------------------------------------- 9424aacb20 | Edgar A. Bering IV | 2021-09-01 00:37:28 +0300 feat: separate builder_bounds and max_bounds This adds two stub functions dgn_builder_x and dgn_builder_y to allow parameterizing the dungeon buillder's driving dimensions. Subsequent commits will use these to shrink intermediate hell levels. The assumption that GXM and GYM are constants is baked in across the layout code, so layouts will be adapted to use the builder_bounds gradually. Layouts switched to use builder_bounds will be tested for support of various builder sizes. -------------------------------------------------------------------------------- 20ce1ca697 | Edgar A. Bering IV | 2021-09-01 00:37:28 +0300 fix: resolve a todo in zonify mapping -------------------------------------------------------------------------------- bc17ff6ebb | Edgar A. Bering IV | 2021-09-01 00:37:28 +0300 refactor: move padded_bounds to a layout library This function is used with the various omnigrid gridding functions to put a bit of padding to allow the grid to expand into the edge of this padding. There were two versions of it, one in layout_city the other in layout_grids; layout_cellular was implicitly using one of them without an explicit include. This moves the function to omnigrid so that we have only one copy. -------------------------------------------------------------------------------- 43d0ba7266 | Edgar A. Bering IV | 2021-09-01 00:37:28 +0300 feat: shift timed hell effects to do more strategic damage The effects of the hells serve two purposes. One is to spice up encounters with tactical shifts: new monsters, noise, damage; the other is to deal strategic damage. The previous commits added a branch-wide effect to each hell branch to give them a distinct tactical flavour. This commit shifts the timed-effects to do strategic damage to those who would linger: contam, drain, and stat rot. -------------------------------------------------------------------------------- e744962671 | Edgar A. Bering IV | 2021-09-01 00:37:28 +0300 feat: persistent hell effects: rot tartarus (Lici) The third of four branch-wide hell effects, meant to give each hell a unique tactical experience. In Tartarus, halve half willpower. Ereshkigal has paralysis, and the new Tar monster set will have some will checking monsters. Lets make it harder for the player to simply Will++++ item their way out of these concerns. -------------------------------------------------------------------------------- 6f13a9c4bf | Edgar A. Bering IV | 2021-09-01 00:37:28 +0300 feat: persistent hell effects: fill gehenna with acrid smoke The third of four branch-wide hell effects, meant to give each hell a unique tactical experience. In Gehenna, prevent the use of scrolls. -------------------------------------------------------------------------------- 3d7a220799 | Edgar A. Bering IV | 2021-09-01 00:37:28 +0300 feat: persistent hell effects: freeze cocytus solid The second of four branch-wide hell effects, meant to give each hell a unique tactical experience. In Cocytus, prevent the use of potions. -------------------------------------------------------------------------------- 49807740c2 | Edgar A. Bering IV | 2021-09-01 00:37:28 +0300 feat: persistent hell effects: rust dis The first of four branch-wide hell effects, meant to give each hell a unique tactical experience. In Dis, apply two stacks of corrosion. -------------------------------------------------------------------------------- 79cbbdc86d | Edgar A. Bering IV | 2021-09-01 00:37:28 +0300 refactor: abstract corrosion to a method -------------------------------------------------------------------------------- 21599a725c | Perry Fraser | 2021-08-31 13:00:22 -0700 Have C-glyph altars use temple_god_list() Previously there was a hardcoded list of gods that couldn't generate for C glyphs in dungeons. It turns out this was essentially equivalent to the list already used in temple_god_list(), so this removes that duplication. This also fixes an issue where an altar to Ignis could generate on a few Zot dungeon levels which used random altars. -------------------------------------------------------------------------------- d86dc11844 | Nicholas Feinberg | 2021-08-31 11:53:27 -0700 Bump SCG to L6 (ardl) Cactus giants were a bit stronger than expected, and with the removal of Shadow Creatures, there were no other L6 summons left. -------------------------------------------------------------------------------- 98b9f98406 | Nicholas Feinberg | 2021-08-31 11:50:16 -0700 Fix monster cactus giant display -------------------------------------------------------------------------------- df715e3894 | Perry Fraser | 2021-08-31 08:15:42 -0700 Fix dancing weapon death messages [Committer's notes: - Don't claim that summoned dancing weapons turn to gold on death. - Allow summoned corpseless monsters to create clouds on death, just like other summons. - Fix handling of banished unrand dancing weapons. Closes #2092. ] -------------------------------------------------------------------------------- bc0475efdd | Kate | 2021-08-31 02:52:45 +0100 Prevent cactus spines from working outside LOS -------------------------------------------------------------------------------- bced6e68ee | Nicholas Feinberg | 2021-08-29 19:07:02 -0700 Remove an unused corpse tile Oops! Should fix tests. -------------------------------------------------------------------------------- 8ac975c05d | Nicholas Feinberg | 2021-08-29 17:54:53 -0700 New spell: Summon Cactus Giant (L5 Summoning) Summon Cactus Giant summons a giant cactus warrior. Enemies that hit it in melee take 5d8 AC-reduced spines damage. Oof! The intent is to have another situational/toolbox summoning spell: it's not particularly great against "casters" or "ranged" enemies, but fun against melee foes, particularly ones that move fast rather than hitting hard. To differentiate from Guardian Golem, which has a vaguely similar role, it's a few levels high (L5 1school vs L3 2school). The giants also have giant spiked clubs, mainly for comedy value. They're intended to not do that much against with their attack (as opposed to their spines), so their attacks take 3 turns and their base damage is very low. Giant stats: 1 AC, 2 EV, roughly (27 + spellpower) HP, though it's randomized like other monsters'. Standardish summon duration, like call canine familiar. The spell appears in the Book of Dryads (renamed to Book of the Wilderness) and a new Book of Scorching, which also gets Foxfire and Fireball. (I actually named this book before I came up with the idea for Scorch, but you better bet that's going in there if it lands.) -------------------------------------------------------------------------------- 620d9153ef | Kate | 2021-08-30 00:07:12 +0100 Remove some broken speech lines _fruit_name_ is a key in the randart database and can't be used in the speech database. -------------------------------------------------------------------------------- f6d37e6e1d | Kate | 2021-08-29 22:31:04 +0100 Disable Okawaru Duel in Sprint Instead of crashing, disable the ability in Sprint, since it's not supposed to be possible to leave the single D floor by any means (and the Abyss is also disabled). While it'd be possible to special-case the Arena and enable the branch, it seems likely to break Sprint balance even more than usuali (especially in maps like linesprint and arenasprint, for example). -------------------------------------------------------------------------------- e87a16407d | Nicholas Feinberg | 2021-08-29 08:49:46 -0700 Blame Ignis for fire champs (gammafunk) No idea if this works correctly for cikiller, tbh! -------------------------------------------------------------------------------- 28825b98b6 | Edgar A. Bering IV | 2021-08-29 10:25:10 +0300 docs: first changelog update for 0.28-a0 -------------------------------------------------------------------------------- 2a6f7409c1 | Edgar A. Bering IV | 2021-08-29 08:40:47 +0300 docs: update credits -------------------------------------------------------------------------------- 9e858e973b | Nicholas Feinberg | 2021-08-28 20:09:21 -0700 De-damn missed bolts (ardl) oops -------------------------------------------------------------------------------- 7e9a150488 | Nicholas Feinberg | 2021-08-28 19:41:38 -0700 Add missing Cinder Acolyte icon (Really, swap in the Delver candle, since it fits, and give Delver a lantern instead.) -------------------------------------------------------------------------------- 80eddfa388 | Kate | 2021-08-29 01:18:52 +0100 Fix interactions between noise, fake noise and silence (#12293) "Fake" noise (primarily created by alarm traps and the Orb) was intended to ignore silence and still alert monsters, but didn't actually work since no noise (including fake noise) was ever allowed to propagate through any silenced squares. Instead, allow all noise to propagate through silence, but only allow fake noise to actually originate within silence and to alert monsters in a silenced area. This also fixes problematic behaviour of the Demonspawn silence aura mutation, where the aura blocked all noise from the player from propagating outwards. -------------------------------------------------------------------------------- bb949333c4 | Kate | 2021-08-28 23:10:01 +0100 Give Haunt a summon cap of 8 As a high-level summon it doesn't need as strong a limitation as most of the earlier summons, but it previously had no cap at all - give it a high summon cap to at least make it a little less practical to haunt multiple different targets at once. -------------------------------------------------------------------------------- 1a59d63638 | Kate | 2021-08-28 23:10:01 +0100 Make Shadow Creatures a monster-only spell It doesn't work well with the reduced player summon caps, since a big part of its functionality is being able to create monster bands, and the interaction between bands and the summon cap was already fairly messy. Being able to summon rare branch-specific monsters and big monster bands is a fun effect, but works much better on the already-existent scroll of summoning, which avoids the problems of summon caps and is balanced by being a consumable. -------------------------------------------------------------------------------- db2750068a | Kate | 2021-08-28 23:10:01 +0100 Remove the XP penalty from summon kills With the caps on most summon spells substantially reduced, it should now be reasonable to remove the 50% XP penalty on kills made entirely by allies. Other temporary allies also have the penalty removed, as these show up much less often (for example, charmed allies and summons from items and god abilities) so should have a fairly minimal effect. Undead allies also have the penalty removed, with plans to further adjust corpse-using spells in the future. Currently permanent allies from gods (specifically Beogh and Yredelemnul) are unchanged - these require more substantial reworks to their design, with the plan being to hopefully then fully remove the XP penalty from them when their respective redesigns are worked on. -------------------------------------------------------------------------------- 635202c219 | Kate | 2021-08-28 23:10:01 +0100 Give monsters separate summon caps to players Making summon caps for monsters match the reduced player caps unintentionally weakens a small set of monster summoners whose spells are coincidentally also player-castable. Instead let monsters retain the old caps, and document these in the spell description when examining a monster. -------------------------------------------------------------------------------- af93940d1b | Kate | 2021-08-28 23:10:01 +0100 Reduce most summon spell caps to 1 Summoning magic has long had the downside of kills by allies granting only 50% XP, which works fine in terms of balance due to how hugely powerful summoned allies are, but is very inelegant as well as just feeling bad to many players. The main problem caused by summon spells is how easy it is to quickly and repeatably create a very large number of allies, so to try and balance this better and allow removal of the XP penalty, greatly reduce the summon caps for player-castable summoning spells. Almost all spells are capped at 1 summon, with a few exceptions for spells that wouldn't function with such a low cap (such as Summon Small Mammal where the individual allies are very weak), for a few high-level spells (Summon Hydra and Monstrous Menagerie) which are instead capped at 2, and for the very highest level spells (such as Summon Horrible Things and Dragon's Call) where the high level of investment required can justify their strength. Being able to create allies on demand is still fundamentally an extremely powerful ability so this is very unlikely to cause problems for summon- focused characters - it'll just be required to either hybridise more or to use a wider variety of summon spells. -------------------------------------------------------------------------------- 99b01970c5 | gammafunk | 2021-08-28 16:46:57 -0500 fix: Make a function static -------------------------------------------------------------------------------- ae8ea5ec39 | Edgar A. Bering IV | 2021-08-28 23:15:54 +0300 feat: adjust Mlioglotl's spawn range Mlio's spawn range was picked to cover holes in the distribution of uniques. Unfortunately, an S-branch threat simply isn't all that spooky by Vaults or Depths. Additionally, in Abyss Mlio's one weird trick doesn't do anything. So let's place Mlio in the S branches, corrupting an otherwise peaceful runic experience, and very rarely in the abyssal lair end as the source of the corruption. -------------------------------------------------------------------------------- 832ee520b4 | Edgar A. Bering IV | 2021-08-28 23:11:37 +0300 fix: inscribe the obsidian axe (rayg00n) -------------------------------------------------------------------------------- 47ca004b5c | Nicholas Feinberg | 2021-08-28 12:07:32 -0700 Ban fire championing priests (Lightli) Another god already took that one! -------------------------------------------------------------------------------- 0e18a103e6 | Nicholas Feinberg | 2021-08-28 12:02:53 -0700 Cleanup beogh_follower_convert -------------------------------------------------------------------------------- 1796491f69 | Nicholas Feinberg | 2021-08-28 12:02:53 -0700 Ban fire champion conversions (Lightli) Another god already grabbed that orc! You can't have them! -------------------------------------------------------------------------------- 5b1f6a4db3 | Nicholas Feinberg | 2021-08-28 12:02:53 -0700 Fix fire champion wizmode name -------------------------------------------------------------------------------- 6d487c6445 | Kate | 2021-08-28 19:20:20 +0100 Reduce Lesser Beckoning's power cap As a level 3 spell it's not especially appropriate for it to scale all the way up to 200 power. Instead cap it at 100, with the range scaling up to 5 instead of 7. -------------------------------------------------------------------------------- e22f211cc6 | Nicholas Feinberg | 2021-08-28 10:50:13 -0700 Ignis: ability cleanup Swap Foxfire Swarm and Sea of Fire, since foxfires are more powerful in practice. Make all abilities significantly cheaper. Add spacing to the enums. -------------------------------------------------------------------------------- c0270e7ab8 | Nicholas Feinberg | 2021-08-28 10:50:13 -0700 Ignis: monster dialogue -------------------------------------------------------------------------------- 3a68cb0a86 | Nicholas Feinberg | 2021-08-28 10:50:13 -0700 Ignis: zealot start Gnoll and human should do well with the flexibility, hill orc likes the fire, and mummy likes the rF, ha. -------------------------------------------------------------------------------- 7cb2ebde44 | Nicholas Feinberg | 2021-08-28 10:50:13 -0700 Ignis wrath: Fire Champion Chooses the toughest monster in LOS and gives it increased move speed and AF_FIRE permanently. Lots of conditions to try to choose only an interesting monster to fight, not a rat or whatever. Dare you risk the wrath... of the super fire yak? -------------------------------------------------------------------------------- d1c9835b8b | Nicholas Feinberg | 2021-08-28 10:50:13 -0700 Ignis wrath: shaft -------------------------------------------------------------------------------- c171122a48 | Nicholas Feinberg | 2021-08-28 10:50:07 -0700 Ignis wrath: fire elementals -------------------------------------------------------------------------------- 8762c4751e | Nicholas Feinberg | 2021-08-28 10:50:03 -0700 Ignis: add rF=0 to god wrath And tweak duration and messaging. -------------------------------------------------------------------------------- b194a03854 | Nicholas Feinberg | 2021-08-28 10:47:29 -0700 Ignis: wrath description -------------------------------------------------------------------------------- 8c10d7e454 | Nicholas Feinberg | 2021-08-28 10:47:29 -0700 Ignis: ignore amulets of faith And refactor the relevant code in the process. It might be nice to care about "faith (getting discounts on abilities), but maybe there are weird incentives..? Not handling it right now, anyway. -------------------------------------------------------------------------------- dc0d7ab00c | Nicholas Feinberg | 2021-08-28 10:47:19 -0700 Ignis: die After abandoment and mollification, Ignis dies. RIP. -------------------------------------------------------------------------------- 24c43e5e87 | Nicholas Feinberg | 2021-08-28 10:46:20 -0700 Ignis: Rising Flame ability -------------------------------------------------------------------------------- 44ce977461 | Nicholas Feinberg | 2021-08-28 10:46:20 -0700 Ignis: Sea of Fire ability -------------------------------------------------------------------------------- 8782af215f | Nicholas Feinberg | 2021-08-28 10:46:20 -0700 Ignis: Foxfire Swarm ability -------------------------------------------------------------------------------- 68b9825e2d | Nicholas Feinberg | 2021-08-28 10:46:14 -0700 Ignis: Add rF passive -------------------------------------------------------------------------------- 61f1a7678b | Nicholas Feinberg | 2021-08-28 10:46:11 -0700 Ignis: initial implementation A god specifically designed for use as a zealot start. What if your 'starting kit' was a god that got used up, burned out, and pushed you to risk its (weak) wrath? -------------------------------------------------------------------------------- f7720a2501 | Nicholas Feinberg | 2021-08-28 09:09:04 -0700 Fix evolution The last implementation of it required you to be at the next XL to evolve... which was impossible. When you did reach the next XL, you'd need to reach the one after that to evolve, and so on. Instead, require one XL worth of XP for each evolution. -------------------------------------------------------------------------------- 81c34554c2 | Matthew Daley | 2021-08-28 17:43:59 +0300 feat: Show turn counts and real game times in lobby This lets spectators find potentially interesting games to view, i.e. from a speedrunning perspective. webserver/process_handler.py: * Treat the turn count and duration (real game time) as "interesting info" in the wherefile. webserver/static/scripts/client.js: * Show the new turn count and duration fields. Keep the columns hidden until we see at least one game with the new fields, for nicer backwards compatibility. * While at it, rationalise the units shown for idle times ("min" -> "m", and drop the spaces). webserver/static/style.css, webserver/templates/client.html: * Add new fields, defaulting to be hidden until changed by client.js. -------------------------------------------------------------------------------- 4b70cb3502 | Edgar A. Bering IV | 2021-08-28 17:36:23 +0300 docs: update debian package name for DejaVu (Cebolla) Closes #2094 -------------------------------------------------------------------------------- cd7d0065d9 | Aliscans | 2021-08-28 17:30:15 +0300 Change the spelling of some words to Australian English. Change a few places where words were spelt with -eling at the end and where this is not a correct spelling 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 any of the contrib stuff. This changes: channeling -> channelling dueling -> duelling groveling -> grovelling quarreling -> quarrelling raveling -> ravelling traveling -> travelling tunneling -> tunnelling Closes #2093 -------------------------------------------------------------------------------- 0b7dbbd7ef | Edgar A. Bering IV | 2021-08-28 17:20:41 +0300 fix: a crash bug in clua.target_desc (mgdelmonte) Closes #2090. -------------------------------------------------------------------------------- f02e23bfe7 | Aliscans | 2021-08-28 17:14:03 +0300 Show gnolls how many levels they need to reach a skill target Show gnolls how many levels they need to reach min delay / no shield penalty for an item. The game already told other species how much experience they needed to remove the penalty for a shield, or reach the minimum attack delay for a weapon. This change extends this to gnolls. It doesn't enable gnolls to set a target as they cannot vary how much experience they put into a skill. [ Committer's note: Closes #2085. Refactored lightly in action selection to deduplicate a condition. ] -------------------------------------------------------------------------------- 3f656e82c2 | Nicholas Feinberg | 2021-08-27 14:50:10 -0700 Reinforce transparent stone tiles To make them hopefully look a bit tougher and more distinct from transparent rock. -------------------------------------------------------------------------------- 1c0f7aac2b | Nicholas Feinberg | 2021-08-27 11:45:54 -0700 Fix Dj spell icons on local tiles Closes #2091 Closes #2095 -------------------------------------------------------------------------------- 36ea832cf1 | John Stahara | 2021-08-27 11:40:58 -0700 Don't ever consider books evil Unfortunate from a flavour perspective, but in gameplay terms it's never detrimental to read a book. This allows autopickup to read books, even if your current god forbids you from casting the spells contained within. It isn't the knowledge that's harmful, after all, but how you use it! -------------------------------------------------------------------------------- 048bc9fd10 | Kate | 2021-08-27 01:47:48 +0100 Remove unused handling for self-casting Tukima's Dance -------------------------------------------------------------------------------- 1e3a1f7914 | advil | 2021-08-26 20:29:42 -0400 fix: prevent bad array access for describing unid'd staves Also add a bunch of other checks around this particular crash; the basic problem here was that SK_NONE is greater than NUM_SKILLS and a lot of code that has skill-related arrays doesn't check bounds and stops at NUM_SKILLS. The specific crash was because `staff_skill` returns SK_NONE in cases where it can't find a matching skill, which happens when a staff is unid'd. Because the bug depended on what was in adjacent memory, the crash was somewhat variable. -------------------------------------------------------------------------------- 17d1ee0984 | advil | 2021-08-26 18:35:18 -0400 fix: transparent tags for some vaults It's better to mark vaults transparent than not, because that allows the builder to check for teleport closets itself, and also allows the placement script to more easily check that the intention indicated by a tag matches with what happens when the vault places. This commit has a batch of fixes for vaults that automated testing indicates should be marked transparent. This stops in a somewhat arbitrary place as I was working on this several months ago and haven't managed to get back to it, but eventually this should be checked for all vaults. This commit also includes a few teleport closet fixes for vaults that didn't immediately show up as being marked transparent. -------------------------------------------------------------------------------- 6aaddb815b | advil | 2021-08-26 18:35:18 -0400 feat: script options for checking vault opacity This new set of options to the placement checker script is designed to find vaults that are not marked as transparent but probably should be. To use this, make sure to test with enough iterations so that randomization can play out. It's actually also somewhat useful for finding vaults that aren't marked as transparent and have a teleport island, when going through vaults one by one. -------------------------------------------------------------------------------- c0b50483a2 | wheals | 2021-08-26 21:43:09 +0300 Interrupt explore by default when a shopping target is reached (perryprog) -------------------------------------------------------------------------------- a0e16d178b | wheals | 2021-08-26 21:43:07 +0300 Fix explore being interrupted by autopickupable items Caused by 14faa60; check_for_interesting_features uses the stash to determine whether to stop, but it was being called without actually updating the stash. -------------------------------------------------------------------------------- f6564f113a | Nicholas Feinberg | 2021-08-26 07:55:33 -0700 Remove riposte from long blades It was intended to create strategic variance by encouraging characters with more EV to use long blades and characters with less EV to use other weapon types. In practice, it just created more complexity without corresponding interesting decisions for players. It'd be possible to simplify into a damage bonus from EV (or Dodging, or Dex), which would accomplish the original design goal... but it's not obvious that said goal would produce good gameplay even if it worked. It's quite difficult to find alternative weapon gimmicks. Wu Jian has taken up much of the rest of the design space, and other common suggestions, e.g. adding innate SH to lbl, just add more numbers & problems to the game without contributing any real decisions. Correspondingly, long blades are mostly returned to their old stats from before 4dea7376dac , with some tweaks from ba988d45092 kept. Fencer's Gloves still have riposte until/unless we decide otherwise. -------------------------------------------------------------------------------- 8de209e91f | Nicholas Feinberg | 2021-08-25 18:59:24 -0700 Fix monster slime wall damage -------------------------------------------------------------------------------- 644a552097 | Nicholas Feinberg | 2021-08-25 18:49:31 -0700 Further spriggan druid desc fixes (dilly) -------------------------------------------------------------------------------- c0dc8c719c | Nicholas Feinberg | 2021-08-25 18:29:27 -0700 Remove more acid splash damage To simplify acid damage and make it more visible in monster descriptions, make acid spells deal all of their damage in the initial attack, rather than following up with some in a separate 'acid splash'. Since this acid splash did 2d4 to monsters and 4d5 to players, and I'm using the latter values for monster acid damage, this is a buff for allied ally damage. To compensate, I've lowered Fedhas oklob fire speed by 25%, roughly the complement of the damage increase. Other sources of allied monster acid damage, such as ?summoned yellow draconians or non-summoned oklobs under Fedhas, are still somewhat buffed, but that seems like a small change with few consequences. -------------------------------------------------------------------------------- f4e2d62f27 | Nicholas Feinberg | 2021-08-25 18:18:45 -0700 Split up acid_splash and corrosion -------------------------------------------------------------------------------- 1c58e7f47f | Nicholas Feinberg | 2021-08-25 18:04:40 -0700 Simplify acid cloud damage -------------------------------------------------------------------------------- 1afa1a9824 | Nicholas Feinberg | 2021-08-25 18:04:20 -0700 Remove unused splash_with_acid params -------------------------------------------------------------------------------- e619aef00b | Nicholas Feinberg | 2021-08-25 18:00:25 -0700 Simplify acid wall splashes -------------------------------------------------------------------------------- 1ef7cba1b3 | Nicholas Feinberg | 2021-08-25 17:27:54 -0700 Clarify sp druid death effect (dilly) It wasn't mentioned in the monster description before. -------------------------------------------------------------------------------- 79ebb2a17b | Kate | 2021-08-26 00:39:03 +0100 Add AoE resistible spells to the default force_targeter These targeters are useful for indicating affected monsters and their chances to resist AoE spells, but are normally only accessible through the quiver. Instead add various untargeted AoE resistible spells to the default list of spells where the targeter is always displayed. -------------------------------------------------------------------------------- 9004c80361 | Nicholas Feinberg | 2021-08-25 12:49:15 -0700 Rename Corrupt Locale -> Corrupt (gammafunk) Nothing to really disambiguate against and much more flavourful. -------------------------------------------------------------------------------- 46a7db7966 | Kate | 2021-08-25 18:52:34 +0100 Don't let Ghostly Sacrifice target projectiles (causative) Projectiles are always considered as "aligned" with other actors (since they never make actual direct attacks?), so orbs of destruction fired by anyone were considered valid targets for monster Ghostly Sacrifice. -------------------------------------------------------------------------------- b8bfbab023 | Kate | 2021-08-25 00:13:55 +0100 Shuffle squares for monster Upheaval animation As with player Upheaval, instead of always displaying them in the same order. -------------------------------------------------------------------------------- cf53092a1b | Kate | 2021-08-25 00:01:29 +0100 Remove some dead Upheaval code Since very shortly after the god was implemented, the code to have Upheaval occasionally destroy walls hasn't actually functioned. Also simplify monster Upheaval's implementation - it iterated over radius 2 but then only ever affected squares in radius 1, so make the code reflect that properly. -------------------------------------------------------------------------------- 639a1a48b9 | Kate | 2021-08-24 04:21:53 +0100 Don't crash when casting an uncapped summon Oops. -------------------------------------------------------------------------------- fa261e29c3 | Kate | 2021-08-24 03:42:48 +0100 Don't try to reroll Shadow Creature spell sets Since no monsters have variable spell sets any more. -------------------------------------------------------------------------------- 01758ec4b5 | Kate | 2021-08-24 03:21:47 +0100 Remove variable timeouts from capped summons Summon spells all had custom timers on how long a summon would remain after hitting the summon cap, but they almost all expired after 5-15 aut (with the only exceptions being Summon Horrible Things, and Summon Dragon, which expired after 40 aut). Instead of having a near-meaningless distinction here, make all capped summons expire after 10 aut. -------------------------------------------------------------------------------- 8580c7503b | Kate | 2021-08-24 03:21:34 +0100 Remove some obsolete summon cap handling Since Monstrous Menagerie no longer creates bands, it doesn't need special handling around summon caps. -------------------------------------------------------------------------------- fbb0926a3a | Kate | 2021-08-23 22:41:23 +0100 Use correct pronouns for monster targeting descriptions -------------------------------------------------------------------------------- 8e8b57cc88 | Kate | 2021-08-23 22:37:46 +0100 Improve skill descriptions for god-related skills Instead of adding some details for Trog only, include information about Invocations usage for all gods, as well as describing any god-hated skills (which is still only Trog in that case, but now properly extends the information to skills other than Spellcasting). -------------------------------------------------------------------------------- 68911e0c57 | advil | 2021-08-22 15:45:15 -0400 refactor: handle self-targeting checks better in beam.cc Xom's chessboard fakes smite targeting for a variety of effects by just setting the beam source to a target monster's position. This leads to some conflation of real self-targeting and fake smite-targeting in a bunch of subtle corner cases, and also led to 12637. Rather then handle this on case-by-case basis as in 395adb26f73b for poly and a708605c5b for teleport, this commit restores the general check from pre-395adb26f73 but makes it more restrictive. It also sets the agent for xom's chessboard actions (as the player, tbc) in the course of this. This commit should also fix some related weirdness with wrath that hasn't yet come up. -------------------------------------------------------------------------------- 79c9209bdd | Kate | 2021-08-22 20:17:53 +0100 Simplify some rain cloud behaviour Don't make the chance of rain clouds creating water depend on how much water or lava is adjacent to them. -------------------------------------------------------------------------------- 9cc4ca73b0 | Kate | 2021-08-22 20:17:39 +0100 Make the robe of Clouds' thunder passive So as to continue moving away from activated abilities on equipment (as with other unrands such as the cloak of the Thief and ratskin cloak), give the robe of Clouds a chance of creating a storm cloud on enemies within radius 2 each turn. Also mention its cloud immunity in the description. -------------------------------------------------------------------------------- 5c1c4949f7 | Kate | 2021-08-22 18:12:03 +0100 Fix spacing -------------------------------------------------------------------------------- 5d50cf8172 | Kate | 2021-08-22 18:11:36 +0100 Remove some obsolete ability code And an outdated comment. -------------------------------------------------------------------------------- c3c367e0a5 | Edgar A. Bering IV | 2021-08-22 16:38:42 +0300 feat: corrupt trees into demonic trees For Mliogotl and player corruption, turn (permanently) trees corrupted into demonic trees. This is technically not a "flavour" effect because of the difference in how they burn, but it's close enough and ultra flavourful. -------------------------------------------------------------------------------- b8ca4b6547 | Kate | 2021-08-22 02:59:18 +0100 Adjust some stat zero effects Replace 0 strength's regeneration reduction with -Regen in monster LOS (the same as the mutation), to give it an effect in combat without making resting take excessive time. Also replace 0 intelligence's 4/5 chance for scroll-reading to fail with -Scroll (since it no longer needs to be possible to read remove curse scrolls to unequip cursed -Int gear). This whole mechanic could probably be simplified further since it's such a rare occurence. -------------------------------------------------------------------------------- dd10bd25a4 | Kate | 2021-08-22 02:51:30 +0100 Add a description for the -Regen status light -------------------------------------------------------------------------------- b1a13b149e | Kate | 2021-08-22 01:15:53 +0100 Rework Sap Magic It was very overcomplicated for such a rare effect, and its implementation of applying multiple levels of spell failure penalty required the player to repeatedly check their spell success rates between each cast. Instead of the scaling penalty, make casting spells under Sap Magic always apply a short duration -Cast. (This also makes its effect on players more similar to its effect on monsters of applying antimagic - it'd probably be feasible to make the effects match and implement -Cast for monsters but this doesn't seem worth the effort.) Sap Magic also had a confusing 3/10 chance to have no effect when cast, despite being otherwise irresistible - just remove this failure chance entirely, since the spell already has a fairly low cast rate. -------------------------------------------------------------------------------- 086cc6695f | Nicholas Feinberg | 2021-08-21 14:58:14 -0700 Update Attr status description. -------------------------------------------------------------------------------- 7ea6ab310f | Nicholas Feinberg | 2021-08-21 14:56:42 -0700 Fix a 7-year-old typo oops -------------------------------------------------------------------------------- d9515000ea | Edgar A. Bering IV | 2021-08-21 20:00:48 +0300 fix: silence a compiler warning -------------------------------------------------------------------------------- 237fc358d9 | mgdelmonte | 2021-08-21 19:54:05 +0300 feat: lua access to monster targeting descriptions This commit adds target_desc, target_weapon, target_spell, and target_throw functions to the Lua monster_info object. target_desc returns the targeting description of the monster. The other function returns the descriptions shown if you target a monster with your weapon, a spell, or a thrown item. [ Committer's note: Closes #1922. Rebased and cleaned up commit history. Made the spell target_desc pick up all of the possible fancy addl descs and be future proof for them, as well as crash robust for spells that lack a hitfunc. ] -------------------------------------------------------------------------------- b260e8e558 | Edgar A. Bering IV | 2021-08-21 17:45:34 +0300 fix: Mlio spell logic fixes Move all corrupt locale casting to use the spell_logic structures. Clean up the code to use const refs instead of passing by value. Properly handle a friendly Mlio. -------------------------------------------------------------------------------- b12d812e02 | amcnicky | 2021-08-21 16:07:10 +0300 feat: Mlioglotl, an Abyss themed unique Mlioglotl is a mid game unique with the power to (temporarily) corrupt levels, spawning in Swamp, Vaults, Depths, and Abyss:2 onward. Mlio's corruption produces abyssal summons drawn from the full spawn table; a Swamp-depth character might have to run depending on the roll. The gameplay feel is to force the player to either avoid or swiftly kill before the summons and terrain get out of control. [ Committer's notes: buffed the damage, defenses, and casting frequencies so that Mlio hits appropriately hard for his locales, expanded the spawn range to include V:$ and U:4-5. Gave corruption guaranteed summons (and a roll), and allowed it to roll monsters from the full abyss table. Mlio might pull chaff to his aid, or he might get a hell sentinel and a bone dragon. There will be a lot of variability in the nature of encounters, but this is part of the design vision. The summon duration is shorter, to allow escapes. Simplified and refactored the monster version of corrupt, it doesn't need to be a complete mirror of the player mechanics. Especially don't recolour outside of Mlio's immediate locale. The temp terrain is placed for a shorter duration, so that a long encounter will get some "abyssal churn" feel. Fixed whitespace, cleared unneeded XXX comments other code clean-up. Moved Mlio to the appropriate place in Mon-data and used brown for the console colour so that glyphs don't overlap. Closes #2058 ] -------------------------------------------------------------------------------- 76b539d98b | Nicolae Carpathia | 2021-08-20 11:19:33 -0400 Rearrange existing quotes and add new ones Scroll of tele quote (ADMIN) moved to Swiftness, at PF's suggestion. Existing scroll of fear quote moved to /dev/null, it's not even by Plato, and replaced with old eidolon quote. Add new quotes, featuring T.S. Eliot, Homer, Lovecraft, Pablo Neruda, Shakespeare, Lord Byron, Nine Inch Nails, and more. -------------------------------------------------------------------------------- 1bb7f9241b | Kate | 2021-08-20 15:35:27 +0100 Tweak duel speech weighting So that adding new speech lines doesn't affect their chance to speak. -------------------------------------------------------------------------------- 0f8ce75afc | Kate | 2021-08-20 15:35:27 +0100 Fix spelling and some incorrect speech keys -------------------------------------------------------------------------------- 2b4a79830d | Edgar A. Bering IV | 2021-08-20 17:11:55 +0300 feat: recommend brigand over hunter for Ko (dilly) Recommendations are supposed to be thematic and flavourful as well as suited to the species. Kobolds have AM as a "ranged" recommend, and there's literally a Kobold Brigand monster. What could be more thematic than to be one yourself! Closes #2038 -------------------------------------------------------------------------------- ad6161974e | RojjaCebolla | 2021-08-20 16:57:14 +0300 Add a few more _anger_possessive_ strings -------------------------------------------------------------------------------- c0b1434407 | RojjaCebolla | 2021-08-20 16:56:23 +0300 Add pennants for duel spectators (text string) -------------------------------------------------------------------------------- 8eabd40a87 | RojjaCebolla | 2021-08-20 16:56:23 +0300 Add a couple adjective strings -------------------------------------------------------------------------------- dc40aaacc9 | RojjaCebolla | 2021-08-20 16:56:23 +0300 Add a few more actions for Okawaru Duel spectators -------------------------------------------------------------------------------- 0da4227f7a | RojjaCebolla | 2021-08-20 16:56:23 +0300 Re-add fruit names to the string generators This brings back some of the fruits of 1eb5282a -------------------------------------------------------------------------------- 8e425c6592 | Edgar A. Bering IV | 2021-08-20 13:44:03 +0300 doc: changelog for 0.27.1 main and debian -------------------------------------------------------------------------------- cbf37d0371 | robertxgray | 2021-08-20 12:34:40 +0300 Vampires are not (pure) lifeless undead This cleans up the following undesired effects: - Rage and lignification potions are tagged as useless. - Wanderers can't receive such potions. - Poison ring tagged as useless while bloddless and other poison related side effects. - Kikubaaqudgha does not grant Sublimation of Blood. [ Committer's note: Closes #2055. Adjusted commit message. Tweaked a few other vampire hacks in spl-util.cc. ] -------------------------------------------------------------------------------- b7ea06bb7e | Edgar A. Bering IV | 2021-08-20 12:21:03 +0300 Revert "Don't consider rings of rPois useless for bloodless vampires" This reverts commit e31878e1fe37459b33a9e04917198de829909ca1. A different solution will be commited subsequently. -------------------------------------------------------------------------------- a7b0c1cb7f | Edgar A. Bering IV | 2021-08-20 12:19:53 +0300 doc: update CREDITS -------------------------------------------------------------------------------- 50b444eb91 | Zhang Kai | 2021-08-20 12:17:55 +0300 Update branches.txt Add translation. 增添翻译。 [ Committer's note: Closes #2063. Fixed whitespace, removed incorrectly placed credit line. Corresponding with the PR author on appropriate CREDITS entry. ] -------------------------------------------------------------------------------- b0f16cbe65 | John Stahara | 2021-08-20 12:14:55 +0300 indent fix -------------------------------------------------------------------------------- 080cfb6e2c | John Stahara | 2021-08-20 12:14:55 +0300 "Okay, then" on saying 'n' to warn_hatches prompts -------------------------------------------------------------------------------- 14faa605fd | Aliscans | 2021-08-20 12:01:39 +0300 Check for monsters, objects & features as soon as you move. (#2041) Check for things after the player moves, rather than waiting for the start of the next turn. Improve the accuracy of a comment in check_for_interesting_features(). Co-authored-by: Aliscans -------------------------------------------------------------------------------- ea8a313d67 | kippig | 2021-08-20 11:51:28 +0300 vaults: edit tgw_trog vault to avoid rat spawns late Ran into some rats in depths and it felt bad. This change removes them and makes it a bit more dangerous. [ Committer's note: Closes #2050. ] -------------------------------------------------------------------------------- c2c9e32840 | Nicholas Feinberg | 2021-08-19 20:21:31 -0700 Don't recalculate MP when Evo is trained They're no longer connected! -------------------------------------------------------------------------------- 3091681fa3 | Nicholas Feinberg | 2021-08-19 19:57:26 -0700 Remove Stairs (The card.) Partially implemented in 30824b7084af3c2dce35d as a debugging tool for the Xom stair-moving effect and left around ever since. -------------------------------------------------------------------------------- 655a12affb | Nicholas Feinberg | 2021-08-19 19:34:39 -0700 Always show all cards in ?/ Since there are few enough to show, these days. -------------------------------------------------------------------------------- f40de95187 | advil | 2021-08-19 16:56:24 -0400 fix: adjust buggy rest delay check Two changes: * tweak the base delay up, recalibrated by ogre healing rather than troll healing. (Turns out regen matters!) * account for collapse, which gives a 4x multiplier on time to full heal, and so collapsed characters with lots of hp would hit the old delay without too much trouble. -------------------------------------------------------------------------------- 2406090169 | advil | 2021-08-19 16:56:24 -0400 fix: accept numpad enter keycode for menu "enter" I'm not sure how reliably this keycode gets used, but it sometimes can be, so accept it in menus. -------------------------------------------------------------------------------- 214da3ba67 | Kate | 2021-08-19 20:47:49 +0100 Fix some invalid vault syntax Just place a fixed amount of a few items that were trying (and failing) to create a randomised stack size. -------------------------------------------------------------------------------- d305098ac3 | Kate | 2021-08-19 20:47:06 +0100 Add Okawaru to tgw_lugonu_bribe Offer Okawaru worshippers some nice summoning items. -------------------------------------------------------------------------------- 298df9dbad | advil | 2021-08-18 20:42:50 -0400 fix: refix something that is *not* an off-by-one-error da2e87d06967ae turns out not to have been an off-by-one error, but rather the result of bad initial calculations when the menu is not yet displayed, resulting in invalid scroll values. In addition, da2e87d06967ae broke scrolling in menus that don't use a hover. This wasn't noticed before now partly because webtiles still works, the bug seems to be a bit erratic, and in the words of one dev, "oh so that key is actually broke and its not my broken keyboard". -------------------------------------------------------------------------------- a584919b07 | Nicholas Feinberg | 2021-08-18 15:09:08 -0700 Warn about unsilencable spells Since players get surprised by these all the time. -------------------------------------------------------------------------------- 74814aa22a | advil | 2021-08-18 14:05:46 -0400 fix: more player shadow vs wrath avatar cleanups I went through references to MONS_PLAYER_SHADOW as well as mons_is_player_shadow to double check them vs. the previous commit and f9c1391b6; these are the resulting changes. -------------------------------------------------------------------------------- 4e69de0771 | advil | 2021-08-18 13:36:06 -0400 fix: don't crash on fedhas wave wrath Via side effects, this wrath action results in `move_player_to_grid` which puts the player on the same square as the fake monster casting the spell. This monster reuses shadow creature code, but as of f9c1391b6 no longer returns true for mons_is_player_shadow, so an ASSERT got tripped. This commit just adds another similar function for god wrath so that at least this special case can be checked without knowing implementation details, but also this implementation of wrath is not ideal. -------------------------------------------------------------------------------- 7c5eadcf33 | advil | 2021-08-18 10:36:43 -0400 fix: don't use homebrew includes over contribs Mac clang imposes `-I /usr/local/include` on builds, which takes precedence over our use of `-isystem` and leads to an unfortunate interaction with homebrew. Regular mac build tools don't actually use this location, and nor does macports, but homebrew does. For example if the user has SDL2 installed via homebrew, those includes will be used even though the build tries to link with the contrib version of SDL2, resulting in build failure. (This has been reported for a couple of years, it seems.) There may be a number of ways to fix this, and I'm not sure I'm a fan of using -isystem for contrib libraries that we are providing and maintaining and that aren't located in a system include path, but this commit takes a more minimal approach to working around this issue, just ensuring that checking this directory takes precedence under any `-isystem` includes introduced in the Makefile. (Of course, it's arguably a bug that mac clang does this with `-I` instead of `-isystem`, but good luck getting that changed.) Possibly in the future `-isystem` should be switched back to `-I` for contribs so that we have better control over this (by using `-isystem` we ceded control to any way of setting `-I` e.g. via environment variables), but doing so would require a lot of testing. (See e84909d808a7 for where this originated; from the dev logs I suspect this may be partly about suppressing warnings from include headers as well.) -------------------------------------------------------------------------------- 42b4daccc1 | advil | 2021-08-17 16:20:16 -0400 fix: remove accidental debug code -------------------------------------------------------------------------------- 9e3c00f94b | advil | 2021-08-17 15:12:35 -0400 fix: use correct names for non-alpha ctrl keys in SDL This was handled correctly for key help, but not the macro menu. I know I wrote this code in 378ef55cfb79986e3 but this is an extremely magical looking invocation, I wonder if there's a better option? -------------------------------------------------------------------------------- 0687de6023 | advil | 2021-08-17 15:12:35 -0400 fix: local tiles ctrl-key names (perryprog) This got overly #ifdef'd in 643d97a57c66bc5, but the issue hasn't popped up yet because that commit wasn't in the 0.27 release. -------------------------------------------------------------------------------- b5bb297faa | Nicholas Feinberg | 2021-08-17 10:28:51 -0700 Ban devolution as tempmut Seems very unkind to have our good abyssal starry friends give out permanent badmuts, even indirectly. This code is not great. -------------------------------------------------------------------------------- c707856eba | Nicholas Feinberg | 2021-08-17 10:28:51 -0700 New badmutation: Devolution Evolution's evil twin. Gives out a couple of bad mutations over time (currently once every 1/4th of an XL), then goes away. Better cure it fast, huh? -------------------------------------------------------------------------------- 9383fbc173 | Nicholas Feinberg | 2021-08-17 10:28:51 -0700 Solve Darwin's dilemma The Evolution mutation worked in a strange, complex, and not very satisfying way. Once every 500-1500 turns (!), it would check to see whether the total accumulated XP you'd gotten since your last evolution mutation, times the mutation level, times 1d10, was greater than the XP needed for your next XL. (So, it took a long time to do anything.) Once it triggered, it had a 20% chance of trying to remove a bad mut, 64% of applying a good mut, and 16% of applying a bad mut. Regardless, it had a 10% chance of removing itself. Surprisingly often, it would remove itself without doing much of anything at all. Instead, let's simplify. Each level of evolution is now worth 2 good muts. Once per XL's worth of experience, you'll get a good mut. After the second mut, you'll lose a level of evolution. It's a 'delayed gift box' mutation - very nice in the medium term, does nothing in the short term. Do you really want to quaff !mut if you still have a level of evolution pending? Tough choice... Don't worry - failures die fast. -------------------------------------------------------------------------------- 2552a6465f | advil | 2021-08-17 12:21:36 -0400 fix: correctly set target when firing untargeted abilities This keeps autofight_check from applying to quivered abilities without a targeter triggered by `f`, reported by discord user rypofalem. Applies to things like DD healing, ely abilities, etc. -------------------------------------------------------------------------------- 48023c6eb5 | Edgar A. Bering IV | 2021-08-17 18:12:29 +0300 fix: make confused trees claw the walls (PleasingFungus) -------------------------------------------------------------------------------- 12f296af85 | advil | 2021-08-17 10:38:20 -0400 feat: implement CTRL/SHIFT cues for */ in webtiles These are if anything more important than in console these days, since you may need to use them to override browser shortcuts on windows/linux, but the message window cues were only implemented on console. This just uses the more div to show custom messages. -------------------------------------------------------------------------------- b3f9c8a74a | advil | 2021-08-17 10:38:20 -0400 fix: default ctrl/shift behavior for numpad `*`/`/` This allows rebinding these keys, in contrast to regular * and /. -------------------------------------------------------------------------------- ed537f1d7e | advil | 2021-08-17 10:38:20 -0400 Revert "fix: temporarily disable new keymappings except 0-9" This restores full new-numpad handling from the commit sequence pre-tournament. * In trunk, people who have macros set to F1-Fn using keycodes in the -1000 range will need to adjust those to the correct keycode range (-265 etc). There'll probably be complaints about this, but this change needs to happen some time or other. * Distinct keycodes for more number pad keys are enabled; this is a bit keyboard dependent. These should already, hopefully, have reasonable default bindings. This reverts commit 662ed650adae8ada8c3a4fa3e5978df99d465dd1. -------------------------------------------------------------------------------- 780c878087 | Edgar A. Bering IV | 2021-08-17 17:16:07 +0300 fix: describe frost creeping from trees -------------------------------------------------------------------------------- 7777c1c129 | Edgar A. Bering IV | 2021-08-17 17:13:45 +0300 fix: a frozen tree form information leak (12624) -------------------------------------------------------------------------------- 638331083e | Edgar A. Bering IV | 2021-08-17 16:07:51 +0300 fix: update item seen status in relevant places (12626) This also fixes sporadic reports of monsters still picking up items a player has seen: the SEEN flag was not being set until the _prep_input stage of the player's turn, so a monster could walk into view and wield an item just revealed by the player. -------------------------------------------------------------------------------- 911e812f60 | Edgar A. Bering IV | 2021-08-17 10:13:02 +0300 fix: warnings for hasty artefacts (Majang) -------------------------------------------------------------------------------- 5eb9c77d6f | Edgar A. Bering IV | 2021-08-17 09:54:19 +0300 fix: set an appropriate string for a const prop (12629) Also closes #2070 and #2071. The bug was that both ITEM_TILE_KEY and WORN_TILE_KEY had the same value; on local tiles this would manifest by occasionally tripping an assert when a doll tyle would pass through tile_main_info. On webtiles javascript is more flexible and happily indexed the strange tiles requested, resulting in player doll tiles appearing in item stack icons and unseen mosnter tiles appearing on the floor. -------------------------------------------------------------------------------- a708605c5b | Nicholas Feinberg | 2021-08-16 19:37:26 -0700 hack: Make monsters not res tele self Very curious when this bug was introduced. I saw it reported a few months ago, but I'm not sure it was in 0.26. -------------------------------------------------------------------------------- d8966da807 | Nicholas Feinberg | 2021-08-16 19:24:00 -0700 Make potions of attraction translocate (kate) To preserve their utility for stabbing sleeping monsters (fun and potentially risky!) while keeping them consistent/intuitive with effects like Lesser Beckoning and Gell's Gravitas, which do wake monsters, retheme Attraction as translocating its victims rather than 'pulling' them. This is also more consistent with its behaviour wrt terrain obstacles like deep water and lava. The tloc clouds might have other weird effects, but even in zigs, they don't seem to do an awful lot in practice. This reverts commit 8d3330d46d1c987e9b2bae9433c9aefaa59c07d7. -------------------------------------------------------------------------------- a704b87b3c | Nicholas Feinberg | 2021-08-16 19:03:33 -0700 Fix Oka/Trog gift message order Maybe! This probably breaks something else important. -------------------------------------------------------------------------------- b2089b6bb7 | Edgar A. Bering IV | 2021-08-17 00:21:42 +0300 fix: try to place the entire requested number of maps with place_maps Since 2010, the dgn.place_maps function would attempt to place the requested number of maps... until one failed to place for any reason, then it would give up. Before then it would error, so this was an improvement. However the commit messages around that time suggest that the goal was for the function to continue in its attempt, and return the total number of placed vaults. This change should hopefully make some of our serial vaults shine a bit better. If they become too overwrought we might need to retune the number of serial maps each one places, but in my local testing it seemed ok. -------------------------------------------------------------------------------- 0eb5c47895 | Kate | 2021-08-16 22:07:03 +0100 Adjust "toggle layers" keybinds Use 'a' to toggle all visible layers instead of escape, so that escape can be used for its expected behaviour of cancelling out of the prompt. -------------------------------------------------------------------------------- 6f4fce7e9c | Kate | 2021-08-16 22:04:31 +0100 Dismiss summoned allies on joining Okawaru Instead of turning them hostile. -------------------------------------------------------------------------------- 787e458d71 | Kate | 2021-08-16 03:27:54 +0100 Revert "chore: add a trunk reminder for the 0.27 tournament" Tournament over! This reverts commit 06dbe2521f2f3a55d5c719914c39637abdb66fd0. -------------------------------------------------------------------------------- f39b64463d | Kate | 2021-08-16 03:09:24 +0100 Remove a duplicate failure check from +Blink So that (for example) activating it with Ozo's Armour active gives the prompt to abort before checking whether the ability fails. -------------------------------------------------------------------------------- 745f8db33d | Kate | 2021-08-16 02:54:43 +0100 Add a missing return -------------------------------------------------------------------------------- 5b07bef5ff | Kate | 2021-08-16 02:15:31 +0100 Give Okawaru a no-allies conduct Okawaru now demands that the player fight alone and prevents all allies, functioning the same as Ru's Sacrifice Love while worshipped. Requiring that the player fight alone fits well into Okawaru's theme (and has already been shown to work well as a conduct under Ru) so should let the god remain strong and straightforward but with a noticeable downside. -------------------------------------------------------------------------------- 7b975550ec | Kate | 2021-08-16 02:07:47 +0100 New Okawaru ability: Duel Granted at 5* (with Finesse moving earlier, to 4*), the Duel ability smite-targets a single non-summoned enemy in LOS (which must be threat level "tough" or higher), and transports them and the player to an Arena portal vault. The ability is aimed at giving Okawaru worshippers a more exciting top-end power, letting them isolate key foes and (alongside the upcoming conduct) fitting with the god's theme of appreciating the player proving themselves in combat. Invocations skill currently only affects success rate, but could possibly be used to give duels a power-dependent time limit. Water/lava-only monsters cannot be dueled, and banishment from within the Arena is blocked for both the player and monster. Winning the duel opens a gate to return from the portal vault, and the player will be forcibly teleported back after a short duration (to give them some time to loot before leaving). The Arena vault itself has a few cosmetic variations - any future variants should remain simple, with minimal terrain, and should be small enough for the whole arena to be in LOS on arrival. Each Arena also includes some favoured of Okawaru spectating the duel and cheering/jeering, and these could use some custom tiles and possibly more speech lines. -------------------------------------------------------------------------------- 7eff39e849 | Kate | 2021-08-15 22:21:15 +0100 Remove remaining support for mechanical traps Cleans up a large amount of dead code, with a few very minor gameplay implications - monster intelligence no longer has any effect on whether they try to avoid specific traps, since its only remaining effect was on friendlies avoiding teleportation traps. Instead of having only intelligent allies avoid them, let all allies avoid them. -------------------------------------------------------------------------------- 4af1e16f07 | Kate | 2021-08-15 22:21:15 +0100 Remove mechanical traps from Sprints They were already only a few left, and none of them were likely to have meaningful effects. Also clean up a couple of other vault definitions with '~' glyphs that weren't used in the vault itself any more. -------------------------------------------------------------------------------- e36b712cf9 | Kate | 2021-08-15 22:20:58 +0100 Fix spelling A pesky 'z' snuck back in. -------------------------------------------------------------------------------- 83978e0af5 | Nicholas Feinberg | 2021-08-15 13:42:48 -0700 De-indent Ignition logic -------------------------------------------------------------------------------- 3afc62176d | Nicholas Feinberg | 2021-08-15 13:38:17 -0700 Nerf Robin's damage Reduce back to 0.26 levels. (This is in response to a big spike in Robin kills in 0.27 - Robin was overlooked in those changes.) -------------------------------------------------------------------------------- bfbcaea002 | Nicholas Feinberg | 2021-08-15 13:34:54 -0700 Give Sigmund his slow scythe back 581982f5c1d5d0416b5a increased Sigmund's attack speed by 33% (from 15 aut/swing to 10), which dramatically increased his lethality. Let's bring him back to his usual level of cruelty. -------------------------------------------------------------------------------- e028cf09b9 | Nicholas Feinberg | 2021-08-15 13:34:23 -0700 Cut Jackal spawn rate considerably This rose by about 75% from 0.26 to 0.27, which wasn't intended and considerably increased early game caster deaths. There's probably more cleanup to be done here. This seems to increase D:1 XP somewhat; that might have other knock-on effects... -------------------------------------------------------------------------------- 77845bc91e | Nicholas Feinberg | 2021-08-15 13:33:42 -0700 Add a message for dj quaffing magic When quaff-iding !magic, add a message indicating that it was useless for you. -------------------------------------------------------------------------------- 10db4a4e68 | Nicholas Feinberg | 2021-08-15 13:33:22 -0700 Remove 8x from starburst damage description Not really meaningful. Should Fireball be 9x..? -------------------------------------------------------------------------------- 1a3d647539 | Nicholas Feinberg | 2021-08-15 13:32:55 -0700 Tighten up Usk description Remove some distracting fluff to make it clearer what 'the dance' is. -------------------------------------------------------------------------------- 5ad2e3275a | Nicholas Feinberg | 2021-08-15 13:32:29 -0700 Fix the build -------------------------------------------------------------------------------- f2ccef998a | Nicholas Feinberg | 2021-08-15 13:28:01 -0700 Make all shields only use Dex Instead of kite & large shields using a mix of strength and dex for bonuses. I doubt this will have a large impact on most characters, but should make shields a little simpler to reason about, and will reinforce Dex's role as a defensively focused attribute. -------------------------------------------------------------------------------- 6dc78333b9 | Nicholas Feinberg | 2021-08-15 13:27:45 -0700 Randomize wizmode player ghost names Seemed funny. -------------------------------------------------------------------------------- 162c5fecbd | Nicholas Feinberg | 2021-08-15 13:27:26 -0700 Customize antimagic wield messages for dj Since it has no effect on them. -------------------------------------------------------------------------------- 722926ba4e | Nicholas Feinberg | 2021-08-15 13:27:10 -0700 Remove nonexistent prop references Added in 0d0c82d5f74 but never actually implemented. -------------------------------------------------------------------------------- 184090c6a4 | Nicholas Feinberg | 2021-08-15 13:27:08 -0700 Constify almost all string literal props To avoid silly issues caused by typos. The rest should probably be constified too, I just ran out of energy. -------------------------------------------------------------------------------- 3b27209acc | Nicholas Feinberg | 2021-08-15 13:21:57 -0700 Remove separate acc/damage plusses Funny antique leftover in vaults parsing code. -------------------------------------------------------------------------------- e0fec98b5a | Nicholas Feinberg | 2021-08-15 13:21:45 -0700 Remove curses A few last leftovers. -------------------------------------------------------------------------------- 9f22321abd | Nicholas Feinberg | 2021-08-15 13:21:27 -0700 Standardize more monster Blink spells This should again have very few gameplay effects, but along with fixing the sap magic interaction, this will also cause blink range, blink away, and blink close to cause (a tiny amount of) noise. Exciting! -------------------------------------------------------------------------------- 09c23b12f5 | Nicholas Feinberg | 2021-08-15 13:21:12 -0700 Standardize monster Blink spell logic Remove a weird special code branch. This should have very few gameplay effects, though does mean that sap magic will interact properly with Blink. -------------------------------------------------------------------------------- d229782820 | Nicholas Feinberg | 2021-08-15 13:20:18 -0700 Fix MCC goldification Looks like it was intended that MCC would still make gold under Gozag, but one vital check was missed. -------------------------------------------------------------------------------- f319017eea | Nicholas Feinberg | 2021-08-15 13:16:20 -0700 Simplify find_maxwells_possibles() Use grid_distance() instead of reimplementing it and de-indent. -------------------------------------------------------------------------------- 0a0d85e590 | Nicholas Feinberg | 2021-08-15 13:16:20 -0700 Give Maxwell's LOS range Range was limited to 5 to avoid risk-free murder of statues, but, as a level 8 spell, it's probably fine to murder statues freely. It's simpler to reason about the spell if it can hit anywhere in LOS - players already get confused about the delayed targeting, so we don't need to add more space for ambiguity. (If it did miss due to being outside range, it'd be quite unclear what had happened.) -------------------------------------------------------------------------------- 71813d69f4 | Nicholas Feinberg | 2021-08-15 13:16:20 -0700 Simplify maxwell's name code monster::name already handles invisible monsters, and we don't have to worry about ones around corners. -------------------------------------------------------------------------------- ff2bc6137f | Nicholas Feinberg | 2021-08-15 13:16:20 -0700 Use constants for Maxwell's props To avoid simple errors. -------------------------------------------------------------------------------- fe3a445f75 | Nicholas Feinberg | 2021-08-15 13:10:50 -0700 Improve maxwell's no-target message Clarify that it failed due to a lack of target. ('Nothing happens' is very unclear in this context! And many others...) Also, de-indent. -------------------------------------------------------------------------------- 6365dcfadc | Nicholas Feinberg | 2021-08-15 13:10:50 -0700 Add a message for Maxwell's charge To clarify that something is actually happening when you hit '.'. The flashy status effect is cool, but very easy to miss if you aren't looking for it. -------------------------------------------------------------------------------- ab93a79d97 | Nicholas Feinberg | 2021-08-15 13:10:49 -0700 Tweak Coupling desc Clarify that you need to channel. Remove a mention of relec - not a confusion people seem likely to have. -------------------------------------------------------------------------------- 182d1643c2 | Nicholas Feinberg | 2021-08-15 13:09:04 -0700 Trigger battlesphere on staff of battle hits It seems cool. -------------------------------------------------------------------------------- a8238b5478 | Nicholas Feinberg | 2021-08-15 13:08:02 -0700 Move mobile golems onto 9 The '8' glyph was overstuffed, with 22ish monsters, while '9' had only 3. Shifting all mobile monsters from '8' to '9' creates a much better balance: 16 '9's and 9 '8's. If we want to have more golems or statues later, this should give us more flexibility. It also means that saltling no longer shares a glyph & colour with pillars of salt & diamond obelisks. -------------------------------------------------------------------------------- d52c3af447 | Nicholas Feinberg | 2021-08-15 13:05:44 -0700 Simplify airstrike damage Remove the floor of 3 on bonus damage from surrounding empty spaces. Now that we display this to players, it's too confusing to try to explain. This is a small nerf. -------------------------------------------------------------------------------- 176428ccee | Nicholas Feinberg | 2021-08-15 13:05:42 -0700 Display airstrike bonus in the targeter -------------------------------------------------------------------------------- febfb30b37 | Nicholas Feinberg | 2021-08-15 13:04:56 -0700 Show empty spaces around Airstrike targets And avoid information leaks. -------------------------------------------------------------------------------- e8fccdb193 | Nicholas Feinberg | 2021-08-15 13:04:55 -0700 Add an airstrike targeter Show a brighter or darker target indicator based on the number of empty spaces around the target. -------------------------------------------------------------------------------- 4aefe609b9 | Nicholas Feinberg | 2021-08-15 13:04:55 -0700 Show shatter damage in the targeter Highlight susceptible enemies with AFF_MULTIPLE and show enemies that take reduced damage (eg jellies) with AFF_MAYBE. -------------------------------------------------------------------------------- 63affc0d33 | Nicholas Feinberg | 2021-08-15 13:04:55 -0700 Make the Shatter targeter more precise Show visible affected monsters & walls, including the chance to shatter different terrain types (roughly). -------------------------------------------------------------------------------- 99093fa9e1 | Nicholas Feinberg | 2021-08-15 13:02:34 -0700 Remove the rune requirement to enter ziggurats This was added in 07949ec7b9c0 as a replacement for the old gold-based ziggurat entry cost, rather than as something with a solid justification in itself. Later discussions (e.g. https://s-z.org/crawl-dev/%23%23crawl-dev-20140929.lg ) suggested that the reason for the 2-rune requirement was as a 'progression' between Vaults and Zot. The Zot rune lock exists so that players are forced to battle the difficult and exciting encounters guarding runes before winning the game, and the Vaults rune lock likewise exists to encourage players to get at least one rune earlier, while the earlier S runes are still challenging. The Zig rune lock, in contrast, has no real justification other than history. So let's cut it! -------------------------------------------------------------------------------- cafe5c4f27 | Nicholas Feinberg | 2021-08-15 13:01:55 -0700 Give Enchanters invisibility again Corona is not a very fun spell to use. The player is being asked to spend their time flipping a coin, and, unlike Ensorcelled Hibernation or Petrify or similar spells, they don't get a satisfying reward. Instead, they get a roughly 20% accuracy increase, which is really quite hard to notice. Most of the time, players are better off throwing stones or doing almost anything else. So, we'll remove Corona from the Enchanter starting book (that is, leaving them without a level 1 spell) and give them a single potion of invisiblity instead. This should be a net buff to the background overall. (It's a nerf to muen, but mummies should be used to suffering by now.) Arkane markspersons will be addressed in some way once ranged combat is reworked. They aren't changed in this commit. Does not revert 64f0e6ef8afa5d38b99351a6346e47b553adcc76 . -------------------------------------------------------------------------------- 027562a8d8 | advil | 2021-08-15 09:41:55 -0400 refactor: improve Menu action api a bit (take 2) Previously, the general on_single_selection function needed to handle selection for every MenuEntry, leading to things like conditioning on hotkeys in an awkward way, code being split up, etc. -- at least for the Menu use cases I've been introducing in the 0.27 cycle (macro submenus and the like). This commit lets a MenuEntry be defined directly with an action in the form of an on_select function, making for more coherent (though not less verbose) code in macro.cc. This reverts commit e9cb50d38746ba62bce27ec046d3c630cd5bc1b2. -------------------------------------------------------------------------------- cbb86046cc | Kate | 2021-08-15 00:38:20 +0100 Rebrace -------------------------------------------------------------------------------- e31878e1fe | Kate | 2021-08-15 00:37:39 +0100 Don't consider rings of rPois useless for bloodless vampires The useless item filter shouldn't drop items which will become useful again on returning to life. -------------------------------------------------------------------------------- f70498e230 | Kate | 2021-08-14 23:25:11 +0100 Improve vampire transformation messages -------------------------------------------------------------------------------- 8d3330d46d | Kate | 2021-08-14 23:25:11 +0100 Make potions of attraction wake up monsters Other methods of forced movement (Beckoning, Gravitas, etc) all wake monsters up, so potions of attraction not doing so is fairly unintuitive. -------------------------------------------------------------------------------- 73ec313a74 | Nicholas Feinberg | 2021-08-13 19:30:46 -0700 Fix yellow drac monster cast messages Broken since 29bf9f277ad , 2016. -------------------------------------------------------------------------------- e9cb50d387 | advil | 2021-08-13 19:18:01 -0400 Revert "refactor: improve Menu action api a bit" This broke some inventory menus, apparently. I don't have time to do a direct fix right now. This reverts commit 1b086527081208bf4a99ba5dbfafc23619dfe122. -------------------------------------------------------------------------------- fd0ec89410 | advil | 2021-08-13 12:01:58 -0400 doc: fix a confused comment -------------------------------------------------------------------------------- 1b08652708 | advil | 2021-08-13 11:52:12 -0400 refactor: improve Menu action api a bit Previously, the general on_single_selection function needed to handle selection for every MenuEntry, leading to things like conditioning on hotkeys in an awkward way, code being split up, etc. -- at least for the Menu use cases I've been introducing in the 0.27 cycle (macro submenus and the like). This commit lets a MenuEntry be defined directly with an action in the form of an on_select function, making for more coherent (though not less verbose) code in macro.cc. -------------------------------------------------------------------------------- a53d8862b5 | advil | 2021-08-13 11:52:12 -0400 refactor: unify some slaying calculations This is a followup to 09634a79b; adopting the assumption there that this calculation should be the same for monsters and players, just unify the code so they would be modified together. (Also, add a comment on the oddity of this calculation.) -------------------------------------------------------------------------------- a52ba8600a | Nicholas Feinberg | 2021-08-12 10:46:39 -0700 Redewiggle Closes #1825. -------------------------------------------------------------------------------- 278a0e9555 | Nicholas Feinberg | 2021-08-12 10:34:31 -0700 Rewriggl This reverts commit 9df8b82d6f4c636b92ce8c650f64e25a7c1e846f. -------------------------------------------------------------------------------- 9df8b82d6f | Nicholas Feinberg | 2021-08-12 10:32:48 -0700 Dewriggl -------------------------------------------------------------------------------- b8161351ab | advil | 2021-08-12 13:13:46 -0400 fix: rework fungal movement behavior Previously, fungus movement constraints were checked (at least) once per square they consider moving to. For deathcaps and wandering mushrooms, this is fine; their constraint is absolute. For lurking horrors, this led to some odd behavior: the `random2` call is rerolled for every possible target square, leading to a chance for movement that is a bit hard to reason about, and determined largely by the degree of openness around the monster. Various people have also reported that lurking horror movement patterns have changed, with them becoming more likely to charge and having weirder ("wiggly") paths. I *think* that to the extent this is true it is because of subtle interactions with changes in monster pathing over time: monsters consider more path options than they used to (I think), and so the odds of them charging at a distance have changed, and their paths are drawn from a wider variety of indirect paths. There may also have been an interaction with the introduction of squarelos. Though I have tested them with versions going back to 0.12 and the changes are not gigantic. This commit moves the movement check out of the low-level movement code, and so does the random check only once. This means that a lurking horror always has exactly 1 in LOS+1 chances of moving at the edge of LOS, rather than up to 5 in LOS+1 chances depending on the terrain. One noticeable side effect of this change is that a wandering mushroom at the edge of los will follow a foe as they move out of los, rather than giving the foe a turn out of los. This is because the sequencing is that the player moves, the fungus is out of los, and then can move. On the old code, the movement target was also considered, perhaps for this exact scenario. So if players find this too confusing, it may be necessary to restore some version of it at least for wandering mushrooms and deathcaps. I don't think lurking horrors would need it. -------------------------------------------------------------------------------- 169bfb5c5e | advil | 2021-08-12 10:27:47 -0400 fix: indicate SK_THROWING as a skill for stones (mishima) The only impact that I know of is that the skill will show up by default in the skill menu, but there could be other side effects. -------------------------------------------------------------------------------- 2bf3c13a2f | advil | 2021-08-12 00:54:00 -0400 fix: clean up redundant warning prompts This affected bad items when no hostiles were in view, they led to a double prompt. -------------------------------------------------------------------------------- 53fca2b799 | advil | 2021-08-12 00:54:00 -0400 feat: targeter and range checks for scroll of torment This also fixes (?) the handling of torment resistance in monster_info, where it seems to have been mostly ignored. Unless I'm missing something... -------------------------------------------------------------------------------- a44e4a4e2b | advil | 2021-08-12 00:54:00 -0400 fix: don't show ranged to-hit for non-missiles in default targeter This was specifically showing up for scrolls of torment, which don't have a targeter, but all of the details that this prevents are applicable only when this targeting behaviour is used for missiles. -------------------------------------------------------------------------------- 7ef01f2898 | hellmonk | 2021-08-11 23:11:07 -0400 feat: New ghost vault with an iron shot theme -------------------------------------------------------------------------------- 8873947cb4 | hellmonk | 2021-08-11 21:46:24 -0400 Improve descriptions of some weapon types (hawthornbunny) -------------------------------------------------------------------------------- 8b7c386d52 | advil | 2021-08-11 18:01:45 -0400 fix: use current los for lurking horror movement checks This doesn't really fix whatever general problems there may be with lurking horror movement, but it at least keeps them from getting stuck at the edge of Barachi vision range. (It shouldn't affect smaller ranges significantly because of the you.see_cell(targ) check.) -------------------------------------------------------------------------------- 844de0d849 | advil | 2021-08-11 17:07:12 -0400 fix: quiver range check for blinkbolt When there is no enemy in blinkbolt range, gray the quiver and improve autofight messaging. -------------------------------------------------------------------------------- c083491d3f | advil | 2021-08-11 16:59:27 -0400 fix: enforce range in blinkbolt targeting (kate) Previously, you could use ! or @ to target an enemy out of range, and blink to the end of range along the bolt path. This imposes the targeting restriction from power leap and line pass that also requires the monster target to be in range. (It also renames the relevant enum value and clarifies the comments in the enum.) -------------------------------------------------------------------------------- 0b5ac8c916 | advil | 2021-08-11 13:32:38 -0400 feat: a better wizmode interface to feature placing Sometimes for debugging purposes it is helpful to set up specific dungeon layouts in wizmode, but the interface via `&` for doing this was really quite painful. This commit adds a much better interface for placing a bunch of features quickly, via some wizmode-specific abilities that provide a helpful targeter. It may or may not be a good idea to have wizard-specific abilities (none exist prior to this), and if it turns out to be too annoying, I can convert these back to something more like the old `&` interface and selection. But for now, let's try this -- they are very convenient to access. Some further features it would be nice to have if there's demand (but since none of this is user-facing, low priority): * a way to change the feature being built within the targeting interface, right now you need to use the separate ability. * some way to create feature_property_types, right now you have to use the old UI to do this. * a better feature selection interface, what's there is the old one split off into its own function. * a way of toggling xray vision in the targeter? This is definitely most useful with xray vision on. (Is this the beginning of dcss creative mode???) -------------------------------------------------------------------------------- 49a0850c41 | advil | 2021-08-10 17:00:12 -0400 fix: improve message order for constriction damage This needs to message before the `hurt` call, otherwise various messages in `ouch` don't make sense, and messaging is missing entirely on player death. -------------------------------------------------------------------------------- 1f5599b4a6 | advil | 2021-08-10 16:45:07 -0400 feat: add a killer type for constriction Dying by constriction was completely undistinguished from melee damage aside from a status; this is probably ok for a direct constriction attack but is very confusing for BVC/grasping roots. On par with things like barbs and collisions, add a ktyp. -------------------------------------------------------------------------------- 4baf66127a | advil | 2021-08-10 10:18:39 -0400 fix: properly handle return on y/n popups with hover Return was just sending the default answer, not the selected one. (For legacy reasons, Menu distinguishes between on_single_select and pressing the hotkey for the item, but this really should be cleaned up so that Menus don't constantly need the kind of on_single_select I just added here.) -------------------------------------------------------------------------------- 63c4f9efeb | Kate | 2021-08-10 10:04:11 +0100 Remove mechanical traps from Tomb:1 The Tomb:1 corridor still had some mechanical traps left over. -------------------------------------------------------------------------------- 18048e5a82 | Kate | 2021-08-09 23:31:50 +0100 Add targeters for Blink, Disjunction, and Manifold Assault -------------------------------------------------------------------------------- 47d82705ae | Kate | 2021-08-09 16:10:53 +0100 Fully identify some partially-identified randarts Partial identification of these items is fairly confusing from a distance, since outside of specific rare vault placements, almost all items are now either fully unidentified or fully identified. Instead of partially identifying vault randarts and displaying the brand or base type but no other properties, just fully identify any randarts that have a fixed base type or are unrand fallbacks with a guaranteed brand. -------------------------------------------------------------------------------- 2c61e4fb76 | Kate | 2021-08-09 14:21:20 +0100 Adjust a monster attack brand description It's a little awkwardly worded either way, but rewording AF_BLINK to say "blink self" fixes the case where monsters with the brand were referred to as "it" even for monsters that should use a different pronoun. -------------------------------------------------------------------------------- cfcbea5bde | Kate | 2021-08-09 14:21:20 +0100 Fix uselessness checks for rCorr Rings of resist corrosion were incorrectly being considered permanently useless with temporary rCorr active (from a potion or a form that provides rCorr, for example). -------------------------------------------------------------------------------- 102d6777a4 | advil | 2021-08-08 14:07:30 -0400 feat: indicate existence of /help in webtiles chat The existence of commands that this describes, especially /mute, were not at all apparent to newer players, especially ones not familiar with something like irc. This commit also changes: * don't count interaction with / commands as unread messages * "back to game" -> "close", as a more accurate description of what this actually does. Also, maybe this should say "esc" unless focus is in the chat box? But no change here. These will need a webtiles restart and possibly hard cache reset for players to pick up. -------------------------------------------------------------------------------- f9c1391b64 | advil | 2021-08-08 13:30:02 -0400 fix: don't credit the player for wrath kills (Turukano) Wrath attacks reuse shadow creature code, and because of this, wrath kills were credited in the same way that shadow kills were credited. A version of this was supposedly fixed in 9176aad88b6178, but I don't think it actually was. The relevant check is not to the monster's actual mindex; in mon-death.cc killer_index is simply reset to the player with the actual mindex discarded as long as mons_is_player_shadow returns true. (As noted in the comment there I think this would all work better if the wrath code didn't reuse the player shadow code in entirety, this is a recipe for bugs to sneak in.) -------------------------------------------------------------------------------- 65e1ffefe4 | Edgar A. Bering IV | 2021-08-07 21:56:29 +0300 fix: okay then when cancelling Stack 5 (12622) -------------------------------------------------------------------------------- 325244837d | advil | 2021-08-06 16:07:12 -0400 fix: adjust targeter highlight colours In terms of the practical effect, this ups the alpha values so that the highlighters are more opaque; I also did a bit of color adjustment and moved the dimmer highlight a bit towards gray. This makes them more visible against blue and brown backgrounds, as in shoals. The new colors are probably uglier, but they are definitely more visible. More tweaking may be required. In the long run, I do wonder if some other color than yellow might work better here, or even something more complex like showing tile borders. Under the hood, this replaces the targeter highlight tiles with programmatically generated tiles, and fills out the tile tool with some commands to make this possible to do. -------------------------------------------------------------------------------- 8149849420 | advil | 2021-08-06 12:12:26 -0400 fix: respect no_tele_into in pan landing selection There is exactly one vault in pan.des which actually uses the prop, but that vault definitely places a formicid-dooming tele trap, so let's check the flag. I suspect it wasn't checked simply because historically it wasn't used. -------------------------------------------------------------------------------- 934d61de66 | advil | 2021-08-06 12:02:31 -0400 feat: show no_tele in wizmode cell description This is in order to make it very easy to double check vault props in console. -------------------------------------------------------------------------------- 9442e6b4c1 | Edgar A. Bering IV | 2021-08-06 17:45:46 +0300 feat: add bolt of draining to tengu reavers -------------------------------------------------------------------------------- 718bdbf3cc | Edgar A. Bering IV | 2021-08-06 17:30:58 +0300 fix: reset ashenzari boosts with fishtail merging -------------------------------------------------------------------------------- 25d27de915 | Edgar A. Bering IV | 2021-08-06 16:35:10 +0300 fix: don't add a redundant spectral Now that spectral is a brand we don't need to name the monster "a spectral +4 spectral quarterstaff". -------------------------------------------------------------------------------- b9de417b3f | Edgar A. Bering IV | 2021-08-06 12:50:55 +0300 fix: don't crash when abandoning ash with the finger necklace (CanOfWorms) -------------------------------------------------------------------------------- 9a7839dea9 | Edgar A. Bering IV | 2021-08-06 00:22:42 +0300 fix: range and chance in dispersal targeter -------------------------------------------------------------------------------- 9604337dc0 | advil | 2021-08-05 17:04:31 -0400 fix: render targeters after other overlays After a lot of digging, it turns out that these are simply assembled in the wrong order, so the targeter (ray) tiles are always drawn first. In local tiles, the way alpha blending works means this doesn't matter (or at least, I'm pretty sure that's what is going on), but in webtiles the effect was that the targeter goes under other tiles. In particular, it layered under wave tiles. This commit just brute-force pulls them out of the overlay list and draws them last in this list. Possibly these should be rendered even later. Also, for future people digging into this: `draw_ray` does not draw these ray tiles. I don't know what this function does draw. -------------------------------------------------------------------------------- 516ec72166 | Edgar A. Bering IV | 2021-08-05 22:32:34 +0300 feat: treat *Rage as intentionally hasty Players excpect it, the property is identified, berserk is triggered when the player makes a choice, and other intentional berserks anger Chei. -------------------------------------------------------------------------------- 312a84cf96 | Edgar A. Bering IV | 2021-08-05 21:37:18 +0300 fix: keep the lighthouse keepers from the flame -------------------------------------------------------------------------------- 7c29f1f256 | advil | 2021-08-05 12:05:57 -0400 fix: handle multiple SDL key events for numpad `.` For some reason, SDL is sending both . and Del for numpad . on some keyboards, even when . isn't delete. This commit handles that case by suppressing the . when there's a double event, and providing a default mapping of delete to CMD_WAIT. This should be fine because it's previously unbound, but I've set this to local tiles only; it seems buggy that SDL is sending this keycode at all (at least on my keyboard), so this may be a temporary fix if I can figure out what is going on here. SDL numpad handling generally needs some attention. For background on the key handling issues, see af9c1943b0bc. Reported by discord user Dank Memer. -------------------------------------------------------------------------------- 70931ec564 | Edgar A. Bering IV | 2021-08-05 18:54:53 +0300 fix: update acrobat for quiver-fired wait spells -------------------------------------------------------------------------------- 2d7b7a1a19 | Edgar A. Bering IV | 2021-08-05 18:19:00 +0300 fix: display hit chance in the starburst targeter -------------------------------------------------------------------------------- 9707f7362f | advil | 2021-08-03 12:35:43 -0400 fix: mark ENCH_SHORT_LIVED in monster descriptions Indicate that briar patches will crumble away. -------------------------------------------------------------------------------- 444c7a33f5 | Nicholas Feinberg | 2021-08-01 21:11:30 -0700 Alphabetize gods.txt Move Wu Jian into its proper location. -------------------------------------------------------------------------------- 53beef7077 | Nicholas Feinberg | 2021-08-01 16:43:17 -0700 Fix Tukima's description (rockygr) Forgot to touch this when I allowed Tukima to affect ranged weapons. -------------------------------------------------------------------------------- 616f7b5f32 | Kate | 2021-08-02 00:11:35 +0100 Fix Summon Lightning Spire not having a targeter As with other summons, it should show potential locations when its targeter is enabled via the force_targeter option. -------------------------------------------------------------------------------- 1dcfd26496 | Kate | 2021-08-01 23:34:27 +0100 Fix spelling in a description Missed this one in 70c531d6. -------------------------------------------------------------------------------- 15dc114455 | advil | 2021-08-01 14:16:25 -0400 feat: keycode help for macro mappings This introduces a detailed help screen for crawl-internal keycodes, and shows it in a couple of places in the macro menu. Some TODOs: * map SDL keycodes to this space so things are uniform across build targets * generate this help automatically from keycodes * fix a bug in webtiles where a popup over a title prompt does not receive focus for key input -------------------------------------------------------------------------------- 42140f4989 | Nicholas Feinberg | 2021-08-01 09:31:24 -0700 Fix transform wieldability display bug (sanka) Weapons that couldn't be wielded due to your current form (e.g. due to Blade Hands) would claim to be "too large" when examined. This should no longer occur. -------------------------------------------------------------------------------- 16105a9d8c | gammafunk | 2021-08-01 11:21:45 -0500 fix: Identify a guaranteed vault potion (Yermak) In wizlab_wucad, there's a guaranteed potion of experience. Pre-identify this potion in a way consistent with how we identify other guaranteed or highly probably loot types and properties. -------------------------------------------------------------------------------- 77753f3aa7 | gammafunk | 2021-08-01 11:21:45 -0500 feat: Don't use trees in a Swamp transporter vault The vault gammafunk_worm_tunnel uses a border of trees to help it blend in with the surrounding level. It's trivial to burn some of these trees with an item as common as scroll of immolation and collect the loot in a way that bypasses all threats in the vault. Also, the vault's size has been greatly reduced, so it doesn't stand out in a drastically weird way. This commit restores the stone walls when it places in Swamp, so it uses the same wall type in all places it generates. -------------------------------------------------------------------------------- 84acfa7270 | advil | 2021-07-31 16:19:07 -0400 fix: speed up explosion calculations (gammafunk) The check for whether a cell had already been seen with count value <= n was not properly taking into account the additive factor cadd that is accumulated on recursion, and so was redoing a lot of calculations to no extra effect. This led to big slowdowns on e.g. firestorm targeters in open areas. Or at least, that's what I *think* was happening, this algorithm is pretty complicated. But this change speeds things up quite a bit, and doesn't change explosion shapes as far as I can tell. N.b. this function is still called many times during targeting, but without noticeable slowdown after this change, in my profiling. -------------------------------------------------------------------------------- dd8709b231 | Kate | 2021-07-31 20:58:50 +0100 Fix poison-vulnerable monsters displaying as meph immune -------------------------------------------------------------------------------- 91ee094a69 | robertxgray | 2021-07-31 15:11:26 +0200 Move Android related ignores to crawl-ref/.gitignore -------------------------------------------------------------------------------- 11f8450190 | robertxgray | 2021-07-31 00:27:13 +0200 Update Android port to 0.27 - Fix compilation errors with current code. - Fix small layout. Some errors were introduced with MUT_HP_CASTING. - Fix #1702. Cache not rebuilding on upgrade. - Fix title when show_game_time option is set. - Fix small layout crashing with limited vertical space. - Restore virtual keyboard on landscape mode. - Move toggle keyboard button from commands to system. - Add toggle keyboard button in the new main menu. Shortcut (F12) assigned for consistency. -------------------------------------------------------------------------------- f8cea274af | robertxgray | 2021-07-31 00:26:56 +0200 Update Android build Tested with DCSS 0.26.1, SDK for Android 11 (API level 30) and NDK version r22b. Build changes - Added a gradle build setup for the android app. - Removed previous build.xml. - SAVEDIR static storage path repaced with SDL_AndroidGetExternalStoragePath. - Disable FORTIFY in lua to avoid runtime errors. - Updated various #ifdefs for __ANDROID__ and TOUCH_UI to handle current android builds. - TOUCH_UI build is no more. Most of the code has been removed because it's not working as expected. The rest has been merged in the Android build. - Some __ANDROID__ directives are no longer required for the build. They have been removed. New features - Show keyboard icon now can also be used to hide the virtual keyboard. Renamed to: Toggle keyboard. - Android's back button no longer hides the keyboard when the Activity is focused, now it behaves like an alias for the escape key. - The volume keys can be used for zooming the dungeon and the map. - Two finger scroll can be used on menus. - Custom font configurations to improve readability in small screens. The game auto scales in high resolution displays. - Added summary of Android controls to the help screen. - New option: tile_window_minimum. When set to false, disables the window size restrictions for testing purposes. - The small layout has been fixed and improved. Now it shows the same information as the default layout and the tab menus scale better to modern smartphone displays. - Small layout can be enabled with configuration option: tile_use_small_layout. This is now the default on Android. - Custom keyboard inspired by the ascii port. It is no longer needed to install 3rd party apps por better gameplay. - Support for physical keyboards. Fixes - The game is saved when the Activity is paused. It was very easy to lose progress (on purpose or by mistake) before. - If the virtual keyboard is visible when the Activity is paused, it will be visible again when the Activity is resumed. - The main menu no longer hides behind the virtual keyboard on startup. - Lots of fixes for the small layout. It no longer crashes on vertical displays. - Controls fixed on Android 10 and newer. - Fix game crash when wielding a launcher while quivering something different than the ammo. - Replace various fopen with fopen_u when opening the bones files and some wizard, test and debug functions. - Set the external storage path as the working directory to fix several write permission errors. - Don't show the keyboard on portrait mode to avoid crashes on some devices because of the lack of vertical space. -------------------------------------------------------------------------------- 49dcd67cf8 | gammafunk | 2021-07-30 13:04:52 -0500 doc: Credit ZureaL in the server admin list I've also reorganized these names using the "last name or nick" ordering that we use for other credits. -------------------------------------------------------------------------------- 3707ed8130 | advil | 2021-07-30 13:08:41 -0400 fix: handle clicking on non-chr hotkey items correctly When input is sent via `data`, it is passed through `chr()` in the python code. But, the value stored here is a keycode and may be negative for special keys, so this was causing an exception in python. This comes up specifically when clicking on macro menu entries for some special keys, and pretty much nowhere else (the main menu uses esc, but this is still a positive keycode). On the user side, it's relatively harmless, the symptom is just that clicking doesn't work, so backporting to stable is not urgent. It just produces log messages. Two changes around this: * for arrow-selection menus, don't use the hotkey at all, force calling on_singleselect. (Hopefully in the future this distinction is better cleaned up.) * send hotkeys via `keycode` rather than `data`, so that this code is more robust for the future. Should have no impact on current menus... -------------------------------------------------------------------------------- bfdb43030f | advil | 2021-07-30 12:13:31 -0400 fix: extend aa6b198b to keydown handling (Spaniq, wheals) This will be more impactful once full numpad key handling is back on, but for now it is also impactful on keyboards that send a high/numpad-specialized keycode for some numpad operator keys together with a regular keypress (I can reproduce this on mine). I think this override (and the one in aa6b198b) could be made better by checking whether the menu is in key entry mode specifically, it doesn't need to happen for the entire menu. However, I don't want to mess with this too much just now. -------------------------------------------------------------------------------- 06dbe2521f | advil | 2021-07-30 10:09:38 -0400 chore: add a trunk reminder for the 0.27 tournament -------------------------------------------------------------------------------- 041002c0f2 | advil | 2021-07-30 10:09:24 -0400 Revert "chore: Add a trunk reminder for the 0.26 tournament" This reverts commit e6e398f9e6a4651d34eba70066e19c64dbf84b5b. -------------------------------------------------------------------------------- e6e398f9e6 | advil | 2021-07-30 10:06:28 -0400 chore: Add a trunk reminder for the 0.26 tournament -------------------------------------------------------------------------------- 6846a8eab2 | advil | 2021-07-30 10:06:28 -0400 fix: shorten tournament message to <80 chars This is not wrapping on current UI for whatever reason, so just shorten the message a bit so it can be fully shown on console. -------------------------------------------------------------------------------- 662ed650ad | advil | 2021-07-30 10:04:22 -0400 fix: temporarily disable new keymappings except 0-9 Because the previous commit fixes this in code that usually takes a while to make its way into people's caches, I'm just temporarily bringing trunk's keypad and fn key behavior in line with 0.27, in hopes of getting the persistance bug to go away quicker. This commit partially readds some of the legacy handling for function keycodes in the -1000 range, so that their names aren't shown confusingly for anyone actually using trunk while this commit is in place. I expect to revert this commit in the near future. -------------------------------------------------------------------------------- f225e029a1 | advil | 2021-07-30 09:35:00 -0400 fix: actively reset keycode mappings on lobby load Because these were getting set only on load of the entire app, my attempts at versioned keycode mapping were getting reset only on a full reload and therefore persisting across versions -- needless to say this created a bunch of confusion. -------------------------------------------------------------------------------- 54b5640690 | gammafunk | 2021-07-30 00:13:20 -0500 doc: Final changelog updates for 0.27.0 Main and debian changelogs (cherry picked from commit a0080399dad664af76b4aa87ab7530497249abb0) -------------------------------------------------------------------------------- b16ffaf7c1 | Nicholas Feinberg | 2021-07-29 19:30:06 -0700 Djinni changelog rewording (gammafunk) Mention using Spellcasting instead of spell schools. -------------------------------------------------------------------------------- 8378e6c968 | Kate | 2021-07-30 02:22:47 +0100 Remove mechanical traps from a Tomb entry vault It was using the ~ random trap glyph, which shouldn't really be used anywhere. -------------------------------------------------------------------------------- 271197699b | Nicholas Feinberg | 2021-07-29 14:36:36 -0700 Tweak end_maxwells_coupling Reduce indentation and fix a typo. -------------------------------------------------------------------------------- f87c99a2d6 | Edgar A. Bering IV | 2021-07-30 00:00:43 +0300 docs: update CREDITS.txt -------------------------------------------------------------------------------- ed1d120c62 | Kate | 2021-07-29 21:54:54 +0100 End Searing Ray on Felid revival In the extremely rare case of being revived on the same square that the player died on, Searing Ray would continue being channeled. -------------------------------------------------------------------------------- a6d7c33c12 | Kate | 2021-07-29 21:54:41 +0100 Fix compilation -------------------------------------------------------------------------------- f67c460f1f | Edgar A. Bering IV | 2021-07-29 23:33:00 +0300 fix: expire ramparts and mcc on felid revival -------------------------------------------------------------------------------- 867ca72370 | Elliott Bernstein | 2021-07-29 23:33:00 +0300 fix: empty corrupting presence source messages Closes #2046 [ Committer's note: also addressed the use of malmutate (currently ignored but good future proofing and adjusted the commit message. ] -------------------------------------------------------------------------------- 0740493359 | Edgar A. Bering IV | 2021-07-29 23:33:00 +0300 tile: Word of Chaos ability icon (CanOfWorms) -------------------------------------------------------------------------------- 04a2f65e3b | advil | 2021-07-29 16:23:44 -0400 fix: add some default bindings for distinct numpad extra keys Some numpad operator keys may now be bindable separately from their regular versions. This commit assigns as many of them as I could their regular default bindings in various contexts. This commit is a bit brute-force, and some eventual unification with local tiles would also be nice. It may actually be better in the long run to collapse the multiple versions of `=/*-+.`? For one thing, I don't think the differentiation of these across different devices is wholly reliable. -------------------------------------------------------------------------------- eb8ac83edc | advil | 2021-07-29 11:21:21 -0400 fix: minimize impact of numpad changes on old versions This commit should restore the exact (sometimes broken, but mostly semi-working) behavior of the numpad on pre-0.27 versions. I've seen reports of issues on e.g. 0.26 where it's a bit tricky to identify the exact cause, and so this is to try to eliminate them. Possibly, some of this can be later removed, e.g. this restores a browser-specific chrome tweak that doesn't line up with my testing of current chrome in the wild (that's why I originally removed it). -------------------------------------------------------------------------------- fd831c5874 | advil | 2021-07-29 09:28:30 -0400 fix: capture ctrl+0-9 keys (dilly) It does not look like the crawl binary handles these at all, so I'm not sure how much this will do, but this may help with ctrl+numpad combos where the number key is interpreted as an arrow/home/etc and the browser was capturing it. -------------------------------------------------------------------------------- fa555f5c9d | advil | 2021-07-29 08:58:00 -0400 fix: only normalize numpad number keycodes The key conditional in 7b1be97da7 was converting too many cases; for example it was possible for `code` to be NumpadX with arrows/home/etc. This also should fix shift handling for a number of cases, depending on what the keyboard actually sends. * report 1 (Ham): shift-5 sends clear. This should now be fixed for this key configuration, as I think it was being prevented by keycode overwriting. It's worth noting that this is a pretty non-standard arrangement, and since we have no specific translation for shift-5, it probably just sends numeric 5 on many keyboards (as it does on mine). I'll await more reports to see if there should be some standardization for shift+5. Shift+0 is in a similar state. * report 2 (dinky): `code` values lined up with number keys, but `key` and `keyCode` are arrow/home/etc. keys. Interestingly, no keypress event at all. Again, fixed by reining in keycode replacement. We'll see what other exciting keyboard situations the world provides next... -------------------------------------------------------------------------------- 7b1be97da7 | advil | 2021-07-28 15:01:48 -0400 fix: improve handling of numpad keycodes on webtiles Modern browsers can differentiate numpad keycodes from their regular versions quite straightforwardly, but this information wasn't being handled well by the javascript interface. This was manageable on devices that have numlock, because with numlock off, the keycodes for the secondary keycodes are usually fine for movement, and the number keys are available for macros. But on devices without numlock (like all macs for many years), this was pretty annoying if you use the numpad for movement -- there was no way to use the numrow number keys separately, and rebinding them rebound the number pad keys. Moreover, these keys were generally handled better on local console/tiles. This commit attempts to remedy this situation along with some other tweaks. * key handling in the webtiles client now has a versioned component that can override unversioned key handling. * Support for legacy F keycodes (see b0746d5dc15c) is dropped going forward. This will break some existing macros that used the (wrong) values in the range -1011 to -1014, these should be easy enough to fix up but basically the correct values are -265 to -268. * The client uses w3c `code` values[1] to detect numpad keys in a way that works across browsers and maps them to (a version of) the internal keycodes that local console was already using for them. This means that default movement bindings etc continue to work for them. * I did some standardization and cleanup of these keys for non-local-tiles builds, and their names will show in the macro editor. [1] https://www.w3.org/TR/uievents-code/#code-value-tables Caveats: * The underlying curses code remains quite shaky, and numpad = is currently not handled at all. * The versioned keymapping API is non-existent; and in the future we may want to consider modernizing this to check `code`. * Probably more variation across devices / builds than is accounted for here... -------------------------------------------------------------------------------- da2e87d069 | advil | 2021-07-28 11:35:06 -0400 fix: off-by-one error in menu calculations This was causing javascript exceptions in webtiles with 1-item menus. I'm not sure it was otherwise very consequential, maybe visual glitches when spectating? I'm actually still not sure that this is being calculated right (based on some output debugging) but it isn't causing invalid menu jump_to targets any more, that I can find. -------------------------------------------------------------------------------- f34e66f144 | gammafunk | 2021-07-28 01:40:20 -0500 doc: Mention Storm Form in the changelog -------------------------------------------------------------------------------- 560ac104fe | gammafunk | 2021-07-27 14:00:28 -0500 fix: Don't make redundant explosion calculations Some targeters use explosion map data calculated by struct bolt for both the minimum and maximum possible explosion radii. In cases where those radii are identical, the calculations are still run twice. This commit copies the minimum radius explosion data when the maximum data would be identical. -------------------------------------------------------------------------------- 6621cef402 | gammafunk | 2021-07-27 13:58:42 -0500 fix: Correct the LRD targeter display (CanOfWorms) The fragmentation targeter's display wasn't properly accounting for intervening walls and statues and indicated additional cells as being affected that were not in the final explosion. This was because the targeter was running the explosion map determination code with the incorrect arguments and beam flavor. The actual LRD explosion was correct, since that's run later, and in the correct way. This commit corrects the targeter logic so it agrees with the actual explosion. -------------------------------------------------------------------------------- 4b2499a8ea | Edgar A. Bering IV | 2021-07-27 18:51:57 +0300 fix: apply item_slot when merging stacks from a shop Closes #1685 -------------------------------------------------------------------------------- 9cfa8ffb95 | Edgar A. Bering IV | 2021-07-27 18:14:39 +0300 fix: don't pick up floor-id'd useless items (12530) -------------------------------------------------------------------------------- 3fd8b35b7f | Edgar A. Bering IV | 2021-07-27 17:36:06 +0300 fix: adjust default autopickup autopickup exceptions is an ordered option, put the good_item default last so useless items that would be good for someone else don't get picked up. Closes #2042 -------------------------------------------------------------------------------- 9055cd164d | Edgar A. Bering IV | 2021-07-27 17:34:08 +0300 docs: correct an options guide entry -------------------------------------------------------------------------------- af9d615c11 | Edgar A. Bering IV | 2021-07-27 17:20:18 +0300 fix: don't consider branded missiles emergency items 6be897d added these, unfortunately the `\` menu doesn't break down missiles by brand and this has led to autopickup confusion reported in several places by players, both inexperienced and veterans. So until the interface issues can be revised let's not do that. -------------------------------------------------------------------------------- 8ae03cc802 | Edgar A. Bering IV | 2021-07-27 17:15:26 +0300 feat: two new quotes (hyperactiveChipmunk) Move the old very ugly thing quote to fenstrider witches (where it fits better) and put the muppet show quote on very ugly things. Closes #2043 -------------------------------------------------------------------------------- d9e24bc47f | Edgar A. Bering IV | 2021-07-27 10:26:43 +0300 docs: update the mailmap -------------------------------------------------------------------------------- 10cfe34aa0 | Edgar A. Bering IV | 2021-07-27 10:13:43 +0300 docs: two CREDITS renames -------------------------------------------------------------------------------- 6342605492 | Edgar A. Bering IV | 2021-07-27 09:30:14 +0300 docs: update the credits -------------------------------------------------------------------------------- 8dfe7f97f6 | gammafunk | 2021-07-26 23:38:42 -0500 fix: Have Overgrow fail after targeting (#2018) Targeted abilities like Fedhas' Overgrow should always allow the targeter to work before processing any failure chance. This way players can see what they might affect using the ability targeter as part of deciding whether the attempted use is worthwhile. Fedhas' other targeted abilities already work this way, so have Overgrow do the same. -------------------------------------------------------------------------------- bb1da1a3e9 | gammafunk | 2021-07-26 23:38:42 -0500 fix: Show affected walls for Overgrow (#2018) Fedhas' Overgrow ability targeter lost its can_affect_walls() override in the targeter reworks that followed positional magic. Restore this so that the targeter can display which walls Overgrow will affect. -------------------------------------------------------------------------------- 84e2d79d80 | Kate | 2021-07-27 03:31:19 +0100 Move a volcano entry out of flame cloud range volcano_tomb could still immediately drop players into a flame cloud on entry. -------------------------------------------------------------------------------- 0adfcbbeba | gammafunk | 2021-07-26 16:06:34 -0500 fix: monsters targeting of invis players (dilly) If a player goes invisible, monsters that have the player as a foe and that are sufficiently close to the player will have their throwing and launcher tracers "fuzzed" to indicate that the tracer hit. This allows monsters to sometimes shoot at invisible players and works fine if the player is reachable. But if the player isn't reachable, the logic leads to monsters performing pointless actions that can lead to monster collateral kills. For example, if the player goes invisible in front of a group of hostile monsters behind glass, monsters that can throw or fire launchers will attempt to shoot at the player, instead hitting monsters in front of them. This commit updates the monster logic in two places to prevent this behaviour. First we don't allow invisible player "hit fuzzing" to work for monster tracers if the player is not reachable under LOS_NO_TRANS. Then we require monster throwing/launcher actions to have the same "friendly monster or hostile monster with a LOS_NO_TRANS reachable foe" requirement used for spells, most special abilities, potions, and scrolls. The second change re-uses the result of a check we've already performed to prevent the tracer from being fired in the first place. The first change is still good to have, since it's not ever logical for a tracer to falsely tell a monster that an unreachable player can be hit. The logic that governs under what conditions monster take certain actions could be simplified more than I've done in this commit. Since we are close to release I want any change to be as minimal as possible, so this change will only affect throwing/launchers specifically. The other types of actions either already have the "friendly or near foe" condition described above, or do their own LOS_NO_TRANS check. I also suspect that the "friendly" portion of "friendly or near foe" condition can be dropped, since there's no reason a friendly monster would want to bypass reachability conditions. -------------------------------------------------------------------------------- 95c66c932c | Edgar A. Bering IV | 2021-07-26 19:59:57 +0300 tile: blinkbolt ability icon (CanOfWorms) -------------------------------------------------------------------------------- 84096a565d | Edgar A. Bering IV | 2021-07-26 19:45:24 +0300 tile: Shatter the Chains ability icon (CanOfWorms) Closes #2033 -------------------------------------------------------------------------------- e5760e785a | wheals | 2021-07-26 19:22:04 +0300 Remove CMD_FORCE_EVOKE_WIELDED -------------------------------------------------------------------------------- 17765e0794 | wheals | 2021-07-26 19:22:04 +0300 Change some false claims about staves They cannot be evoked (except for some few unrands) and they are on | by default, not \. -------------------------------------------------------------------------------- 643d97a57c | wheals | 2021-07-26 19:21:28 +0300 Standardize conversion of keycodes to text Only main change is that End and its variants should be properly rendered in the macro menu. Just to be safe, though, this should not be cherry-picked. -------------------------------------------------------------------------------- aa6b198bf9 | wheals | 2021-07-26 18:44:55 +0300 Allow +/- as inputs in the macro menu on Webtiles (Spaninq) -------------------------------------------------------------------------------- 9d592f0669 | CanOfWorms | 2021-07-26 09:40:12 -0400 Differentiate hydra tiles from plant tiles The shape of hydras (necks that stick out of a body) is similar to some plant tiles, so make the underbelly yellow to create contrast. -------------------------------------------------------------------------------- f74fda84f9 | Kate | 2021-07-25 23:49:55 +0100 Don't turn clear doors opaque when sealing them Closed clear doors were handled correctly, but opened ones were being turned into regular opaque doors when closing them to activate a vault warden's seal doors ability. Fixes #2024. -------------------------------------------------------------------------------- dd470a43dd | Nicholas Feinberg | 2021-07-25 14:22:19 -0700 Block wereblood heals under death's door (dilly) This check should probably be refactored in some way - I think it's duplicated in a few places. -------------------------------------------------------------------------------- 269154a5ba | Kate | 2021-07-25 22:16:43 +0100 Don't destroy cursed weapons without prompting when changing forms With a cursed holy wrath weapon equipped, trying to enter lichform would prompt the player about unequipping and destroying their weapon, but if the weapon was melded due to entering a different form first, there was no prompt when swapping from that form to lichform. Fixes #2027. -------------------------------------------------------------------------------- 3c0819f736 | Edgar A. Bering IV | 2021-07-25 22:50:37 +0300 fix: don't crash checking books for rampage -------------------------------------------------------------------------------- 8ee6c6440a | mainiacjoe | 2021-07-25 22:29:03 +0300 Mephitic Cloud --> Corpse Rot in Book of Vapours All the spells that appear in only one book and are not available in starting libraries are all level 7 or higher, except for Corpse Rot. At the same time, Mephitic Cloud is available from Turn 1 for two backgrounds, and also appears in three books. Thus with Mephtic Cloud being so easily gained, and Corpse Rot as hard to find as end-game spells, and both having a theme of noxious fumes, put Corpse Rot into the Book of Vapours in place of Mephitic Cloud. -------------------------------------------------------------------------------- e5b3285e1b | a | 2021-07-25 22:26:39 +0300 Fix typo in the manual's Missiles section This commit fixes a typo in the manual's Missiles section. The verb should be "throw" since it's being used as an infinitive. -------------------------------------------------------------------------------- d5dc72f758 | Edgar A. Bering IV | 2021-07-25 22:25:36 +0300 fix: fire fineffs after monster moves, too Closes #2036 -------------------------------------------------------------------------------- 30eb4d6358 | Edgar A. Bering IV | 2021-07-25 22:25:36 +0300 feat: increase penance for rampaging Simplify the check, only apply it to a rampaged move (or a step with the lightning scales) and always trigger the conduct. It should maybe cost more than one piety per rampaged move, but I leave that for the future. -------------------------------------------------------------------------------- 390debcb5f | Edgar A. Bering IV | 2021-07-25 22:25:36 +0300 fix: give a hasty item warning for non-armour Rampage (u/Delicious-Most5180) -------------------------------------------------------------------------------- 70c531d6f8 | Kate | 2021-07-25 20:02:47 +0100 Fix spelling A good instance where we used three distinct spellings, none of which were the apparent standard Australian English spelling. -------------------------------------------------------------------------------- aa4a0049d6 | Nicholas Feinberg | 2021-07-25 08:37:13 -0700 Embellish the changelog -------------------------------------------------------------------------------- 964c8b829e | Kate | 2021-07-24 21:29:15 +0100 Adjust some tutorial text Tweak a spellbook name and wrap an overly long line in a summary. -------------------------------------------------------------------------------- 1e78e81bf7 | advil | 2021-07-24 10:56:10 -0400 docs: changelog updates This is mostly filling in UI/options things; a few clarifications elsewhere. -------------------------------------------------------------------------------- 6e044cfa68 | Kate | 2021-07-23 05:01:48 +0100 Update hints mode Fix some typos and broken hint triggers, remove some obsolete hints, and update some out-of-date information. -------------------------------------------------------------------------------- 84f66890ac | gammafunk | 2021-07-22 22:53:24 -0500 Update the changelog through 0.27-b1-2-g8387495791 -------------------------------------------------------------------------------- 334057b17a | advil | 2021-07-22 15:50:32 -0400 fix: exclude autofight paths that can't see the target This is a solution to: https://crawl.develz.org/mantis/view.php?id=11905 https://crawl.develz.org/mantis/view.php?id=12576 In both of these cases, autofight's pathfinding gets into a trap because under various conditions it prioritizes a move that doesn't keep sight of the target along a path visible from the starting point. But, because the search is greedy, it doesn't go back and try an alternative path when this first attempt fails. Because (for whatever reason) it prioritizes diagonal moves, the setup usually involves a diagonal, but I think that switching the prioritization would lead to similar problems for straight moves. The sequencing here looks very delicate and for the most part it does seem to make do with a greedy search, so I didn't want to try messing with this. Rather, this commit introduces a check that throws out immediate moves where the current target would not be visible from. I've convinced myself that in theory this is entirely safe to do: if there's a path at all for autofight, there's a path that keeps sight of the target at every point. (And of course, potential paths that don't.) Hopefully this will hold up in practice. -------------------------------------------------------------------------------- 1ec5790e4f | Nicholas Feinberg | 2021-07-22 12:21:14 -0700 Fix webtiles display of corrosion (ShaperMC) This is duplicated in three places. TODO: FIXME -------------------------------------------------------------------------------- eb5a7e5f55 | advil | 2021-07-22 14:57:00 -0400 fix: default bind F1 to CMD_GAME_MENU The `~` binding is ok-ish for US keyboards and has some resonance with the previous binding on this key (which is now a submenu), but it's pretty non-intuitive, and the symbol typically involves a complex chord on many international keyboards. At the same time, ESC, which is a typical binding for this in other games is fairly non-viable in crawl, because it is used to clear mores and get out of menus very quickly, while being a noop at the main interface. (The qw bot even has a function where it exploits this to reliably exit menus.) This commit adds F1 as a binding for the game menu. This still isn't perfect, but is a much more likely key for such a thing than `~`. A lot of people (including myself) like to bind F1 for e.g. casting, and this is still fine; for advanced users the `~` binding still exists (or it can be otherwise rebound). Hopefully this all works across platforms, but I've tested on local tiles, console, and webtiles and mac. -------------------------------------------------------------------------------- fc94bf0d26 | Nicholas Feinberg | 2021-07-22 10:29:15 -0700 Make dancing launchers prefer ranged (gammafunk) -------------------------------------------------------------------------------- 643f2454ad | advil | 2021-07-21 17:30:13 -0400 fix: typo in comment We can count this as resolves #1988 -------------------------------------------------------------------------------- 835d75f5b3 | advil | 2021-07-21 17:02:12 -0400 fix: quiet a compiler warning (#2031) Not sure about the other warning in this report, but this one is easily fixed and the fix is probably better style. -------------------------------------------------------------------------------- 4fb8d4a8fc | gammafunk | 2021-07-21 15:24:46 -0500 feat: Reindent an Elf vault Shameless commit scumming made to diverge trunk and stable! -------------------------------------------------------------------------------- fb6a3606f8 | advil | 2021-07-21 13:32:00 -0400 feat: add a status light for inhibited regeneration If this is too blinky, it can be easily removed. But I think it might be helpful to see, and it also helps identify some corner cases (e.g. situations where a monster can't attack but has the player as a foe). -------------------------------------------------------------------------------- 9e7ac92ab0 | advil | 2021-07-21 13:32:00 -0400 fix: don't rest when regeneration is inhibited The first fruit of 05da648f! This seems to have come about when 7fb00627a50e removed the vampire check from player_regenerates_hp, perhaps under the assumption that this function was not about current regeneration. However, it is used only for current regeneration state, in order to decide whether resting is pointless. As of this change, 5 with a monster in sight but out of reach (e.g. across water) will trigger wait, not rest. Possibly it should also message, analogous to i_feel_safe's messaging. -------------------------------------------------------------------------------- e3c52671f8 | Nicholas Feinberg | 2021-07-21 10:20:09 -0700 Revert "Check for monsters, objects & features on move" Broke autoexplore somewhat - see https://github.com/crawl/crawl/issues/2026 . This reverts commit 09c7552f22266b3fe47164032a29611aefc84864. -------------------------------------------------------------------------------- 42a3d12a42 | advil | 2021-07-21 10:30:01 -0400 test: possibly fix randbook test I'm pretty sure this was relying on an uninitialized static before this commit. Unfortunately catch2 doesn't seem to work on M1 so I can't rerun locally. -------------------------------------------------------------------------------- 81a68cc532 | advil | 2021-07-21 10:02:45 -0400 fix: improve some spell data statics This applies the construct-on-first-use (v2) paradigm to a couple of key spell data statics, so as to avoid static constructor order issues. This may improve some hard-to-reproduce issues reported after a7dfd5ec23, since the Options constructor is called on static initialization but makes use of this constructor. Spell data isn't in place on the first call so this may or may not really matter, but it can at least now reliably be determined that spell data isn't set up yet. -------------------------------------------------------------------------------- 56f7456a25 | advil | 2021-07-21 10:02:45 -0400 fix: avoid static initialization of ability list This is not necessarily an ideal fix, but is aimed at preventing static initialization order issues resulting from a7dfd5ec23. After that, the constructor for the static Options object relies on the static Abilities_List object, and I suspect this is a source of crashes on some builds reported in bugs like #2010 (this bug went away, but I have no confidence that it is fixed). -------------------------------------------------------------------------------- de56a17b89 | gammafunk | 2021-07-21 00:45:20 -0500 feat: Clarify bush and briar behaviour Bushes and briar patches allow beams to pass through them unaffected, but block explosions and enchantments, which is behaviour that wouldn't otherwise be obvious to players. Document this aspect of plant physics in their monster descriptions. I don't mention the exceptions of beams from ranged Sticky Flame and Chain Lightning being blocked, as those are niche. -------------------------------------------------------------------------------- ff50d6eb01 | gammafunk | 2021-07-20 22:58:09 -0500 doc: Add a tier 1 vault demon to the mailmap -------------------------------------------------------------------------------- de9417c70f | gammafunk | 2021-07-20 22:54:09 -0500 feat: Remove `allow_dup` from a shop vault (ardl) This style of "inconvenient shop" is amusing, but less amusing the second time you get it in the same game. Remove `allow_dup`, so it only generates once per game. -------------------------------------------------------------------------------- 669cdb294d | gammafunk | 2021-07-20 22:33:34 -0500 feat: Allow spectral ego on certain weapons Currently the spectral ego is only allowed on two-handed weapons or the one-handed club base type, even for artefacts and vault-defined weapons that request the spectral ego. Yet the scroll of brand weapon bypasses this exception, allowing spectral as a result on any one-handed melee weapon, to help make that scroll more exciting. We already have the weapon property data to limit spectral to only club or staves on mundane generated items. This commit removes the handedness restriction for spectral, thus allowing it to generate on all artefact melee weapons and on vault-defined melee weapons that specifically ask for that ego. This won't increase the amount of spectral too much and makes the ego's logic consistent. It's now simply a melee-only ego that's allowed on artefacts, like other such egos, but is limited to clubs and staves for mundane weapon generation. -------------------------------------------------------------------------------- 60587a63ad | gammafunk | 2021-07-20 22:23:24 -0500 feat: Adjust monster-placing Elf vaults Most changes are to refactor syntax of recently merged Elf branch monster vaults by nicolae. We use numeric glyphs for monsters and simplify statements. A couple vaults have more significant changes, as described here: nicolae_elf_defective_weapons_storage: Instead of having various helpless and inneffective dancing weapons, rework this vault to place dancing weapons that all have some kind of permanent debuff (and hence are still "defective"), but have other aspects allowing them to still be significant threats. Break weapons up into three tiers by type of ego we'll give as well as type of debuff: fast acting chaos weapons get blindness, slower acting distortion weapons get slowness, so they'll be slower than normal speed, and we use highest quality base types for venom, but make them "damaged" (-1 to -4 enchant) and permanently corroded. The vault is now a runed door vault since it's fairly dangerous and having these weird weapons leak out into the level would ruin the theme. Not to mention that the blind weapons need to stay in a fairly confined area to be effective. It's layout has gotten a slight trim to completely reveal the loot inside. Since I worked with nicolae to re-imagine this vault, we agreed to rename it to nicolae_gammafunk_elf_defective_weapons_storage. nicolae_elf_double_double_double_trouble: This is a runed door vault, but the current layout means a player might be forced to open the door to reach otherwise disconnected areas in Elf. We like to avoid forcing players to take runed doors, and although two blade masters with two double swords is not an especially dangerous threat that would normally warrant a runed door, it's helpful for the specific theme of this vault. So mark the doors and sealed areas of the vault as opaque for connectivity purposes. Add more runed door to keep the two blademasters separated, increasing the visual theme. Upgrade one of the blademasters' double swords to either good_item or randart, thus allowing them to pose a bit more of a threat. Finally, introduce a star_item and two normal item loot pieces on both sides of the vault, giving some incentive to open the vault for those who wouldn't benefit from the weapons. -------------------------------------------------------------------------------- 979284e43a | Nicolae Carpathia | 2021-07-20 22:23:24 -0500 Update elf_deep_mausoleum based on gammafunk comments -------------------------------------------------------------------------------- ddbec97b21 | gammafunk | 2021-07-20 22:23:24 -0500 feat: Adjust some Elf entry vaults For nicolae_elf_arrival_dilemma, technically we shouldn't require passage through a runed door like this to the rest of a level, but I'm allowing it in this case. The right side of the vault is a perfectly ordinary encounter with four monsters, hence always a reasonable option for those with basic preparation for Elf. The runed door for this side fits the "border check" aspect, which allows inexperienced players to re-evaluate their decision before it's too later. The two choices feel one-dimensional, and a single high level elf feels a bit sad alone behind a runed door. So we up the runed door aspect, adding a second high level elf to the left section and two high quality loot pieces, also adding one normal quality loot item to the right section. Give this entry half weight so that it's not too common. For nicolae_elf_arrival_no_cutting_in_line, ensure we place at least two monsters in each of the two thematic groups. The odds of rolling no monsters in the orc group or no monsters in the elf group are not that small, and if either happens the vault's theme is ruined. This increases the size of each group by 1.5 monsters on-average, but the groups are only 3.5 monsters each, and the monsters used here are common for Orc and late dungeon. Some glyph and syntax cleanups for this and two other entry vaults. -------------------------------------------------------------------------------- ed5bec7572 | gammafunk | 2021-07-20 22:23:24 -0500 feat: Split up vaults in elf.des Move decorative and monster-placing vaults into their own distinct sections. -------------------------------------------------------------------------------- 2d3e3a81d9 | gammafunk | 2021-07-20 22:23:24 -0500 fix: Remove `decor` from Elf vaults The decor tag does nothing in vaults except on D:14- and in Depths, hence we don't need that tag for vaults in Elf. Also update the DES syntax document for decor to refer to the correct range where the tag applies. -------------------------------------------------------------------------------- 5ea49452ee | gammafunk | 2021-07-20 22:23:24 -0500 fix: Remove `no_dump` from a Hall of Blades vault Forgot to remove this tag from this vault in a previous commit. -------------------------------------------------------------------------------- 7cc329e542 | Nicolae Carpathia | 2021-07-20 22:23:24 -0500 Add two decor vaults to Elf. -------------------------------------------------------------------------------- 7c62198929 | Nicolae Carpathia | 2021-07-20 22:23:24 -0500 Add some more regular monstriferous vaults to Elf. Committer's Note: Squashed a commit into this one. Three of the vaults added in this commit get significant modifications in subsequent commits as part of PR #2029, namely nicolae_elf_deep_mausoleum, nicolae_elf_defective_weapons_storage, and nicolae_elf_double_double_double_trouble. -------------------------------------------------------------------------------- fba2232dec | Nicolae Carpathia | 2021-07-20 22:23:24 -0500 Add new arrival vaults to Elf. -------------------------------------------------------------------------------- 2e09723bad | Nicholas Feinberg | 2021-07-20 19:46:56 -0700 Adjust changelog Reorder, reword, fix some inaccuracies, and add highlights. -------------------------------------------------------------------------------- 1368757f42 | Kate | 2021-07-20 23:17:15 +0100 Let Spellforged Servitors cast Shock As one of their fallback spells, since the rest of the L1 conjurations are valid. -------------------------------------------------------------------------------- e58577e147 | Kate | 2021-07-20 21:32:04 +0100 Fix typo in Majin-Bo description (FizzleBang) -------------------------------------------------------------------------------- 05da648ff6 | advil | 2021-07-20 09:49:45 -0400 fix: add a debug tripwire for long delays, v2 There have been some cases of delays going on much longer than they should lately (#1757, #2037 among others) and while a few bugs have been fixed, the worst cases have resisted debugging or replication. This commit is an attempt to get more information, while at the same time protecting the player a bit better. If a rest delay exceeds 500 turns, this will trigger a crash, and if an explore delay exceeds 2k turns (1/3 of the per-level zot clock) it will also crash. These are intended to be numbers that can't be triggered on demand ever, so if I've missed something that allows this, this code should be further amended. The rest one at least would have been triggered by the case in #2037. cd13fe65733ae6d1 was missing some cases where you.running.turns_passed needs to be reset, and they should be taken care of here. -------------------------------------------------------------------------------- 0b823d0a13 | Nicholas Feinberg | 2021-07-19 13:57:28 -0700 Don't revive decorative cats (tilp) They aren't meant to be used in the actual game, only in decor vaults, and reviving them causes weird issues when they get killed (by eg krakens). Shouldn't have gotten stuck at xl 1, felids! -------------------------------------------------------------------------------- fd1010017a | Nicholas Feinberg | 2021-07-19 12:47:33 -0700 Revert "fix: add a debug tripwire for long delays" Triggering way too often. Reverting for now. This reverts commit cd13fe65733ae6d1ebf66b383617bb497fa25090. -------------------------------------------------------------------------------- cd13fe6573 | advil | 2021-07-19 13:38:18 -0400 fix: add a debug tripwire for long delays There have been some cases of delays going on much longer than they should lately (#1757, #2037 among others) and while a few bugs have been fixed, the worst cases have resisted debugging or replication. This commit is an attempt to get more information, while at the same time protecting the player a bit better. If a rest delay exceeds 500 turns, this will trigger a crash, and if an explore delay exceeds 2k turns (1/3 of the per-level zot clock) it will also crash. These are intended to be numbers that can't be triggered on demand ever, so if I've missed something that allows this, this code should be further amended. The rest one at least would have been triggered by the case in #2037. -------------------------------------------------------------------------------- 01599e1a9e | advil | 2021-07-19 13:38:18 -0400 Revert "Forbid DEBUG_TRAVEL without DEBUG_DIAGNOSTICS" Revert reason: this was disabled by default before this commit, and it's *extremely slow* to enable, so return to the disabled-by-default state. Instead of an `#ifdef`, add a comment explaining the situation. This reverts commit d8756d56bca0c83564c4a383b0931343e2ffb2e0. -------------------------------------------------------------------------------- c56fcc985a | Nicholas Feinberg | 2021-07-18 07:26:55 -0700 Fix touching typo (hardworking goddess, reeces) -------------------------------------------------------------------------------- 15f69828bf | gammafunk | 2021-07-18 00:47:19 -0500 feat: Organize elf.des and refactor functions Give elf.des section headers like we do for other DES files. Make sections for entries, normal vaults, blade entries, blade main vaults, and the elf end maps. Add a function to set standard blade monsters, since multiple maps where using a common definition. Remove `no_dump` from main blade maps, since we now have multiple vaults, not all of which use entry subvaults. -------------------------------------------------------------------------------- 8427feac8f | Nicolae Carpathia | 2021-07-17 23:25:49 -0500 Add new entry subvaults for the Hall of Blades Committer's Note: I'm not adding nicolae_blade_animated_armoury, since animated armour monsters designed to be a player ally, not a compelling hostile monster. Melee-only slow monsters are something we've almost completely removed at this point. There's not an obvious design for hostile animated armour monsters that's sufficiently unique, but if that changes, a vault like this can be reevaluated. -------------------------------------------------------------------------------- 0c1c6157e4 | Nicolae Carpathia | 2021-07-17 23:25:17 -0500 Add two new layouts for the Hall of Blades -------------------------------------------------------------------------------- 5a1362afc6 | gammafunk | 2021-07-17 20:05:18 -0500 fix: Adjust three transporter vaults again (advil) A recent report I'd seen for the vault emtedronai_trogs_sanctum showed it generating areas only reachable via its transporters, effectively sealing off access to its entrance transporter. This report lead me to make 97d24401, which put borders of floor around this vault and two others, since it seemed there was no other way to prevent these problems. However advil informs me that the problem with emtedronai_trogs_sanctum was due to it not conditionally applying its `passable` tag only for the Vaults branch. The `passable` tag was added for the Vaults layout to allow features like transporters place in Vaults rooms, but when enabled in other branches it leads to the layout generator to incorrectly think that areas inside the transporter vaults are connected to the vault entries without using a transporter. Hence 2170ac5a makes `passable` now only apply in the Vaults branch. advil also informs me that now that we can't misapply `passable`, these transporter vaults will both never generate such disconnected areas nor will passage through the transporter ever be required to reach the rest of the level, specifically because the internals of these vaults are marked with the `opaque` tag as of 97d24401. Hence this commit restores the behaviour before that commit which only applied the border of floor around these vaults in the Vaults branch; it's still necessary in that branch for them to place properly as rooms. Now the vaults will better integrate into non-Vaults levels in that they can embed properly in surrounding walls yet have their two entries properly connected to the rest of the level. Additionally, I've changed the wall types of these vaults to rock when placing in Vaults, so the layout code of that branch can correctly substitute the wall to the surrounding wall type of the level. Interestingly, this seems to allow gammafunk_its_a_trap to properly place in Vaults. In my previous testing, it always failed to place as a vaults room even though the other two vaults were able to. Finally, correctly apply the `transparent` tag to emtedronai_trogs_sanctum and fix its opaque mask to correctly cover all internal vault squares. The slightly incorrect mask was added 97d24401, but since the vault wasn't actually given `transparent`, this error wasn't seen. This commit partially reverts 97d24401. -------------------------------------------------------------------------------- d5c625afe7 | advil | 2021-07-17 15:26:21 -0400 fix: reorder currency symbols so that `$` shows in help Bug introduced in 1715c4e68; the help menu can't handle unicode keybindings and shows a number, and `$` is probably the best one to show anyways. -------------------------------------------------------------------------------- 5988178df2 | advil | 2021-07-17 15:25:07 -0400 fix: quick macro keybinding add, take 3 Unfortunately, ctrl-m is equivalent to return, and so this turns one of the standard noops (that people use to clear mores) into a menu key by accident. This third attempt moves the travel speed toggle to ctrl-t, and puts quick add on ctrl-e. I *think* this should be fine in webtiles. (Unfortunately, it does mean that windows webtiles users will need to use *t for travel speed toggle, because it seems that most windows browsers eat ctrl-t in a way that isn't easy to override.) -------------------------------------------------------------------------------- 1b087cb4c1 | Nicholas Feinberg | 2021-07-17 10:03:25 -0700 Improve slime creature messaging (nojaa, jilles) Be clearer about's going on when they merge. (Not touching unmerging yet, but that probably wants love too.) -------------------------------------------------------------------------------- 8f6b6f5ddb | advil | 2021-07-17 12:52:40 -0400 fix: simplify macro action entry (Yermak) After this commit, entering an action while doing a macro binding returns to the main macro menu (or exits in the case of quick-add), while esc gets you to the mapping menu. This reduces the keystrokes used when setting at the slight cost of keystrokes when cancelling. Two remaining issues: (i) when editing an old macro, it first brings you to the mapping submenu. This could go right into editing the action, at the cost of making the submenu c/R options harder to get to. (ii) What should this UI do on enter with a blank action? Right now this cancels, but I'm not sure this is very intuitive. Other possibilities include having this case clear the macro, and disabling enter with an empty action. A few other minor tweaks to display stuff. -------------------------------------------------------------------------------- 2170ac5abd | advil | 2021-07-17 11:32:50 -0400 fix: limit `passable` tag masking to Vaults This tag is a bug magnet outside of Vaults, because it makes it very easy to trick the builder into generating disconnected zones. In some vaults these issues had been fixed by explicitly conditionalizing the tag, but there's not a lot of use-cases outside of Vaults layouts that can't be better handled by other techniques, so simplify things on the vault designer here. I've also updated the docs to more clearly warn designers about the pitfalls. -------------------------------------------------------------------------------- 9c98e07f0c | Nicholas Feinberg | 2021-07-17 08:09:07 -0700 Decay mon breath timeout at EOT (mishima, gressup) Similarly to netted monsters, which already work this way, have monsters reduce their breath timeout after their turn instead of before their next one. That way, if you see a monster 'catching its breath' on your turn, they won't be able to use a breath weapon on you before your next turn unless they get a double turn. It's possible that other enchantments might be changed to work similarly, but for e.g. paralysis, that would be a big stabber nerf. I haven't done an audit to look for other candidates. -------------------------------------------------------------------------------- 6eef9f81b9 | advil | 2021-07-17 11:06:56 -0400 fix: move macro quick-add to ctrl-m This is now working, so I think it must have been a cache issue. ctrl-t is new tab on windows, so doesn't work so well. -------------------------------------------------------------------------------- 97d2440184 | gammafunk | 2021-07-17 00:02:43 -0500 feat: Adjust aspects of three transporter vaults For the transporter vaults gammafunk_its_a_trap, gammafunk_dig_for_victory, and emtedronai_trogs_sanctum, give these vaults a border of floor. Having connectivity require a path through the transporter frequently leads to one side of the transporter being left in a disconnected area, thus either stranding the player who travels through the vault via transporters or preventing transporter entry altogether. This is a bug in our layout code, which should ensure that these disconnected areas won't happen. Even if this were not the case, these vaults are meant to pose an optional, difficult challenge, so we shouldn't require passage through their transporters to reach other portions of the normal level. We now add no_item_gen throughout these vaults instead of only in certain sealed or trap-laden sections, since there's no reason to lock away normal level items. For gammafunk_its_a_trap, remove its placement from Spider, but allow it to place on D:14. I previously allowed it in Spider to connect sections of the cave-like layout, but as described above we're no longer requiring access through these types of vaults for normal level access. The vault's highly angular stone structure is out of place in a "natural" place like Spider. For D:14, this is an ok depth to beging exposing players to Zot traps, since it's very close to their normal generation and behind a transporter. For all three vaults, mark them as transparent and mask the vault insides as opaque. Revise glyph usage so we can distinguish between the inside and outside of each vault. Simplify and clean up some DES syntax. -------------------------------------------------------------------------------- 7cc0d9ac62 | Nicholas Feinberg | 2021-07-16 19:35:02 -0700 Remove wanderer debug code BIG oops (This made all wanderers start with two minor books, I think?) -------------------------------------------------------------------------------- 29e9f9e103 | Nicholas Feinberg | 2021-07-16 19:20:07 -0700 Add storm form tile (alex1729) And remove the old hydra form tile. RIP. -------------------------------------------------------------------------------- 2387c0671f | Nicholas Feinberg | 2021-07-16 19:19:50 -0700 Clarify spectral ego -------------------------------------------------------------------------------- d28e588067 | Nicholas Feinberg | 2021-07-16 19:08:20 -0700 Rename the Desolation entrance (Undo, ardl) To avert confusion for players who assume something ruined is unusable. I wanted to use 'unsealed gateway', but we already have 'unsealed gates', which are a bit too similar sounding. -------------------------------------------------------------------------------- 4a8006d288 | Nicholas Feinberg | 2021-07-16 18:53:10 -0700 Avert a riot (dinky) (OK Tukima launchers) Lots of weird special cases here. This might be a bit strong. -------------------------------------------------------------------------------- 51fae8af72 | gammafunk | 2021-07-16 17:32:31 -0500 fix: Place a Swamp exit in bugged saves (Sergey) The Swamp exits destroyed by eleionoma due to the issue fixed by 0d5cf04 need to be restored in affected saves, otherwise those games always crash on Swamp:1. This commit adds a save compat function _ensure_exit() that's analogous to the _ensure_entry() function used for ensuring branch entries and calls it for Swamp:1. We find whether Swamp is missing its exit, and if so, find a floor or shallow water square that's as close as possible to the first down stairs, thus helping to ensure that our exit is placed at a connected location. -------------------------------------------------------------------------------- acd6f1ce93 | advil | 2021-07-16 17:37:18 -0400 docs: update allow_extended_colours in options guide (gammafunk) -------------------------------------------------------------------------------- 52be93032c | advil | 2021-07-16 17:27:37 -0400 fix: default allow_extended_colours to true This *may* still be a terrible idea, but I'm not sure we'll find out without trying. Some of the historical reasons for the old defaults are no longer an issue, like old mac osx terminals. One remaining one is that this may decrease the default readability of ttyrecs. We'll see... -------------------------------------------------------------------------------- e1855fdbe6 | advil | 2021-07-16 16:17:54 -0400 feat: command for quick macro adding/editing This renames previous CMD_MACRO_ADD to CMD_MACRO_MENU, and adds a new command under CMD_MACRO_ADD that is a bit more true to the name. The new command jumps straight into macro editing given a specific key, and skips the macro menu. Basically, it comes full circle and very nearly replicates the pre-0.26 CMD_MACRO_ADD functionality except with an updated UI. The one difference is that it is macro only -- no keybinds. But people shouldn't be using keybinds anyways. The new command is currently bound to ctrl-t. Ctrl-m is actually free but I could not get it to work in webtiles. To rebind this, e.g. if you hate all this menu stuff I've been adding, you can do something in your options file like: `bindkey = [~] CMD_MACRO_ADD`. -------------------------------------------------------------------------------- becab4ff2c | advil | 2021-07-16 16:17:54 -0400 fix: streamline new action entry Treat new actions started by `~` and by key in the same way, jumping right into editing. To get raw entry, you can use enter to get out to the menu with a blank mapping; esc still cancels. (I'm not sure if this behavior is very intuitive and it is currently somewhat hidden, but raw key entry may also be a fairly niche feature.) Doing this required adding an on_show callback to Menu, and tweaking the title_prompt api to provide a way to detect whether text entry was cancelled or not. -------------------------------------------------------------------------------- 8c6f3a9b5b | advil | 2021-07-16 16:17:54 -0400 fix: various macro menu tweaks * fix webtiles spacing issues * fix some cases where the mapping menu wasn't pushed to webtiles * more consistent behavior after entering an action * explicit save option in the mapping menu (no behavior change, this still uses esc) * better status msg behavior -------------------------------------------------------------------------------- 3b5a371ceb | advil | 2021-07-16 16:17:54 -0400 feat: macro menu, the final form 4a6b093f0 filled a big need in macro editing, by allowing macros to be chosen from a menu, and viewed all at once. However, it was pretty incomplete in a number of ways, keeping the old message-window pseudo-ui for actual editing. This had a number of problems. 97433f2 exaggerated some of the problems of this approach -- since the menu is just used to pick which macro to edit, there's a lot of keystrokes to restart the process if you want to edit more than one at once, or select the wrong one, etc. This commit attempts to finally provide a coherent macro editing UI. * Editing individual mappings is now done via popus from the main macro edit menu. All of the message-window code has been converted to Menu-based code. Text entry uses a generalized version of the title_prompt input box previously only used for spell search. Hopefully most aspects of this will be much more convenient than the old approach. * To make it easier to use this menu with arrow keys, several meta-functions have also been Menu-ified. * Deleting individual mappings is possible from the main list. * Macros vs the various keymap modes are now handled within the menu; getting at keymap editing is a bit hidden to keep people from preferring those over macros. (Basically every "this key doesn't work" report I've run across was someone using a keymap instead of a macro.) * key hints throughout these menus have been (I hope) improved from the message window version. * This UI has a proper help screen. Main TODO that I am aware of: it would be nice to show a cursor when editing in local tiles / console. (Webtiles is fine.) Some subsidiary stuff: * The `Menu::title_prompt` API has been massively improved so that it works in webtiles in a general way, and setting a custom prompt always works. * min Menu width now (sort of) works in webtiles * various minor tweaks / bugfixes to menu code (including some weird stuff with spell search) -------------------------------------------------------------------------------- 0d5cf0409e | Nicholas Feinberg | 2021-07-16 10:10:34 -0700 Stop eleios from destroying the world Very big oversight in 450c7e4133f94db. -------------------------------------------------------------------------------- ad902ab807 | Nicholas Feinberg | 2021-07-15 21:32:23 -0700 Fix Roxanne books (Yermak) Roxanne wants her statue form! -------------------------------------------------------------------------------- 38290d930c | Nicholas Feinberg | 2021-07-15 21:32:11 -0700 Tweak book of iron description Maybe this is a little better? I think there's still room for improvement. -------------------------------------------------------------------------------- 2c003e96b8 | advil | 2021-07-15 22:49:08 -0400 feat: unhide staff skills in skill menu (PleasingFungus) This extends 4390dbc5be0fb to make staff spell school skills show up as trainable by default when carrying a staff that involves such a skill. -------------------------------------------------------------------------------- b82cc645e0 | advil | 2021-07-15 22:38:43 -0400 fix: clarify dj staff wording As far as I know, melee damage is the only thing affected, so clarify the wording so it doesn't confuse the issue with respect to spell school enhancement. -------------------------------------------------------------------------------- 6b5ea614c1 | advil | 2021-07-15 22:25:06 -0400 feat: explicitly mark dj staff limitations I'm still not actually sure this is the best solution to this interaction, but as long as this interaction exists, make it clear. -------------------------------------------------------------------------------- 8cdb131401 | Kate | 2021-07-15 23:38:06 +0100 Don't start Recite's cooldown until ending recitation And decrease the cooldown duration, to clean up the status light display. -------------------------------------------------------------------------------- 299f9947c5 | Kate | 2021-07-15 22:00:23 +0100 Fix a description typo (Goratrix) -------------------------------------------------------------------------------- 458e30bab1 | Kate | 2021-07-15 21:29:30 +0100 Add Nemelex card ability info to the quiver -------------------------------------------------------------------------------- 57f10a385c | gammafunk | 2021-07-14 20:18:56 -0500 feat: Adjust the due_jungle_book Lair end vault We don't have a lot of data for the new version of this map, and its newness means players are more likely to make mistakes, but early indications are that people die to it in practice a lot. It does feature a somewhat higher monster count as well as some legitimately nasty monsters not commonly seen in Lair. This commit reduces the monster count by about 20% and fixes up portions of the layout. For monsters, we reduce the bands spawning in the major combat areas from 6 monster total on-average to 3. That way the focus is on the final necromancers in the two end chambers. We also reduce the random spawns throughout the map, concentrating them on the earlier entryway area, since none of the bands spawn there. That way the map is less likely to be empty until one of the bands are encountered. For layout, we remove the many additional entry connectors, since just one is necessary. The additional ones likely increased the number of vetoes. This might increase the chance that the vault is located at the end of a passage, but this is fitting for the "spooky jungle castle" theme the map now has. -------------------------------------------------------------------------------- c03b058e8b | gammafunk | 2021-07-14 19:33:27 -0500 feat: Rework parts of a Lair ending For gammafunk_lair_ancient_temple, rework the way the temple is "ruined", tweak monster placement and loot, and simplify syntax. For layout, we greatly simplify the crumbled wall sections. Each of the three walls now has an independent 50% of being "collapsed". The collapse wall sections avoid clumping the "broken" wall pieces together and add dry land to facilitate their usage by players. We add an inner chamber with possible door to house the loot and provide more structure. Introduce very light ruining of the fixed wall portions and chamber to prove a few small entrances into the temple. Finally, we introduce random dry land throughout the map to give players better footing while fighting closer to and inside the temple. For monsters, we reduce the average monster count by about 33%. The map was not extreme in terms of monster placement, but it's been the Lair end with the most kills by a wide margin for a long time, in large part due to how effective the merfolk avatar is at punishing incautious players. We now place a couple more of the Shoals themed threats on average, since those were somewhat underused. Add snapping turtles to the list of Shoals monsters, which will help prevent an overall increase in wind drakes; those seem to pose the biggest challenge of the non-avatar monsters in the Shoals set. For the Lair natives, add blink frogs and steam dragons, and remove the very trivial water moccasins. For loot, we replace some of the normal items with thematic items that include 2-4 good loot potions and a single water/Shoals themed item. The water/Shoals themed item includes throwing nets, trident weapons, and phial of floods, and small chances for the three unrands Captain's Cutlass, Trident of the Octopus King, and a ring of the Octopus King. -------------------------------------------------------------------------------- 0e7b3fb1d2 | gammafunk | 2021-07-13 20:36:17 -0500 feat: tweak the abyssal woods Lair ending For hellmonk_lair_end_abyssal_woods, slightly adjust the monster set, introduce chances to have shortcut entrances, tweak the use of demonic trees, add some use of floor tiles, and clean up DES syntax. For the monsters, introduce a 5th monster tier below the "boss" tier on glyph 6. Move the small chance of large abominations formerly on 6 to this new 5 glyph, which it now shares with ugly things. The latter are appropriate to the map, and although they are common enemies later, we don't overuse them here. Then 6 remains dedicated to thrashing horrors, whose numbers we constrain somewhat. Now only 2-4 of those can now place, with an average of 3, since we only place these in the final chamber, and we place a few 5 glyph monsters throughout the map. For layout, introduce two potential shortcuts, each with an independent 33% chance, one that leads something part the starting area and another on the far side that leads in close to the final chamber. Instead of a forest of all demonic trees, use mostly regular trees, gradually introducing demonic trees at an increasing rate until the final chamber, which uses all demonic trees. Also add Abyss-themed floor tiles in this final chamber. Adjust a few loot locations due to the new shortcuts. Closes #1967. -------------------------------------------------------------------------------- 214d61ee58 | hellmonk | 2021-07-13 20:36:17 -0500 Abyssal woods Lair end Adds a new lair end vault based on enchanted_forest, but makes use of demonic trees and an abyssal monster set. Thrashing horrors are the big threat here, so adjusting the number of those would be the easiest way to modify difficulty. Committer's Note: The subsequent commit reworks parts of this map. -------------------------------------------------------------------------------- 57bb12a6e0 | Kate | 2021-07-14 00:27:33 +0100 Remove some food leftovers -------------------------------------------------------------------------------- bdbb211e1e | Kate | 2021-07-14 00:23:06 +0100 Don't let Folly's brilliance stack with the potion To make its behaviour slightly clearer, since as originally implemented the MP reduction didn't stack but the enhancer did. Its permabrilliance is now technically separate from regular Archmagi, so would stack with it if a non-body-armour source of Archmagi existed. Potions of brilliance are marked as temporarily useless with Folly equipped. -------------------------------------------------------------------------------- 622f6405ea | Kate | 2021-07-13 22:25:26 +0100 Rework the robe of Folly (hellmonk) Make it grant perma-brilliance (archmagi and halved spell costs), increase its intelligence and enchantment bonuses, but have it set your willpower to zero. -------------------------------------------------------------------------------- e1afea27ad | Kate | 2021-07-13 22:23:35 +0100 Update unrand descriptions and inscriptions Move information on special unrand features to DBRAND and DESCRIP entries where possible, so that it's all grouped together with standard item properties. This allows shortening the actual descriptions, and making room for them to be primarily focused on flavour and more general descriptions of the item's abilities. -------------------------------------------------------------------------------- 492c89284f | Kate | 2021-07-13 17:57:47 +0100 Adjust weapon brand descriptions For consistency and brevity - it's not necessary to explicitly spell out that fire damage deals more damage to things with fire vulnerability in this single description of one source of fire damage, for example. -------------------------------------------------------------------------------- f8a67e7463 | Neil Moore | 2021-07-13 00:05:33 -0400 Correct Abyss feature placement check. Instead of checking whether a potential feature was surrounded by seven or more solid cells, the old code checked whether the previous feature was solid and surrounded by seven or more cells. -------------------------------------------------------------------------------- d3c00ef09d | Neil Moore | 2021-07-12 23:14:56 -0400 Fix quote formatting. -------------------------------------------------------------------------------- e6b0c8b507 | hellmonk | 2021-07-12 18:42:25 -0400 Adjust snake endvault monsters Many snake end vaults placed large numbers of monsters (50+ on average, with 90 average monsters in the most extreme case) with low randomization. This commit reduces snake end vault average monster counts to ~35-40 for most vaults and randomizes formerly static monster counts. Additionally, two snake rune vaults that previously placed twice as often now share the standard vault weight. -------------------------------------------------------------------------------- 3eddc1d3d3 | Aliscans | 2021-07-12 23:10:51 +0300 Let the player create both Maggie and Margery in wizard mode. Wizard mode let you bypass the "has this unique been generated?" check, but not the "has the other unique been generated?" one. Instead of the second check, this change has the game mark Maggie and Margery as having been created whenever either one is. [ Committer's note: Moved the class to its own header. If more "storyline uniques" are generated this should be further datified, but the type doesn't belong in player.h regardless. Closes #1884 ] -------------------------------------------------------------------------------- e3ff63456f | Nikolai Lavsky | 2021-07-12 22:08:17 +0300 Don't allow cancelling hostile Battlespheres -------------------------------------------------------------------------------- e30191f0e2 | Aliscans | 2021-07-12 20:35:58 +0300 Fix the "stat zero" warnings for rings. If you say no to a "stat zero" prompt for wearing a ring, don't remove your existing ring. -------------------------------------------------------------------------------- 3b8667add3 | Aliscans | 2021-07-12 20:35:58 +0300 Fix the "stat zero" warnings for amulets. If you put on an amulet, having not previously been wearing one, check for stats below 1. If you say no to a "stat zero" prompt for wearing an amulet, don't remove your existing amulet. -------------------------------------------------------------------------------- b3396a012b | Aliscans | 2021-07-12 20:35:58 +0300 Fix the "stat zero" warnings for armour. If you say no to a "stat zero" prompt when changing your armour, don't remove your existing armour. Don't give a "stat zero" prompt if wearing your current armour at the same time as a new piece in the same slot would give a stat below 1. Give a "stat zero" prompt if wearing some new armour alone would give a stat below 1. -------------------------------------------------------------------------------- cf74c853f4 | Aliscans | 2021-07-12 20:35:58 +0300 Fix the "stat zero" warnings for weapons. Remove the second MSG_OK from when you say no to a "stat zero" prompt as you wield a weapon. Don't give a "stat zero" prompt if wielding your current weapon at the same time as a new one would give a stat below 1. Give a "stat zero" prompt if wielding a new weapon alone would give a stat below 1. -------------------------------------------------------------------------------- 09c7552f22 | Aliscans | 2021-07-12 20:27:53 +0300 Check for monsters, objects & features as soon as you move. (#1936) The game previously only reported which monsters had "come into view" when a monster shouted or the player was ready to start a turn. This interacted badly with ABIL_WU_JIAN_WALLJUMP (for one), as you move to a new location as part of the turn, and both you and the monster can act before the next "start of turn" rolls around. Calling update_monsters_in_view() from moveto_location_effects() should make the "comes into view" message the first one you see for a monster. I also call check_for_interesting_features() so that nearby objects and features are announced at the same time. Co-authored-by: Aliscans -------------------------------------------------------------------------------- 25c1220f7b | hellmonk3 | 2021-07-12 13:03:15 -0400 place water under goliath frogs in frog pond -------------------------------------------------------------------------------- b5d4ac33de | hellmonk3 | 2021-07-12 12:56:04 -0400 modify frog_pond Add a chance to place goliath frogs and reduce the notoriously high monster density by about 25%. -------------------------------------------------------------------------------- db44c70a1d | Kate | 2021-07-12 17:33:59 +0100 Fix a vault loot definition -------------------------------------------------------------------------------- 81e557bc32 | Edgar A. Bering IV | 2021-07-12 10:31:44 +0300 vaults: Adjust the despoilered loot in portals For the most part, change the loot lists to use standard dgn.* constants instead of identifying everything. The identification in early portals would eat up a large portion of the remaining item ID game, which would be a shame. Usingn the dgn.* constants does mean that portal loot has a different distribution than the floor, but it's not a vault by vault absurd spoiler. Closes #1855 -------------------------------------------------------------------------------- f0cfdccd6e | hellmonk | 2021-07-12 10:09:28 +0300 vaults: Identify non-random potion types in many vaults This was an extremely obtuse, though little-abused, spoiler. -------------------------------------------------------------------------------- 98b9705cb8 | nlavsky | 2021-07-12 09:25:31 +0300 Remove a couple of obsolete descriptions (#2022) -------------------------------------------------------------------------------- ca18f49f40 | gammafunk | 2021-07-12 01:05:28 -0500 Rework the Elemental Staff guarded unrand vault For dilly_guarded_unrand_elemental_staff, rework monster placement and the decorative chambers, and reorganize and simplify DES syntax. We extend the placement range to include D:8, and have difficulty scaling conditions cover each of D:8-11, D:12-13, and D:14-15 separately. The monster sets are adjusted to have more depth-appropriate threats at each range, with a low-tier elemental set for each element that doesn't go out of depth and a shared moderate out of depth tier. Monster counts also scale with depth. The boss is modified to be a depth-appropriate monster wielding the Elemental Staff. For Dungeon we increase from deep elf pyromancer, to deep elf zephyrmancer, to tengu reaver. For Elf and Depths we used the master elementalist vault-defined monster already used by mu_elemental_laboratory. The decorate elemental areas have been simplified to just use appropriate clouds and not use decorative monsters. There aren't appropriate conjured monsters for each element, and the vault already nicely communicates the elemental theme with the decor and actual monsters. Closes #2021. -------------------------------------------------------------------------------- 89162da0c7 | dilly | 2021-07-12 01:04:08 -0500 A guarded unrand vault for the Elemental Staff Committer's Note: Reword commit message. The subsequent commit revises many aspect of this vault. -------------------------------------------------------------------------------- 491fb513fc | gammafunk | 2021-07-12 01:01:19 -0500 Rework the master elementalist vault The vault mu_elemental_laboratory features a vault-defined "master elementalist" monster that's themed as having mastered the four forms of elemental magic. However this monster doesn't pose a very good threat, certainly not one worthy of a having a vault-defined monster. The vault itself is not especially challenging either. This commit reworks the monster and the associated vault to pose a greater challenge and give greater rewards, reworking it into a rare runed door vault. The master elementalist gets an HD bump to 18 and boasts a formidable array of spells: Ozocubu's Refrigeration, Lehudib's Crystal Spear, Chain Lightning, and Fire Storm. It still has Haste, but loses Blink for Repell Missiles, since the former doesn't work great for its terrain in this vault. The monster attempts to generate with the Elemental Staff, thus giving him formidable elemental resistances. If the Elemental Staff is unavailable, it instead gets a staff of air, and its robe gains the resistance ego, thus it will always have at least rF, rC, and rElec. The master elementalist is a formidable spellcaster, but it doesn't have especially good HP or other defenses, so players with good resistances who act quickly can take it on. The rest of the vault monsters have been given a rework to pose a serious threat for both Elf and Depths, and the elemental-themed terrain has been enhanced. Loot includes randbook for one of each of the four elemental schools, as well an artefact jewellery, an enhancer staff, and a manual, all theme from one of the elemental schools. The master elementalist monster definition is moved to a function, since it will be re-used for a forthcoming guarded unrand vault. -------------------------------------------------------------------------------- 1e82c303ef | Kate | 2021-07-11 03:04:27 +0100 Remove mechanical traps from Ossuaries This was the last place they existed outside of Sprints, and even with vaults that were originally designed around them they didn't really fulfil any real purpose. Some of the vaults keep alarm and net traps which might have more relevant effects, but all of the plain damage traps could almost always be easily avoided, ignored or rested off. -------------------------------------------------------------------------------- 90fbb72469 | Edgar A. Bering IV | 2021-07-10 21:31:41 +0300 feat: a more electrifying storm fist (ardl) -------------------------------------------------------------------------------- 5d1bdbc639 | wheals | 2021-07-10 21:25:28 +0300 Add a quote for Storm Form -------------------------------------------------------------------------------- c46b4539cf | Edgar A. Bering IV | 2021-07-10 12:36:07 +0300 fix: a doubled word (FizzleBang) -------------------------------------------------------------------------------- 1038ab4fd7 | gammafunk | 2021-07-09 21:15:56 -0500 Simplify a lua test and reindent I'm not sure if this test needs to exist as a standalone test given our existing map connectivity checks, but so long as it does exist, it needs to properly ignore any shoals encompass maps for the branch end. A previous fix to the dlua API allows the existing code to work. This commit just simplifies its logic and reindents. Closes #2003. -------------------------------------------------------------------------------- 4b6fb3c526 | gammafunk | 2021-07-09 21:15:56 -0500 Fix the return value of a dungeon lua API method For vault placement lua objects, have orient() return a string with the name of the orientation instead of returning the relatively useless raw enum value. -------------------------------------------------------------------------------- d9be06fd8e | hellmonk | 2021-07-09 21:15:56 -0500 Fix a shoals lua test -------------------------------------------------------------------------------- 1d15788f7f | hellmonk | 2021-07-09 21:15:56 -0500 Two new encompass Shoals rune vaults shoals_end_hellmonk_lost_city: A ruined city at the bottom of shoals, feat. sphinxes and minotaurs. shoals_end_hellmonk_storm_palace: Features wind and water enemies, merfolk, and a storm dragon or titan. Committer's Note: Squashed commits and cleaned up and combined commit messages. -------------------------------------------------------------------------------- 1261f788d9 | nicolae-carpathia | 2021-07-09 22:14:23 -0400 Merge pull request #2011 from crawl/nicolae-quotes-0721 Add new quotes to the Crawl quotes list -------------------------------------------------------------------------------- 7b03791ad5 | Nicolae Carpathia | 2021-07-09 22:05:40 -0400 Add new quotes to the Crawl quotes list Improve the Crawl quotes list, with a diverse assortment of choice quotes from such sources as Mary Shelley, Ovid, Hesiod, T.S. Eliot, John Milton, DMX, and ADMIN. -------------------------------------------------------------------------------- c8121b24ce | Edgar A. Bering IV | 2021-07-09 20:31:40 +0300 fix: fix the previous fix -------------------------------------------------------------------------------- f355649ca4 | Edgar A. Bering IV | 2021-07-09 20:20:07 +0300 fix: highlight gozag gold blue in webtiles under distraction aura Closes #1691 I don't claim to fully understand CSS inheritance, but it seems like having a separate block for #stats_gozag_gold is unnecessary. -------------------------------------------------------------------------------- 1ef64ffb57 | Edgar A. Bering IV | 2021-07-09 19:39:26 +0300 fix: correct capitalization of Storm fists -------------------------------------------------------------------------------- b01f110dc7 | Edgar A. Bering IV | 2021-07-09 19:32:17 +0300 fix: correctly sum a geometric series The probability display for pacify chances was not the correct probability computation. -------------------------------------------------------------------------------- 8568cbafd6 | gammafunk | 2021-07-09 10:40:57 -0500 Rework a transporter vault The vault gammafunk_worm_tunnel is a memorable challenge, but it's conspicuously large for a challenge vault of this type. This commit drastically reduces its size, slightly changing layout and adjusting swamp worm placement slightly so it remains a significant challenge. It also adapts the vault to place in earlier dungeon and Lair, using net traps instead of Zot traps with an additional miasma cloud generator before D:14. The net traps are far less lethal than Zot traps, but still trap players, give the worms more opportunities to slurp. The additional miasma generator near the exit chamber door is used when when net traps are used to slow down a player using a blink scroll a bit more than a net trap at that location would. When Zot traps are used, a player doing this must run the risk of blinking onto a Zot trap, so a trap there is appropriate. Loot and additional worm placement is revised to scale better with placement depth. We use trees in Swamp so that this vault better fits in with the surrounding layout. I opted against using trees elsewhere to minimize the use of fire magic to break into the vault. In Swamp we're a bit happier to let fire magic take over the place. -------------------------------------------------------------------------------- 5dd8012253 | Nicholas Feinberg | 2021-07-09 07:41:10 -0700 New Holy Roller title (PF (particleface)) Palentonga Invo 27 with any good god. -------------------------------------------------------------------------------- 2aaa0cc67b | Kate | 2021-07-09 02:32:09 +0100 Adjust randomisation in some kennysheep vaults ks_random_setup is used in a number of vaults to heavily randomise various features, but the randomisation of water in particular could have some extremely strange results in certain vaults, with large pools being replaced with huge numbers of statues. Instead only allow water to be substituted for floor, lava, or trees (this also has the bonus of making the behaviour match how the function's comment claims it works). -------------------------------------------------------------------------------- 99fd57bada | advil | 2021-07-08 17:25:22 -0400 fix: avoid a crash on upgrading randbooks after ca9b790695f0 Randbooks don't have artefact props, and ca9b790695f0 added some explicit checks for this. Most code is careful about this, but there were a bunch of fairly old save compat checks that were not. It probably would be fine to loosen up the artefact_property check, but it's also easy to prevent the call for the save compat cases. I've made the artefact_property check more explicit as well, so that it might be easier to guess what's going on here. -------------------------------------------------------------------------------- 29bd1443cf | Edgar A. Bering IV | 2021-07-08 23:11:33 +0300 docs: update credits -------------------------------------------------------------------------------- 8a69ca93ff | Zhang Kai | 2021-07-08 23:09:16 +0300 Update unident.txt Add translation. 增添翻译。 [ Committer's note: Also removes deck of cards description, as those no longer appear as items in game. Closes #1948. ] -------------------------------------------------------------------------------- bfabb6706f | Zhang Kai | 2021-07-08 23:09:05 +0300 Create clouds.txt Add translation. 增添翻译。 Closes #1945 -------------------------------------------------------------------------------- d2886d99c2 | Zhang Kai | 2021-07-08 23:09:04 +0300 Update species.txt Add translation. 增添翻译。 [ Committer's note: Did not include the kobold translation which references eating so was based on an old version. Closes #1900. ] -------------------------------------------------------------------------------- f492b14eaa | Zhang Kai | 2021-07-08 23:08:21 +0300 Update cards.txt Add translation. 增添翻译。 [ Committer's note: Did not include the Foxfire and Shaft translations, the former was based on an outdated description, the latter has been removed. Closes #1895 ] -------------------------------------------------------------------------------- 6a8ace0863 | advil | 2021-07-08 14:50:40 -0400 feat: clickable game menu access for local tiles (PleasingFungus) This also removes the player tile editor from the system toolbar, and simplifies the save game menu option by using CMD_SAVE_GAME_NOW. -------------------------------------------------------------------------------- 97433f2c34 | advil | 2021-07-08 14:50:40 -0400 feat: add a game menu This commit introduces a serviceable in-game menu of the sort you might expect in games that aren't 20 year old open source roguelikes. It's possible that some people will hate this nod to modernism, but I think it's actually kind of useful, and helpful to new players. Will take suggestions on what should or shouldn't be here. This also may be a useful place to get to a hypothetical future in-games options editor. Unfortunately, I don't think it's a great idea to put this on ESC on the default keybinding, since that has for so long been a noop when at the main game UI. So for now it replaces macro editing on `~` (and hitting `~~` brings you to the macro editor). For tiles, this commit reuses existing tiles (partly drawing on ones for the local tiles system toolbar, which has some functionality overlap with this menu). Some of these might benefit from artist attention. -------------------------------------------------------------------------------- 1715c4e68f | advil | 2021-07-08 09:50:10 -0400 feat: try to map more currency symbols to CMD_LIST_GOLD I am not sure whether this will (a) build on every platform, or (b) work on every build target. When testing on a US keyboard layout on mac, I can consistently get these to work on console, but not on the other two. However, I think this is because I need to enter them as complex chorded keystrokes involving number keys, where local tiles number key processing interferes. Not sure what's happening in webtiles at all, but on a US layout these definitely don't work for me. We'll see what, if anything, happens on other layouts. -------------------------------------------------------------------------------- 3203f140b7 | Edgar Bering | 2021-07-08 03:16:01 -0400 feat: further reduce book spawns They still feel overabundant. A previous commit had pulled them back some, and metioned that further triming could be warranted. -------------------------------------------------------------------------------- 47ed6a6988 | dicedlemming | 2021-07-08 08:54:56 +0300 Update mutation-data.h (#2019) The spell school it improves is Hexes. The Book of Maledictions was the starter Hex book, but Hex is the spell school that gains power. "Power" is also the terminology used on items that do similar things like Staff of Air, ie "increases the power of air spells" -------------------------------------------------------------------------------- 9d6fb14e67 | gammafunk | 2021-07-07 14:39:02 -0500 feat: Rework a monster float vault (again) This commit finishes aspects of gammafunk_indiana_jones I wasn't able to do in the last commit. It reworks the final chamber to feature lindwurms safely protected from fire clouds while still having lava snakes, putting the fire cloud machines on the lava directly. It also adds a Tomb theme for D:14- and Spider featuring death scarabs and spectrals in the final chamber. Loot, monster, and trap placement progression with placement depth is now consistent and should pose a nicely scaling challenge and reward for all levels. Other slight tweaks have been made to the layout to more consistently apply the visual theme, including statues and plant "overgrowth" in the starting area, as well as statues in the final chamber. All doors inside are runed doors, which is the best balance between UI and preventing spoilers. -------------------------------------------------------------------------------- 450c7e4133 | Nicholas Feinberg | 2021-07-06 20:33:37 -0700 Make eleios live in harmony with nature Instead of destroying trees, make them move adjacent. This avoids weird issues caused by terrain destruction, ensures they have a tree nearby to do woodweal magic with, and also feels nicely thematic. -------------------------------------------------------------------------------- f0d5c502f9 | Kate | 2021-07-07 01:43:54 +0100 Let fallback misc acquirement create Xom chesspieces Since every misc item is equally redundant at that point, there's no reason for them not to be included. -------------------------------------------------------------------------------- 2ba4aa32ac | Kate | 2021-07-07 01:26:16 +0100 Fix a compiler warning (geekosaur) -------------------------------------------------------------------------------- f8f22f7954 | Edgar A. Bering IV | 2021-07-07 00:16:14 +0300 fix: correct a typo (#1988) -------------------------------------------------------------------------------- 9ca5906e5d | Edgar A. Bering IV | 2021-07-07 00:12:49 +0300 fix: guarantee all potion petition sets are non-empty Closes #1996 -------------------------------------------------------------------------------- 2c4abef907 | 4Hooves2Appendages | 2021-07-06 23:59:18 +0300 Second Antaeus quote (#1965) Add second Antaeus quote. -------------------------------------------------------------------------------- 8390803364 | Alexei-Barnes | 2021-07-06 23:57:35 +0300 Removed dead code ranged_attack::calc_to_hit (#2001) This method calls the base and then returns the result. This can be achieved by simply not overriding the base method. I believe this was missed during editing because of the conditional in the method, however, since this conditional just returns the same result, it is obsolete. Co-authored-by: root -------------------------------------------------------------------------------- dd09596130 | Edgar A. Bering IV | 2021-07-06 23:48:45 +0300 fix: end engulf upon polymorph Closes #1935. Polymorph is described as the monster evaporating and reforming, so the lore solution to this bug of "you are now engulfed by flesh", while terrifying, doesn't quite fit. -------------------------------------------------------------------------------- 4e304d196c | Edgar A. Bering IV | 2021-07-06 23:24:11 +0300 fix: don't fire fineffs at beam end (12547) In addition to turning monster explosions into fineffs, 0.26-a0-844-g3dd439832f added fire_final_effects to bolt::finish_beam. This broke a long-time assumption in many spells that use the bolt struct creatively and possibly fire several bolts: that final effects (e.g. death channel spawns) were fired only after all beams were complete. The bug in the subject line was one example, similar behaivors could be found with ignition, starburst, imb and maybe more. -------------------------------------------------------------------------------- 57d10ac81f | Edgar A. Bering IV | 2021-07-06 23:24:11 +0300 text: clarify that dream dust is visual (12529) -------------------------------------------------------------------------------- 61de9534bc | Edgar A. Bering IV | 2021-07-06 23:24:11 +0300 fix: patch a tree burning information leak (12548) Resolves an XXX, but it might be better if Fedhas just prevented you from starting forest fires. -------------------------------------------------------------------------------- 763157803f | Kate | 2021-07-06 17:54:59 +0100 Don't allow cancelling hostile Malign Gateways -------------------------------------------------------------------------------- 2674c19aa4 | Edgar A. Bering IV | 2021-07-06 19:47:31 +0300 fix: clear engulf on monster move (12566) -------------------------------------------------------------------------------- 0d460d363a | Edgar A. Bering IV | 2021-07-06 19:37:08 +0300 feat: make autotravel slightly less cautious (12559) 0.27-a0-234-g56efc2da1b made autotravel avoid stepping next to either an unknown square or a currently unseen known non-wall square if possible. The unknown behavior is good, the unseen but known is more debatable in the days of no wandering spawns. -------------------------------------------------------------------------------- 18c06f7514 | Edgar A. Bering IV | 2021-07-06 19:26:11 +0300 fix: guard a teleport closet (12564) -------------------------------------------------------------------------------- 2ff873f930 | Edgar A. Bering IV | 2021-07-06 19:24:39 +0300 fix: don't shatter conjured monsters (12552) -------------------------------------------------------------------------------- 5102b24f49 | Edgar A. Bering IV | 2021-07-06 19:06:50 +0300 fix: adjust spacing in cloud descriptions (12570) -------------------------------------------------------------------------------- 3d396884e3 | Edgar A. Bering IV | 2021-07-06 19:01:00 +0300 fix: prompt for god switching at a faded altar (12580) -------------------------------------------------------------------------------- 0645571d10 | Edgar A. Bering IV | 2021-07-06 18:51:37 +0300 fix: don't trigger the staff of battle in rude situations (kate) -------------------------------------------------------------------------------- f3ba162646 | Edgar A. Bering IV | 2021-07-06 18:42:49 +0300 fix: prevent extraneous commas in an inscription (12612) -------------------------------------------------------------------------------- 7f483be983 | Edgar A. Bering IV | 2021-07-06 18:40:12 +0300 fix: bolt and arrow uselessness checks (kate-, Yermak) -------------------------------------------------------------------------------- d41220b2a5 | Edgar A. Bering IV | 2021-07-06 18:29:17 +0300 text: adjust a command description -------------------------------------------------------------------------------- 2081246efe | Edgar A. Bering IV | 2021-07-06 18:03:10 +0300 fix: process ring unequips when sacrificing hand (12587) This adds a bit of a special case to avoid charging the player a removal penalty if they keep the ring on because of the sacrifice swap hand/tentacle. A simpler solution would be to always impose the swap penalty, but this would come at the cost of adding more prompts to sac hand for special cases. This is cleaner and bothers the player less. -------------------------------------------------------------------------------- 0bd348349d | Edgar A. Bering IV | 2021-07-06 18:03:10 +0300 fix: abort Yred animate dead when useless (12588) -------------------------------------------------------------------------------- 07712775d2 | Edgar A. Bering IV | 2021-07-06 18:03:10 +0300 fix: don't retaliate against your reflection (12596) -------------------------------------------------------------------------------- 51990a9c54 | Edgar A. Bering IV | 2021-07-06 18:03:10 +0300 fix: sequence holy word application (12600) -------------------------------------------------------------------------------- b3c598c8fe | Edgar A. Bering IV | 2021-07-06 18:03:10 +0300 fix: prompt when summoning would be a bad plan (12602) Previously we warned the player about summoning with OTR up, but we should really check for bog and vortex too. If this results in a profusion of prompts rude_stop_summoning prompt can be changed to take an optional pal representative and made a bit smarter, but I expect that this change won't generate very many more prompts, given the non-overlap of spell schools. -------------------------------------------------------------------------------- f13327c4b8 | Edgar A. Bering IV | 2021-07-06 15:17:28 +0300 fix: mark arrows and bolts useless for one-handers (12608) -------------------------------------------------------------------------------- b642d533b8 | Edgar A. Bering IV | 2021-07-06 15:06:35 +0300 fix: don't clua crash on randbooks (12508) Throughout the codebase arterfact_property is only called on items satisfying its opening asserts. With one exception, artprop in the Item metatable in clua. The ticket suggested modifying artefact_property. Since tripping those asserts indicate a possible missuse, this commit makes the clua function appropriately robust. -------------------------------------------------------------------------------- d9270de0a6 | Edgar A. Bering IV | 2021-07-06 15:00:23 +0300 fix: respect use_animations for monster upheavals (12582) -------------------------------------------------------------------------------- 88c68e56d1 | Edgar A. Bering IV | 2021-07-06 14:49:42 +0300 fix: autoexplore over bogs while flying (12553) -------------------------------------------------------------------------------- a6938257b9 | Edgar A. Bering IV | 2021-07-06 14:40:09 +0300 fix: ignore immune allies in cloud tracers (12558) -------------------------------------------------------------------------------- 887aaaf34d | Edgar A. Bering IV | 2021-07-06 14:24:29 +0300 fix: don't consider resisted electricity harmless (12560) For self-targeting beams this warns the player about self damage. A bug for over a decade! -------------------------------------------------------------------------------- 0648b932ec | Edgar A. Bering IV | 2021-07-06 14:02:03 +0300 fix: be more accurate when describing melding (12583) Sorry for leaning harder into the XX advil. -------------------------------------------------------------------------------- e9f228fa16 | Edgar A. Bering IV | 2021-07-06 12:00:22 +0300 fix: actually check battlesphere spell schools -------------------------------------------------------------------------------- 6df09b6f62 | Edgar A. Bering IV | 2021-07-06 11:36:23 +0300 fix: vaults transparency (12591) -------------------------------------------------------------------------------- 3d13938747 | Edgar A. Bering IV | 2021-07-06 11:04:50 +0300 docs: update credits -------------------------------------------------------------------------------- 157b2762af | Edgar A. Bering IV | 2021-07-06 11:00:46 +0300 fix: battlesphere triggering behavior (12598) -------------------------------------------------------------------------------- 4244d9059e | Edgar A. Bering IV | 2021-07-06 10:44:21 +0300 fix: alphashops typo (12613) -------------------------------------------------------------------------------- 426ee5db0f | Edgar A. Bering IV | 2021-07-06 10:43:29 +0300 vaults: remove unnecessary no_monster_gen in ecu vaults -------------------------------------------------------------------------------- 0b0bf74c28 | Edgar A. Bering IV | 2021-07-06 10:43:29 +0300 fix: spacing tweak in ecumenical.des -------------------------------------------------------------------------------- 47bcd709c3 | DreamDustDCSS | 2021-07-06 10:42:00 +0300 vaults: DreamDust faded altar vaults Six new ecumenical altar vaults [ Committer's notes: Overall adjusted tags (allow monsters, rotation). Squashed commits and rebased. Specific vault adjustment notes follow. Closes #1946. hidden_grotto: use delayed decay for the corpse, remove the quarterstaff and butterflies, trim size. angels_and_demons: console aesthetics, trim size. drowned_temple: statuary and console aesthetics, trim size. grove: remove butterflies, guarantee connectivity, console aesthetics. sealed_demon: console aesthetics. ] -------------------------------------------------------------------------------- 28d7adaeb8 | Shapermc | 2021-07-06 10:40:39 +0300 vaults: ShaperMC ecumenical altar ruins Adding 7 new ecumenical altar vaults [ Committer's notes: Adjusted foliage counts and placements (we don't want to overly annoy players making them crush plants). Placed some controls on the Plato randbook. Fixed up the skeleton placement for Pompeii. Cleaned up spacing. Fixed commit history. Closes #1999. ] -------------------------------------------------------------------------------- 2c0bbc4b58 | MainiacJoe | 2021-07-06 10:39:41 +0300 vaults: unaligned overflow altar vaults by ManiacJoe Each of these vaults has a fixed altar count. Seventeen place one altar, six place two altars, and one places four altars. [ Committer's notes: Squashed and rebased. Added transparency tags to all vaults. Corrected typos and removed extraneous headers in boulavard, catwalk, and surrounded_room. Removed borders from large_24_doors, chevrons, and large_starburst. Removed some over-use of clear stone. Made the_wave 2 tiles wide. Tweak alcove_2 and catwalk. Closes #1858. ] -------------------------------------------------------------------------------- f5a116941d | Kate | 2021-07-05 05:05:53 +0100 Reduce the number of bees in wad_woods_minihive It's probably still excessive, but at least slightly less so. -------------------------------------------------------------------------------- 331ba6fa66 | gammafunk | 2021-07-04 21:37:46 -0500 feat: Adjustments to Ice Cave entry vaults Many of these vaults haven't been updated for monster changes over the years. In these vaults, replace ice beasts with simulacra appropriate for placement depth, placing fewer, since simulacra tend to be nastier. Remove some arbitrary down-weights on some normal entry vaults, but keep down-weighting on easy entry vaults that place an out of depth monster. Organize entry vaults into sections based on whether they place for one specific type of ice cave difficulty and clean up syntax. -------------------------------------------------------------------------------- 183a74056d | gammafunk | 2021-07-04 21:37:46 -0500 feat: Adjust hard Ice Cave placement Currently hard ice caves can only place in Elf and Lair branches, but D:14-D:15 is comparable depth to Lair branches, and an easy ice cave will generally be very easy by D:14. This commit extends hard ice caves to the final two levels of Dungeon. -------------------------------------------------------------------------------- cde07775c6 | gammafunk | 2021-07-04 21:37:46 -0500 feat: Have all Ice Cave maps use the same weight Maps currently have a weight of either 5 or 6, making them individual place at nearly the same frequency. The weight of 6 was used for the five "small cave" maps to make them place twice as often as the three "sprawling cave" maps that use weight 5. This isn't necessary, however, since the themes of these maps are strongly overlapping. The two map sets share similar monsters, have similar difficulty as a whole, and nearly all of the "small" maps are in fact quite big. This commit has all maps use the default weight of 10. -------------------------------------------------------------------------------- cc58b11c1d | gammafunk | 2021-07-04 21:37:43 -0500 feat: Rework many aspects of Ice Cave maps (hellmonk) Many ice cave maps don't define variants for the hard difficulty version of the portal that places at later levels, which means less map variety at these locations. Additionally, terrain in many maps includes freezing vapour generators that are randomly placed, leading to annoying gameplay and many out-of-LOS collateral monster kills. Many maps place large deep water areas that are either completely enclosed with rock or lead to spoilery dead ends with no gameplay relevance. Finally, some maps share common functions and data for defining thematic monsters and loot, but these are a patchwork that's not used consistently among all maps. This commit addresses these issues. Partially based on hellmonk's PR #1942, we add hard variant monster and item sets to all ice caves. To help achieve this, the vault functions for items and monsters are generalized and shared to some degree among all maps. As before this commit, there are two thematic sets of monsters, natural and demons+undead, but instead of using the natural set only for easy difficulty and undead+demons only for hard, both sets have definitions for each difficulty. Both sets define eight monster definitions using the same glyphs 1 through 8, with a designated function at each glyph like "statue monster", "miniboss", and "boss". This way any map can use the definitions interchangeably, regardless of monster set or difficulty. All but four maps use these monster sets, and the three "sprawling caverns" can use either set at either difficulty, randomly choosing between the two. The monster lists have been tweaked to be more coherent with more well-defined difficulty progression. For statue monsters, we use ice statue for both sets at easy, orange crystal statue for the natural natural at hard difficulty, and obsidian statue for undead+demon at hard. To allow Shadow Creatures to work for orange crystal statues and the player spell, both monster sets defined appropriate random monster lists at both difficulties. Additionally the simulacrum lists used by the undead+demon set have been expanded to have definitions at both difficulties, rebalanced, and refactored to be more easily reused. Both sets now define two boss monsters, a stronger, but smaller group monsters and a weaker, but larger group monster, and most maps randomly choose one of these two configurations. For the natural monster set at easy difficulty, the player faces either two ironbound frosthearts or a single frost giant. At hard difficulty, this is either two or more frost giants or one to two shard shrikes. For the undead+demons set at easy difficulty, the player faces either two bog bodies or a single reaper. At hard difficulty, this is either two or more blizzard demons or one to two ice fiends. Trivia: the infamous double ice fiend found on ice_cave_small_demon at hard difficulty was due to a bug where the original author misapplied a substitution pattern used in other maps. They meant to give either two blizzard demons or one ice fiend, and gave instead either one blizzard demon or two ice fiends. This double fiend is so universally loved that I made it possible on any map using the undead+necro set at high difficulty, albeit with reduced chance. I also expanded the idea to the natural monster set using shard shrikes. Enjoy! The ice-themed common loot definitions have been improved to have six common classes of items: three tiers of armour (aux+light, medium, and heavy), two tiers of weapons (any weapon and upper-tier weapons), and a magic set (books, enhancers, jewellery, and misc items). Additionally, necromancy-themed maps share a common ice-themed necromancy loot definition. These definitions used to some degree by all maps, replacing the many different and overlapping definitions used previously. Larger maps that place loot items at early or midpoint locations now always place one of the armour class items at these locations, so a player might get access to rC before the map is finished. The tier of armour item at these locations is randomized, so it won't always be light armour, for example. For maps that previously had hidden water caverns, we turns some of these areas on each map into randomized shortcuts that are each open 50% of the time. These shortcuts contain either deep water (encouraging use of flight or amphibiousness) or floor with a freezing vapour generator. These shortcuts are at fixed locations that provide meaningful skips of significant fights and in a way where collateral monster deaths to freezing vapour will be reduced. More randomly placed freezing vapour machines are gone altogether, with the exception for the ones at the end of ice_cave_small_demon. All freezing vapour machines now place with the same power level (cloud duration), but vary by size (number of clouds placed) as appropriate for their map location. Many other aspects of monster placement and composition have changed on a per-map basis. Comments have been updated at the top of each map to summarize types of monsters and loot, and there are comments for each group of SUBST/NSUBST/SHUFFLE. On each map, comments above the conditional check for hard or easy difficulty describe the major differences between the two difficulties. Some additional notes on specific maps: ice_cave_small_demon: Any reaper placed now gets a robe of cold resistance and either a ring of protection from cold or a ring of ice, bringing it to rC+++ and freezing vapour immunity. Gone are the days of the mysterious dead reaper! This map could randomize between reapers and blizzard fiends since it doesn't have an explicit necromancy theme, but for now we're going with reapers only for tier 2 demons. ice_cave_statue_garden_transporter: The final transporter area has been reworked to be small enough so it can be entirely seen by the player before taking the transporter. ice_cave_statue_garden_chambered: The map was created before circlelos became squarelos, when visual range was 8 squares for all characters. Hence its ice statues were all in view of each other before squarelos, but it wasn't updated for the reduction of visual range to 7 squares. I've reduced the map two squares in its longest dimension to bring them back within LOS of each other. Closes #1942. -------------------------------------------------------------------------------- 84e617a3e7 | gammafunk | 2021-07-04 21:32:04 -0500 doc: Update comments in icecave.des Add vault sections with guidelines and instructions for entry vaults and the ice cave maps. Clean up descriptions of ice cave themes and reorganize. -------------------------------------------------------------------------------- e31baa5f3c | gammafunk | 2021-07-04 21:32:04 -0500 feat: Add a vault utility function The lua function dgn.random_entry_arg() can be used to add an argument to each entry in a delimited string. This can be useful when adding weights or terms to strings defined for monster and item definition purposes so that said strings can be re-used without repeating their contents in multiple places. This will be used in a subsequent commit that updates the Ice Cave maps. Also improve and reformat comments for other functions in this file. -------------------------------------------------------------------------------- 282632147b | Kate | 2021-07-05 00:57:38 +0100 Let Poisonous Vapours set ally targets -------------------------------------------------------------------------------- 9c78c815f3 | Kate | 2021-07-04 17:50:25 +0100 Don't expire Coupling/Ramparts etc when flight ends -------------------------------------------------------------------------------- 0fd888774e | wheals | 2021-07-04 18:22:59 +0300 Remove unused spl-pick.{cc,h} -------------------------------------------------------------------------------- 0929e78a5e | wheals | 2021-07-04 18:18:19 +0300 Change random-pick to use vector and c++11 list initialization This removes the need for a terminator entry at the end -------------------------------------------------------------------------------- 4c2704cb36 | wheals | 2021-07-04 16:32:19 +0300 Remove butchering -related option -------------------------------------------------------------------------------- aadcdd2144 | wheals | 2021-07-04 16:32:19 +0300 Move travel_open_doors to the travel section of the options guide. -------------------------------------------------------------------------------- 1844267e3d | wheals | 2021-07-04 16:32:19 +0300 Remove the now-unused spflag::emergency. -------------------------------------------------------------------------------- 87b6fcb595 | Nicholas Feinberg | 2021-07-03 18:10:06 -0700 Make storm form insubstantial (gammafunk) Purely for flavour. -------------------------------------------------------------------------------- 300acc8974 | Nicholas Feinberg | 2021-07-03 16:28:04 -0700 Add a bad storm form tile PF'd again -------------------------------------------------------------------------------- 96bc1138ba | Nicholas Feinberg | 2021-07-03 16:17:24 -0700 One more book freq tweak Per objstat, this gets average spells generated in Lair and D back to the same levels they were at pre-recent-changes. -------------------------------------------------------------------------------- 6853699f2c | Nicholas Feinberg | 2021-07-03 15:15:52 -0700 Remove stab_bypass Previously, stabbing could randomly bypass some of the defender's AC. At 5 stealth skill and 5 shortblades, you'd get on average 1.25 bonus damage out of this, assuming your target had at least 5 AC and they were sleeping, paralysed, or petrified (otherwise, you'd get on average ~0.3 bonus damage). At 18 stealth and 12 shortblades, you'd get on average about 3.75 bonus damage, with the same qualifications (target had at least 15 AC, etc). This seems unecessarily complex. Why add such a tiny bonus specifically against enemies with AC? Stabbing is already good against AC; it does huge damage! Instead, let's just add this tiny little flat bonus directly into damage, pre-AC. This is a small player buff. (We may later want to just cut this flat component entirely and shift other things around if necessary.) -------------------------------------------------------------------------------- 9b7c6745da | Nicholas Feinberg | 2021-07-03 14:38:39 -0700 Pull back on book gen again Drop it by 25% (not counting vaults), since it looks like we overshot a bit. May need to drop it farther. -------------------------------------------------------------------------------- 4b3bd47ff3 | mgdelmonte | 2021-07-03 17:29:06 +0300 feat: add monster.flags Adds a flags function to the Lua monster_info object, which returns the list of flags set for the monster. This allows more script future proofing as compared to the flag method. [ Committer's note: Updated commit message. Closes #1921. ] -------------------------------------------------------------------------------- 66c3ed4545 | mgdelmonte | 2021-07-03 17:17:58 +0300 feat: add travel.is_excluded The travel module in Lua lets you set and remove exclusions, but not test for them. This adds the is_excluded function to that module. [ Committer's note: Edited commit message. Closes #1928. ] -------------------------------------------------------------------------------- b48c9e4e3a | mgdelmonte | 2021-07-03 17:14:09 +0300 fix: check for exclusions in view.is_safe_square Currently view.is_safe_square returns false if a square has clouds or a trap or something known to be nasty, but not if the square is marked excluded. However, a marked exclusion, whether by the player or the game, would seem to be an obvious indicator that the square is unsafe. With the current implementation of view.is_safe_square, hitting TAB to autofight when a monster is within an excluded area, such as that surrounding an ice statue, can result in the question "Are you sure you want to move into that travel-excluded area?" even if non-excluded targets are available. With the advent of the travel_one_unsafe_move option, autofights inconsistent treatment of exclusions is an interface screw. This commit addresses that issue. [ Committer's note: Rewrote commit message. ] -------------------------------------------------------------------------------- 6f15984924 | Edgar A. Bering IV | 2021-07-02 10:46:28 +0300 docs: remove starting books from the manual -------------------------------------------------------------------------------- 9e18931815 | Edgar A. Bering IV | 2021-07-02 10:46:15 +0300 feat: Spell background adjustments part I (kate-, hellmonk) Book backgrounds have for a long time presented friction with the notion that a background should be a starting kit, and not completely determine a character's arc. With many books containing L5 spells many could carry comfortably to the midgame. In part this was necessary to make them fun: with spell books being large and somewhat rare, finding "the right book" could take some time and without the level of progression found in current books they would be sunk cost traps. The recent changes to book items smooth out spell drops, giving more opportunity for characters to adapt. This opens up space to make spell backgrounds more of a starting kit and less of a complete package. Some of the backgrounds would be awkward with a blunt delete all L5 spells from spell starts, so this commit starts the process incrementally. This is also a good opportunity to reduce the number of schools in each start and the total number of spells even if there are no L5 spells, also in support of this goal. Ne, FE, and Wr are untouched, as chopping off their L5 spells leave the books a bit too thin. They will be visited in future commits (possibly in 0.28). AE loses lightning bolt. There's a bit of an aesthetic loss in that lbolt is quite iconic, but the start still has a strong collection of spells that can support developing in various directions based on the dungeon. Indeed, there are many players who already ignore lbolt in the book. AM loses Leda's. The AM book had four (4) schools for a background that notionally also wants to train a weapon. At level 4 dual school Leda's was the hardest to reach of these spells, so its absence won't be too felt. EE loses LRD. People kill OOFs with an acid wand and LRD, come on. Without it the "jank stabber", "pick up some kind of tmut either form or otherwise", and "be a blaster" possibilities invited by the book have more equal appeal. IE loses Metabolic Englaciation. The loss makes repeated Hailstorm harder to set-up from the book alone, but it remains very strong. Su loses Summon Ice Beast. Still very strong but reduces the book to a three school book. VM loses Ignite Poison. This reduces the number of schools in the book to 4 (still high) and returns VM to an era of needing to branch out sooner, especially to deal with resistant threats. This is much like VM's past, but with the new opportunities provided by more frequent spell drops it should be less of a "VM sucks" vibe. -------------------------------------------------------------------------------- 4eff083807 | Edgar A. Bering IV | 2021-07-02 10:01:39 +0300 docs: changelog typos (geekosaur) -------------------------------------------------------------------------------- cffa5a9b16 | Kate | 2021-07-02 06:58:28 +0100 Fix book names in vaults -------------------------------------------------------------------------------- 28b6d0f915 | Nicholas Feinberg | 2021-07-01 22:13:03 -0700 Depluralize (ardl) Avoid "an inescapable atlases" (now "...atlas") or "an unrestrained analects" (now "the unrestrained analects", fairly hackily). -------------------------------------------------------------------------------- 4113b66390 | Nicholas Feinberg | 2021-07-01 22:07:09 -0700 Fix book of stone desc (hellmonk) oops -------------------------------------------------------------------------------- 2e30c3664c | hellmonk3 | 2021-07-01 23:47:02 -0400 Fix book of the spheres description -------------------------------------------------------------------------------- c0e7b40ece | Kate | 2021-07-02 01:34:05 +0100 Don't crash on examining ponderous artifacts Extend the available space in descriptions so that "ponderous" fits, and add handling so that future egos with long names will just be cut off rather than crashing. -------------------------------------------------------------------------------- 6348b4e45d | Kate | 2021-07-01 23:11:04 +0100 Cap the number of spells Djinn can start with Giving Djinn more than 8 spells caused them to hit the cap on known spells as they levelled up. This could only happen rarely for Wanderers, but handle it generally for all new characters Just In Case. -------------------------------------------------------------------------------- 2b061281b7 | Kate | 2021-07-01 23:11:04 +0100 Fix a crash when Djinn learn too many spells In rare cases, Djinn Wanderers could start off with 9 or 10 spells, which would cause them to hit the cap of known spells at level 25 or 27, and crash when trying to learn their next spell. To rescue any games trapped in this situation, make them forget spells from the start of their innate set to make room for the later ones. A later commit should adjust Wanderer starts to prevent Djinn from giving out so many spells and causing the issue in the first place. -------------------------------------------------------------------------------- 2d92212324 | Edgar A. Bering IV | 2021-07-02 01:00:20 +0300 docs: changelog through 0.27-a0-1423-ge5d6b6a -------------------------------------------------------------------------------- e5d6b6ab6a | Nicholas Feinberg | 2021-07-01 14:19:07 -0700 Fix Book of Weapons desc (Ge0ff) -------------------------------------------------------------------------------- a6f8dd0138 | Kate | 2021-07-01 18:56:48 +0100 Shuffle around some high-level spells Since the spells that were previously rarebook-only can now appear in randart books, adjust book contents so that each L9 spell is only in one fixed book. -------------------------------------------------------------------------------- 8daf88dee0 | Kate | 2021-07-01 18:56:40 +0100 Remove special handling for "rare" spellbooks Previously, the book of Annihilations, Grand Grimoire, and the Necronomicon had special behaviour - they couldn't be gifted by Sif, and their spells never appeared in randart books (but could appear in Sif randart gifts). The book reworks moved many of the affected spells out of the rare books and into normal books, so rather than keeping the special behaviour around for a very narrow remaining set of spells, just treat them and their contents the same as any other books. -------------------------------------------------------------------------------- 4d0b0a1ddf | Edgar A. Bering IV | 2021-07-01 19:22:27 +0300 fix: Give capacitive coupling and searing ray identical ending behavior -------------------------------------------------------------------------------- c69eb68267 | advil | 2021-07-01 11:59:02 -0400 fix: move newchar quiver setup later (dang3rdave) It turns out that _setup_generic happens before the player's init file is read for real, and so anything that is waiting on early setup calls or lua isn't reliable at this point in character creation. This includes the new fire order options, because there's an overly elaborate spell name cache thing that isn't in place for the first rc read (and some maybe-related but not fully identified issues for abilities). To solve this I have moved new character quiver setup later in the sequence. It might eventually be better to simplify spell/ability startup so it's more reliable. -------------------------------------------------------------------------------- 5cd3f1290e | Nicholas Feinberg | 2021-07-01 08:47:52 -0700 Rework monster CBL Give it actual damage (not the sad 3x3d6 it did before - now 3x3d25 on Lom Lobon) and describe it in xv. I think spellforged servitor doesn't work properly with it before or after this change. Not sure why. -------------------------------------------------------------------------------- 4c841f645e | Edgar Bering | 2021-07-01 09:54:26 -0400 fix: Harmonize spell distributions In the process of preparing branch reading_rainbow for merging, Confusing Touch and Vampiric Draining ended up in one book each, with Petrify and Animate Dead appearing in three. This commit balances the book apperances of these four spells to match the design spreadsheet. -------------------------------------------------------------------------------- 941b2bd30b | Nicholas Feinberg | 2021-06-30 22:51:31 -0700 Fix book weights? (wheals, others) -------------------------------------------------------------------------------- 413ade4df3 | Nicholas Feinberg | 2021-06-30 22:19:26 -0700 Fix chain lightning no-hostiles check Correctly check to see whether there are any targetable enemies in range. -------------------------------------------------------------------------------- 2fbb07c8a5 | Nicholas Feinberg | 2021-06-30 22:12:47 -0700 Fix chain lightning + statues (ardl) Don't attempt to arc through them. -------------------------------------------------------------------------------- ded080b69b | Nicholas Feinberg | 2021-06-30 22:05:35 -0700 Fix creeping frost death message No more killed by 'a frost'. This code is awful and makes me sad :( -------------------------------------------------------------------------------- b7b94b6bbb | Nicholas Feinberg | 2021-06-30 21:59:04 -0700 Fix chain lightning death message No more just 'killed from afar'! -------------------------------------------------------------------------------- 987ffbb14b | Nicholas Feinberg | 2021-06-30 21:41:23 -0700 Tweak ar description (dinky) Like magic, a wand has become a chess piece. -------------------------------------------------------------------------------- a306adf81e | Nicholas Feinberg | 2021-06-30 21:35:22 -0700 Fix curare death message (7+ year bug) Don't claim to be killed by "kobold brigand's curare-tipped dart". Instead, let's just be killed by *a* brigand. This bug dates to at *least* 51a3c3daa54 and probably farther back. -------------------------------------------------------------------------------- ea6a400864 | Nicholas Feinberg | 2021-06-30 21:24:14 -0700 Update book background descriptions Don't claim they start with books. They don't! -------------------------------------------------------------------------------- a93db79ee8 | Edgar A. Bering IV | 2021-06-30 21:08:18 -0700 vaults: Adjust explicit book placement floats, shops, and portals -------------------------- This adjusts explicit books placed by shops, floats, portal vaults, and mini vaults in light of the new book shuffle. Some book placement weights are moved upward in portal loot, as new books have fewer spells this seems ok from a loot point of view. arena sprint ------------ Add some more books to the arena sprint shop, since each book has fewer spells. The pricing still probably makes this a tougher deal for heavy spell users even with the increased selection. Hard cheese. -------------------------------------------------------------------------------- e29514b5c3 | Nicholas Feinberg | 2021-06-30 21:08:18 -0700 Increase book generation rates Move them from weight 30 to 100, slightly more than doubling the number of books generated. This is in preparation for a future change that will shrink books. All other item generation drops by about 2%, which I'm not currently compensating. This keep total spells more in line with what we saw before. -------------------------------------------------------------------------------- b47a77b0f7 | Nicholas Feinberg | 2021-06-30 21:08:14 -0700 Adjust book costs -------------------------------------------------------------------------------- c126db5c3d | Nicholas Feinberg | 2021-06-30 21:07:25 -0700 Split fixed books into smaller sizes To smooth out the vagaries of randomness and make it more viable for players to adapt to what books they find, shrink most fixed books to contain exactly 3 spells and add about 30 new books to compensate. These books are designed to be relevant to a wide variety of character levels and types, to increase the chance that they'll have at least one spell that the finder will be able to use, even if it's less likely that every spell in there will be useful. They're also supposed to have fun, evocative themes. -------------------------------------------------------------------------------- 69d6a04d60 | Nicholas Feinberg | 2021-06-30 21:05:58 -0700 Adjust randbook sizes Roughly halve the sizes of most randbooks. Exempt Sif gifts, but make her gift timeout scale based on the size of the books gifted. -------------------------------------------------------------------------------- 60a263dd95 | Nicholas Feinberg | 2021-06-30 20:49:26 -0700 Fix artefact description formatting Format armour ego descriptions in the same way as randart properties when on a randart (or unrand). -------------------------------------------------------------------------------- b235c8b66b | Nicholas Feinberg | 2021-06-30 20:49:26 -0700 Remove unused (?) armour desc code This covered the case in which you knew that a piece of armour was magic, but it didn't have an ego, but you didn't know what its plus was. That almost certainly can no longer happen. -------------------------------------------------------------------------------- 8c83a1b76d | hellmonk | 2021-06-30 23:29:40 -0400 Noise dampening good mutation A rare good mut that halves noise from all sources within the player's los. -------------------------------------------------------------------------------- fb4300f5bb | Kate | 2021-07-01 03:55:27 +0100 Improve some unrand descriptions Add DESCRIP lines for the Wrath of Trog, necklace of Bloodlust, ring of Shadows and amulet of the Air. Unrands generally could probably use a full pass to put pure mechanics information in DESCRIP lines, free up the actual unrand description portions to be primarily flavourful, and possibly to use the new ARTP syntax of showing the inscription alongside the description (such as "SInv: It lets you see invisible"). Also fixes a typo in the cloak of the Thief description (via geekosaur, thanks!). -------------------------------------------------------------------------------- 22e92bf66e | Kate | 2021-07-01 03:55:27 +0100 Fix artefact and jewellery desc spacing/linebreaks Fixes a large number of inconsistencies in linebreaks across randarts, unrands, and some mundane jewellery. These hopefully all now consistently have a single empty line in between each of the base item description, any special unrand-only brands and/or descriptions, any randart properties, and the remainder of the descriptions. Also fixes a missing space for +Stealth items. -------------------------------------------------------------------------------- 8a2cd6d854 | Kate | 2021-07-01 03:55:27 +0100 Mention berserk extension in Trog's description It's probably not a detail that needs a full entry on the overview page, but should at least be mentioned in the extended description. -------------------------------------------------------------------------------- 85a84b9822 | Kate | 2021-07-01 03:55:27 +0100 Give Trog berserk a small piety-based failure rate To compensate for the removed chance of paralysis (since although Trog reliably prevents it later, it could very occasionally happen early on), and in general just to slightly weaken the ability in the extremely early game where it's incredibly powerful. -------------------------------------------------------------------------------- 0ac0241410 | Kate | 2021-07-01 03:55:27 +0100 Remove the chance of paralysis when ending berserk Paralysis was a rare occurence on ending berserk, and under Trog was particularly unlikely to happen except very early on, due to the piety-based chance to prevent it. It was slightly more relevant for non-Trog berserk, but since that's much less reliably repeatable (and weaker due to not being extended on kill), remove the chance of paralysis to simplify the effect overall. -------------------------------------------------------------------------------- c49bf3aad3 | Kate | 2021-07-01 03:55:27 +0100 Fix Trog being unable to burn an altar vault book (Goratrix) The vault was looking for an unidentified book - instead check for the book by its vault-defined title. -------------------------------------------------------------------------------- a6dc6547e3 | Nicholas Feinberg | 2021-06-30 19:19:46 -0700 Revert "Revert "Adjustments to book generation"" With some fixes to shopping.cc and book gen. -------------------------------------------------------------------------------- 6e7fd8c9ca | Nicholas Feinberg | 2021-06-30 19:00:38 -0700 Remove fun (buff felids/blade hands) RIP one of the greats. -------------------------------------------------------------------------------- 778c2f8729 | Nicholas Feinberg | 2021-06-30 18:56:10 -0700 Wereblood: only heal on adj kills A duration spell has to be balanced very carefully, to encourage it to be used situationally, rather than on all the time (since spells in DCSS do not work well for 'always-on' effects). Adding healing to Wereblood was intended to make it more useful in the early game, so that characters would have the 'sustain' needed to keep fighting multiple enemies and to make use of the slaying, but it seems to have made it too generally applicable. Let's limit it a bit. -------------------------------------------------------------------------------- 48c30b3128 | advil | 2021-06-30 15:26:09 -0400 fix: adjust early processing of fire order options (Goratrix) This will hopefully fix a crash on windows, that seems to result from some ability code being called too early in the initialization process on the first read of the rc file. Though I'm not sure why `all` works while `berserk` crashes, but Goratrix has kindly done some bisection to isolate that particular line. This commit also just prevents user-rc fire order options from being processed on this initial pass. -------------------------------------------------------------------------------- 8d3c4a4866 | MainiacJoe | 2021-06-30 22:09:57 +0300 Make the Wrath of Trog angrier This adds two new behaviors intended to make the weapon more appealing for characters who can go berserk without making it too powerful for those who can circumvent the *Rage. The first is berserk duration extension identical to that of the Necklace of Bloodlust. The second is Rampage: rampaging doesn't incur berserk penalties if it is used to take a swing. This is an overlap of effect, but the Wrath of Trog offers no optional berserk and the ``extras'' are cleaner. Bloodlust might need some design work, but that's out of scope for this commit. To prevent using the weapon to go berserk on demand and otherwise not deal with berserking in every fight, this also adds an on-wield penalty: the berserk cool down. [ Committer's note: Closes #1890. Did some commit re-ordering and editing. Added the wield penalty. ] -------------------------------------------------------------------------------- 3b62c0300e | MainiacJoe | 2021-06-30 21:47:38 +0300 Enable rampage on unrands Creates RAMPAGE as a bool in util/art-text.pl -------------------------------------------------------------------------------- e902cdc63c | advil | 2021-06-30 10:44:13 -0400 feat: enable arrow keys on quiver menu Would like this feature to get more testing before general use, and the quiver menu seems like a reasonable place for it to get that. -------------------------------------------------------------------------------- b8d40accb6 | advil | 2021-06-30 09:55:49 -0400 feat: uselessness check for forest space (dinky) This disables summon forest in the quiver when there isn't enough space for it. -------------------------------------------------------------------------------- 365887799b | Edgar A. Bering IV | 2021-06-30 09:24:45 +0300 fix: Tweak Capacitive Coupling's quiver name to fit -------------------------------------------------------------------------------- c2e3725628 | Edgar A. Bering IV | 2021-06-30 09:18:03 +0300 feat: Animate the status light for Maxwell's We could use plusses but the number of turns waiting isn't easily available unless we leak the charge time which is intentionally randomized and hidden. So instead, a little twirly dash to give some feedback that something is happening. -------------------------------------------------------------------------------- 1422d76b99 | advil | 2021-06-29 22:23:21 -0400 feat: autofight for wait spells The need to specifically hit `.` is a bit of an interface screw more than anything; this commit enables just triggering autofight (`p` etc) if the wait spell is quivered to continue casting it. This has been on my list for a while but now that there are two of them it became more important. As part of this commit, I also made it clearer in the targeter that casting it that way would restart the spell. Possibly should be included in `z` as well for people who have the Maxwell's targeter disabled. -------------------------------------------------------------------------------- bd6db1e6d9 | Kate | 2021-06-29 23:46:59 +0100 Adjust spacing in spellbook descriptions So that "Maxwell's Capacitive Coupling" will fit. -------------------------------------------------------------------------------- a7dfd5ec23 | advil | 2021-06-29 18:10:42 -0400 feat: options for controlling spell/ability quivering Long-requested quiver features: These options let you control what appears in the cycle order (and autoquiver on game start) in a much finer-grained way. Ideally this would have some sort of in-game UI but that's a much bigger project, so these fairly brute-force options will do for now. These options do not affect what is shown in the Q menu, if there is demand for that I could consider a further tweak along those lines. Since some people seem convinced that quivers are for attacking only, I have provided some shortcuts to set your spell/ability fire order lists that way; probably most useful with autofight_throw=true since the notion of "attack" this uses is exactly identical to that one. Also by popular demand, this commit excludes berserk by default from fire_order_ability, keeping it out of cycle order and autoquiver. I could still be convinced to revert this part, though I do agree that berserk is very different from everything else that this option is relevant to at game start. This can of course be overridden with: fire_order_ability += berserk As part of this commit I also made `fire_items_start` be respected for all quiverable item types, not just ammo. -------------------------------------------------------------------------------- 81fdcbfb23 | advil | 2021-06-29 14:42:58 -0400 fix: update quiver on item adjustment This is a long-missing behavior for newquivers. Spells and abilities already handled adjustment correctly, because they didn't rely on anything tied to letter position, but inventory items need to manually have the quiver slot changed. -------------------------------------------------------------------------------- f508b8f851 | advil | 2021-06-29 13:09:37 -0400 feat: range checks for various scrolls The main goal of this was to improve the enabled check when a scroll is quivered (e.g. fear is now disabled with no susceptible enemies), but I also added a double-check prompt when reading the scroll. If this is too annoying it can be removed. It's possible these checks are a bit slow when a scroll is quivered, and need a cache mechanism like `spell_action`s have. However, I'm not sure how much consumables will really be quivered in practice, so I'll wait and see. -------------------------------------------------------------------------------- e6a161afd2 | advil | 2021-06-29 13:09:37 -0400 refactor: consolidate some reading code Only scrolls are readable, so this commit removes the distinction between `read` and `read_scroll` and restructures reading checks accordingly. The reading checks are reordered and cleaned up in the process, so this commit should fix https://crawl.develz.org/mantis/view.php?id=12610. -------------------------------------------------------------------------------- defffd1ff6 | Kate | 2021-06-29 04:49:37 +0100 Staticify a function -------------------------------------------------------------------------------- 9e2faccc22 | Kate | 2021-06-29 04:49:18 +0100 Don't crash when cancelling a Searing Ray -------------------------------------------------------------------------------- 3820e56076 | Kate | 2021-06-29 01:20:33 +0100 Don't allow activating the Sceptre of Asmodeus with Sac Love Previously it would spend a turn but do nothing, so just print the failure reason without costing a turn. -------------------------------------------------------------------------------- 4b199c8bd3 | Edgar A. Bering IV | 2021-06-29 01:01:59 +0300 feat: New Spell: Maxwell's Capacitive Coupling Commit 64d35965e29 removed Absolute Zero because the memorable, spectacular instant kill effect didn't have good playfeel. It often felt cheap, with the monster getting no chance to react. The result was that boss fights felt like anticlimaxes. This re-introduces the guaranteed kill effect, but it is no longer instant. Instead, the spell has a (random, not revealed) aut charging time between cast and effect. In this time the player must wait (like searing ray). At the end of the time a random closest monster is killed. Any action other than waiting causes the spell to fizzle (with no MP refund). The flavour is currently Air: a reference to capacitive coupling. The effect (especially with the time lag) fits the "bouncy, pointy, or hard to direct" archetype that we went for with Air in positional magic much better than Ice (I will admit a bit of contortion in calling A0 "subtle".) With Chain Lightning moved up to L9 Conj/Air, Air magic has space for a L7 or 8 attack spell. This reverts commit 64d35965e295382a687bd14c17aadd49688b771d. -------------------------------------------------------------------------------- c14e5d3922 | advil | 2021-06-28 17:51:34 -0400 fix: missing header? -------------------------------------------------------------------------------- ea054b796d | advil | 2021-06-28 17:26:16 -0400 feat: add static targeters for several scrolls Another niche feature, somewhat more involved than I had hoped. The trick here is that even where scrolls correspond to spells, the call that does the effect is always pretty low-level and so it wasn't easy to reuse all the your_spells scaffolding. This commit adds targeters for fear, summoning, vulnerability, immolation, holy word, silence, and reuses the existing blink targeting code. (In implementing this, I slightly refactored how hop is called because of needing to change shared code.) Most of these aren't very exciting unless you aren't used to the effect, but fear seems useful. It would be nice if there were a nicer interface for getting to these targeters besides quivering the scroll and using `f`, but I'm not sure what that would be. This commit also prevents quivering unid'd spells and scrolls, for the sake of simplicity. -------------------------------------------------------------------------------- a08111df00 | advil | 2021-06-28 17:18:34 -0400 refactor: generalize and unify some quiver boilerplate This combines a bunch of shared / repeated code for actions involving items. There's some hackiness here to do with hard coding class names for serialization + equality purposes, but it's still probably better than repeating this code so many times. (Not aware of a cleaner c++ approach to this, though perhaps there is something.) -------------------------------------------------------------------------------- 6e4aca1174 | advil | 2021-06-28 17:18:34 -0400 feat: quivering spells/potions This is a pretty niche feature so I haven't included these in the default `Q` list. However, it was easy to implement, requested, and this is one step closer to a complete generic trigger api for item effects. E.g. eventually I'd like to use actions for local tiles buttons so that the item activation api is not distinct. One noticeable gap is targeters for scrolls, to be added in a future commit. Another is that scroll actions don't have a very good enabled check. -------------------------------------------------------------------------------- 58471f690d | Kate | 2021-06-28 19:18:34 +0100 Remove Pakellas ability tiles and descriptions Since their functionality has been removed. -------------------------------------------------------------------------------- 1ea419760f | Kate | 2021-06-28 17:49:01 +0100 Remove obsolete code for Pakellas' Device Surge It had lots of dead code and resulted in a large number of TAG_MAJOR_VERSION checks in any place that calculated evocations power. There's no save compatibility requirement to keep it around and any future re-implementation of Pakellas would need a full redesign, so fully remove the ability to clean up evoker code around it. Also fixes some overzealous TAG_MAJOR_VERSION checks which had scheduled surge_power() and surge_power_wand() for removal - these handle messaging for normal enhancers and still function without Pakellas. -------------------------------------------------------------------------------- 229a95b9f4 | Kate | 2021-06-28 16:14:18 +0100 Make Archmagi affect randart pricing -------------------------------------------------------------------------------- c7843cd938 | Kate | 2021-06-28 16:13:20 +0100 Fix spacing -------------------------------------------------------------------------------- d924e931ac | Kate | 2021-06-28 16:11:05 +0100 Fix Archmagi and +MP randarts never generating -------------------------------------------------------------------------------- e71e8f7681 | dilly | 2021-06-28 10:31:10 +0300 Add Wr and AM for Ba recommends (#1994) Four weren't enough. Let players do something else more. [ Committer's note: Ba make good hybrids, we use recommendations both for things that play well and things that build lore. These backgrounds meet both criteria. ] -------------------------------------------------------------------------------- 9667eb783e | Skrybe | 2021-06-28 10:29:59 +0300 Update special_room_magic_class (#1961) Some adjustments to the magic classroom special room I submitted a while back. Added necromancers to the monster set, and adjusted weights in general. Vampire knights and deep troll earth mages get the biggest drop in weight, and deep elf sorcerers and deep elf death mages get the biggest increase. Depths:5 draconian annihilators are more common now as well. This should make the room generate a more varied monster set. Boss monsters are untouched. -------------------------------------------------------------------------------- e0d888d967 | Alexei-Barnes | 2021-06-28 10:06:43 +0300 Corrects the description of Tin of Tremorstones The description states that the power scales with your evocations skill. This is not the case since 6f112fb28d. -------------------------------------------------------------------------------- e7c6b5271d | Goratrix | 2021-06-28 10:03:55 +0300 Add Archmagi as a randart property This adds Archmagi as a randart property and enables it to generate on robes only (for now). Also added are equip/unequip messages, same as for the Archmagi ego, and an indicator in the character overview screen. -------------------------------------------------------------------------------- 234f4a1dcd | Nikolai Lavsky | 2021-06-28 09:59:29 +0300 Fix Dj's hair on the species selection menu The newgame doll was missing red hair, which is the default according to `tilepick-p.cc:tilep_race_default()`. -------------------------------------------------------------------------------- 4cf9878b8b | robertxgray | 2021-06-28 09:49:34 +0300 Allow zoom in via ctrl-'+' The key combination ctrl-'=' doesn't work in some European keyboards like Spanish or German. -------------------------------------------------------------------------------- a2a4dfd6fd | Nicholas Feinberg | 2021-06-27 19:09:28 -0700 Maybe fix a book crash (kate) -------------------------------------------------------------------------------- a0a28fc8c3 | Nicholas Feinberg | 2021-06-27 14:45:43 -0700 Revert "Maybe fix a book crash" This reverts commit b88236dc16387cae4b30a5264a106c4c44de900a. -------------------------------------------------------------------------------- 5d287be605 | Nicholas Feinberg | 2021-06-27 14:41:53 -0700 Revert "Adjustments to book generation" This reverts commit caca448e221395f958a5f12a07e8ffd255cb755f. -------------------------------------------------------------------------------- b88236dc16 | Nicholas Feinberg | 2021-06-27 14:24:13 -0700 Maybe fix a book crash -------------------------------------------------------------------------------- 1158a0e862 | Nicholas Feinberg | 2021-06-27 13:57:10 -0700 Don't list the books a spell can be found in This was never particularly useful, and would break when we added more book types. -------------------------------------------------------------------------------- caca448e22 | Nicholas Feinberg | 2021-06-27 13:56:54 -0700 Adjustments to book generation - Support future books beyond the current limit of 60. - Remove the concepts of 'book rarity' and 'spell rarity'. Instead, try to generate books with spells that will be potentially interesting to players at the corresponding absdepth. - Price books by total spell level, not by rarity. -------------------------------------------------------------------------------- 14994ecaaf | Kate | 2021-06-27 20:31:32 +0100 Adjust Slime floor zig scaling To replace some of the azure jelly weight with rockslimes and quicksilver oozes. They're unlikely to be especially worrying threats, but they do probably at least deserve some additional weight as the new top-end Slime monsters. -------------------------------------------------------------------------------- bb9dc7d752 | Kate | 2021-06-27 20:21:16 +0100 Remove some obsolete Djinn code (From their previous implementation.) -------------------------------------------------------------------------------- 47152c58aa | Nicholas Feinberg | 2021-06-27 12:00:44 -0700 Remove book ID Books being unknown had almost no impact on the game. They were a little fun in antique shops, but that was fairly rare and not worth keeping the feature given the limitations it presents (max 60 book types), let's scrap it. -------------------------------------------------------------------------------- f014654284 | Nicholas Feinberg | 2021-06-27 12:00:00 -0700 Remove known book tracking Extremely little point to it now that libraries exist. -------------------------------------------------------------------------------- 4272520434 | Nicholas Feinberg | 2021-06-27 11:59:18 -0700 Make Damnation bolts only mulch on hit Seems polite. -------------------------------------------------------------------------------- 58f33c6695 | Nicholas Feinberg | 2021-06-27 08:33:55 -0700 Maybe fix dform steam res (advil, 2tousent) -------------------------------------------------------------------------------- d8886f0a89 | Nicholas Feinberg | 2021-06-26 22:06:02 -0700 Title armour properties To help clarify for newer players who get lost in the sea that is our very long item descriptions. (We need more organization, formatting, sections, etc... but instead I'm doing this.) Example output: 'Of rampaging': It allows the wearer to take one free step toward enemies. (Or however that goes...) -------------------------------------------------------------------------------- 60794d8430 | Nicholas Feinberg | 2021-06-26 22:06:02 -0700 Title artefact properties Explain what inscription each artp corresponds to in item descriptions. (E.g.: "rPois: It confers resistance to poison", or something like that.) Formatting could use some work. -------------------------------------------------------------------------------- b432ad73d2 | hellmonk | 2021-06-26 20:59:13 -0400 Buff Wucad-Mu Reworked Wucad-Mu felt a bit underwhelming. Increase the chance of a refund, and refund the MP on success even if a side effect is rolled. Can be tweaked further if this ends up being too much. -------------------------------------------------------------------------------- 9fd5ee6ec5 | hellmonk | 2021-06-26 20:37:33 -0400 Add salamander tyrants to snake themed zig floors -------------------------------------------------------------------------------- 643e45de12 | hellmonk | 2021-06-26 20:13:02 -0400 Don't unbribe monsters that haven't been bribed yet Whatever jank this causes is probably less bad than turning monsters hostile because the player hit a monster that, unknown to them, would receive a bribe when it entered their line of sight. -------------------------------------------------------------------------------- a99462a43c | Nicholas Feinberg | 2021-06-26 11:48:01 -0700 Only explode Damnation on hit When fired from the unrand Damnation, bolts should only explode if they actually hit the target. (Thus, firing with '.' is no longer very silly secret tech.) -------------------------------------------------------------------------------- dcd0597939 | Nicholas Feinberg | 2021-06-26 10:47:33 -0700 Remove a redundant yesno (advil) -------------------------------------------------------------------------------- 561ffd6492 | Nicholas Feinberg | 2021-06-26 10:43:52 -0700 Allow monsters to wand each other The prophecy is fulfilled. -------------------------------------------------------------------------------- 81ec99bee2 | Nicholas Feinberg | 2021-06-26 10:40:55 -0700 Break monster AI (greenscarf) Allow berserk monsters to launch reaching attacks, as with players. In principle allow monsters to reach, swoop, or use wands while offscreen. (But wands still don't quite work.) -------------------------------------------------------------------------------- 1e49fe14ad | Nicholas Feinberg | 2021-06-26 10:10:57 -0700 Remove superfluous parens -------------------------------------------------------------------------------- bddd1c10ba | Nicholas Feinberg | 2021-06-26 09:48:30 -0700 Allow Poisonous Vapours on empty space To allow people to cast it on invisible enemies (which seems fairly intuitive). Now that vapours doesn't create clouds, this should be unproblematic. (Kate, if I've misunderstood your intent, please let me know.) This probably needs some way to bypass the yesno prompt but I'm not sure what. Partially reverts d1c2c16caae861bf6d9ccddd45d859ddfa191991 . -------------------------------------------------------------------------------- c13eec7c8e | Aliscans | 2021-06-26 18:57:23 +0300 Add a help option for the wizard mode create monster command. Entering ? as the monster name causes some help text to appear. This is derived from the MONS section of docs/develop/levels/syntax.txt, but with a few changes. 1. Use colour - yellow for headings, white for keywords which can be entered as part of the command, and cyan for other things such as text the game produces in response to a command, or file references. 2. Remove quotation marks from around keywords. I haven't done this with cyan text, as this contains longer phrases which may be harder to separate. 3. Don't give advice on how the command should be used (such as "use this sparingly"). 4. Rearrange the paragraphs a bit, and add a new opening paragraph. 5. Add lists of valid characteristics for mutant beasts and ugly things. -------------------------------------------------------------------------------- 23b85b8d87 | Edgar A. Bering IV | 2021-06-26 12:04:23 +0300 docs: changelog typo -------------------------------------------------------------------------------- 2746e35aca | Edgar A. Bering IV | 2021-06-25 22:18:29 +0300 docs: changelog through 0.27-a0-1333-gcdc07c3a8f -------------------------------------------------------------------------------- cdc07c3a8f | Nicholas Feinberg | 2021-06-25 11:18:36 -0700 Unlock dangerous quantities of punny vaults Add nicolae to the dev team! Well deserved and welcome :) -------------------------------------------------------------------------------- 84bddb5ca7 | advil | 2021-06-24 19:41:31 -0400 fix: proper range check for poisonous vapours Also, move it into spl-damage.cc since as of 3f0e5c0cca2eb01 there are no clouds involved. Possibly this can just be zappified to simplify it further? This fixes https://crawl.develz.org/mantis/view.php?id=12502 -------------------------------------------------------------------------------- 60ef6b6952 | advil | 2021-06-24 17:41:10 -0400 fix: better BVC auto-targeting This keeps BVC from repeatedly targeting already-clutched enemies. Resolves #1956 -------------------------------------------------------------------------------- c68dd95e36 | advil | 2021-06-24 17:28:41 -0400 feat: handle @Qn inscriptions directly in quiver menu Before (after newquivers) these were only usable by going into the item submenu. This will work even for items that don't show up in this menu by default, though as of yet there is no way to inscribe non-items. (This was reported somewhere by someone, but I can't figure out who or where to credit, sorry.) -------------------------------------------------------------------------------- 14410a1de8 | advil | 2021-06-24 14:02:36 -0400 feat: hide dj MP bar in webtiles -------------------------------------------------------------------------------- a61f464a61 | advil | 2021-06-24 13:48:10 -0400 feat: hide dj MP bar in console/local tiles This is kind of ugly because as it stands, y positions for certain hud elements are calculated in multiple places. (In fact, this calculation was already buggy.) But doing this "right" involves a lot of high-effort refactoring and testing, or at least more than I'm going to do right now. However, I have at least renamed the infamous yhack to something more interpretable and changed its logic accordingly. -------------------------------------------------------------------------------- 9601c94f4e | advil | 2021-06-24 12:48:51 -0400 feat: arrow key navigation for macros menu More incremental improvements for the macro menu. The immediate goal of this is to allow more easily selecting existing macros for editing that have hotkeys that menu code would otherwise intercept. Despite the limited application of this change, the commit is a fairly comprehensive rewrite of hover code that is tested to work on any single-selection menu. I may activate it more generally in the future as I think it's a net usability improvement in all sorts of menus (though I expect a certain amount of grumbling because it is *change*). However, it needs to be extended to handle multiselection before this is fully viable. As part of this change, I needed to rewrite webtiles hover code to use a regular css class rather than the :hover pseudo-class; unfortunately one cannot interact programmatically with :hover. There *should* be no user-visible change resulting from this but this was more complicated than I had hoped, so we'll see. The webtiles client-server communication about hover is still somewhat dubious here. -------------------------------------------------------------------------------- 66ddcf376d | advil | 2021-06-24 12:48:51 -0400 fix: set last_visible correctly in webtiles menus The for-loop here for setting last visible only checks the case where i-1 is the last visible element, so when the last element is visible, it didn't do anything, leaving last_visible set to 0. Instead, make the fallthrough case already the last element in the list. As far as I can tell this should work even on very strange bounding boxes. As a practical matter, this will prevent menus from wrapping to the beginning on pgdn in webtiles, which they apparently have been doing for a while. We'll see how used to this players are. Other clients have a MF_WRAP setting for when menus are supposed to have this behavior, but this doesn't seem to be implemented in webtiles. This commit also fixes a bunch of js exceptions on corner cases with empty menus. -------------------------------------------------------------------------------- 58a489ad9e | Nicholas Feinberg | 2021-06-23 08:45:34 -0700 Remove local dj mp display Webtiles is harder so I'm leaving that to someone else, sorry! -------------------------------------------------------------------------------- e0d8e047f6 | advil | 2021-06-22 10:08:50 -0400 feat: better integrate the macro menu Before, there was a pre-menu to select the kind of binding to edit before entering the edit menu. After this change you are dropped directly into macro edit mode, and can use `!` to switch to keybind editing. This is one fewer keystroke for macros, the same number of keystrokes for regular keybinds, and extra keystrokes for the obscure keybind modes. I've also slightly hidden the details of keybinds from the first view, because in almost all circumstances I don't think players want to edit these in-game, and in almost all circumstances, macros are a better choice than keybinds for people who don't know what they are doing. Still lots of further improvements to be made here. The editing itself should be moved onto the same screen as the menu, and I think this menu would also be more convenient if arrows selected (but unfortunately the Menu class doesn't support this at all, as far as I know). -------------------------------------------------------------------------------- 4214377f51 | gammafunk | 2021-06-22 03:50:54 -0500 Adjust spawns in a vault (dilly) The vault nicolae_shoals_spring_well_temple places about 7.5 water nymphs on average, in addition to two well springs, which is pretty extreme. The upper-limit of what vaults can place given extreme and rare RNG results is allowed to be ridiculous, sometimes worse than branch endings and potentially leading the player to abandon a level. However unless the vault is intended to be an extreme challenge, which often means down-weighting or runed door/transporter vault, the average case should be more reasonable. This commit adjusts the vault to only place 3 water nymphs on-average and adjust the well spring placement from guaranteed 2 to place 1 to 3 with an average of two. -------------------------------------------------------------------------------- fdffb62a71 | Nicholas Feinberg | 2021-06-21 22:30:07 -0700 Mostly remove resilience This basically just confused a lot of people over the years. It's OK, you can say 'health' when you mean 'health'. We already use it in a few places! It's more flavourful for stuff like Borg's anyway - very Raistlin Majere. Skeletons and zombies are a bit beyond the whole 'health' thing, and I think resilience is less confusing for them anyway, so they can keep it. Ditto the reference on the amulet of vitality - that one's very straightforward. -------------------------------------------------------------------------------- d358eaa319 | Kate | 2021-06-21 21:18:35 +0100 Prevent repeating Nemelex Stack Five and Triple Draw (#12607) Repeating abilities with submenus causes weird behaviour. -------------------------------------------------------------------------------- a591dbc05d | Kate | 2021-06-21 21:16:34 +0100 Fix command repeat handling for some unrepeatable actions Various actions couldn't be repeated with 0, but could be with `. Prevent these more consistently, and fix a case where aborting out of an attempt to repeat rampaging movement would result in a partial move still taking place. -------------------------------------------------------------------------------- eec4fb4e21 | Kate | 2021-06-21 04:12:14 +0100 Refactor Kiku's Necronomicon gift, re-add Haunt With Haunt being moved out of the Necronomicon it had become impossible for Kiku to gift knowledge of it. Instead of gifting a physical Necronomicon, make Kiku add its spells directly to the library as with the earlier spell gifts, and add Haunt back to the list of included spells. -------------------------------------------------------------------------------- 0c770c2c28 | Kate | 2021-06-21 04:12:02 +0100 Refactor Kiku book gifts Instead of gifting randbooks, just gift the spell knowledge directly, since the spell library now supports this. Saves some weirdness with not being able to receive spell gifts over water/lava. -------------------------------------------------------------------------------- d1140b374c | Kate | 2021-06-20 19:58:53 +0100 Fix braces -------------------------------------------------------------------------------- 0783df26cf | Kate | 2021-06-20 19:58:12 +0100 Fix a newly-introduced melee crash Don't bail out of combat and crash after a fire vortex attacks and destroys itself. -------------------------------------------------------------------------------- b2afe90b7e | Kate | 2021-06-20 18:17:23 +0100 Clean up monsters that die due to acid retaliation damage Fixes an issue with invalid dead spectral weapons when they die to acid retaliation damage, hopefully fixes a related crash, and probably doesn't break anything else? -------------------------------------------------------------------------------- dfdbaa49b7 | Kate | 2021-06-20 18:06:43 +0100 Don't allow GDR below 0% (For wizmode display purposes.) -------------------------------------------------------------------------------- 2e558cd5dc | Kate | 2021-06-20 17:04:22 +0100 Fix an information leak with LOS attack spells (#12605) Don't consider invisible creatures as valid affected targets if you can't see them. -------------------------------------------------------------------------------- 5cdb2b3542 | Kate | 2021-06-18 22:20:48 +0100 Fix tag_upgrade compilation -------------------------------------------------------------------------------- 670f4b6da9 | Kate | 2021-06-18 22:17:03 +0100 Don't try and place djinn corpses in nicolae_arrival_memento_mori But do place palentonga corpses since those do exist. -------------------------------------------------------------------------------- 4af0e254da | Kate | 2021-06-18 21:38:09 +0100 Update some monsters-behind-glass vaults To use accurate lists of player species monsters. -------------------------------------------------------------------------------- 830f50283a | Kate | 2021-06-18 21:22:54 +0100 Add dummy monsters for player djinn -------------------------------------------------------------------------------- c08437e49b | Kate | 2021-06-18 04:25:08 +0100 Replace Animate Skeleton with Call Imp in the tutorial Since summons should function better than raised undead due to the relatively quick expiry timer on the skeletons. -------------------------------------------------------------------------------- 1b31d702ef | Kate | 2021-06-18 04:12:36 +0100 Update tutorial some more (CanOfWorms) -------------------------------------------------------------------------------- fa6c21d646 | Kate | 2021-06-18 01:32:07 +0100 Fix Poisonous Vapours not working on rPois- monsters (Ham) -------------------------------------------------------------------------------- f33ce2d7c7 | Kate | 2021-06-17 22:54:45 +0100 Fix a tutorial/hints mode crash -------------------------------------------------------------------------------- 0d0f3e58c5 | Kate | 2021-06-17 22:49:50 +0100 Update tutorial Remove some more unused tutorial pads, replace a redefined monster with a real one, and replace the ratskin cloak so as not to give the player allies in an early lesson before allies are deliberately introduced in the later spellcasting tutorial. -------------------------------------------------------------------------------- 3f0e5c0cca | Kate | 2021-06-17 20:00:08 +0100 Rework Poisonous Vapours not to create clouds Mechanically, Poisonous Vapours is intended to apply a small amount of smite-targeted poison, but the fact that it was implemented by using a cloud ended up making it unnecessarily complicated. Almost all of the time the cloud would dissipate immediately, but at particularly high power it would stick around for a brief while, and using a cloud also prevented using it against targets that were already in clouds. Instead make it just directly apply poison, with the number of stacks applied scaling up at high power (to compensate for the fact that the cloud itself could previously deal some direct damage). -------------------------------------------------------------------------------- 7736ffe575 | Kate | 2021-06-17 17:27:55 +0100 Remove an unused tutorial pad -------------------------------------------------------------------------------- 128193abf8 | advil | 2021-06-16 10:19:54 -0400 fix: don't mark ash-cursed items as useless In various cases the player can put on items whose base ego is useless (e.g. faith), and then curse them, in which case they are no longer useless. The melding logic here relies on the rest of the code being right, which it probably isn't, but it looked ok in the cases I tested. -------------------------------------------------------------------------------- 08e866c54a | advil | 2021-06-16 10:19:54 -0400 fix: fully inactivate faith for ashenzari (u/Imaginationably) c9f47ef48ce0 disabled the piety gain effect of faith and marked it useless, but did not turn of the on-remove effect or messaging. (Possibly this code would be cleaner if all of these things were tied to uselessness, but I'm not sure enough how the other gods work to change that.) It's still possible to wear useless items (and in this case, even curse them -- in fact this maybe means that ash followers should collect useless amulets until they have something better to curse? Haven't played enough newash to know if this is a good idea.) -------------------------------------------------------------------------------- 1ab19c6527 | Nicholas Feinberg | 2021-06-15 22:22:12 -0700 Partially fix chain lightning death messages Still broken in a couple of ways, but this is all I've got in me for tonight. -------------------------------------------------------------------------------- 003aadc33b | Nicholas Feinberg | 2021-06-15 22:13:48 -0700 Display chain lightning damage in monster (again) -------------------------------------------------------------------------------- 5c463d0a3f | Nicholas Feinberg | 2021-06-15 22:09:42 -0700 Fix monster Oops -------------------------------------------------------------------------------- 8ece459b43 | Nicholas Feinberg | 2021-06-15 14:50:06 -0700 Add a fairly silly splash (ArbitUHHH) Much debate over this one, but the chicken won out in the end. -------------------------------------------------------------------------------- 0306a414db | advil | 2021-06-15 13:55:18 -0400 fix: remove chain lightning delays with no animations (Yermak) This extends the refresh option introduced in e645bd13c135 to be usable as a beam option, for callers who are not separating drawing and damage. It then applies it to chain lightning, fixing the lag when animations are off; this commit should also reduce the number of redraws with animations on (which is a factor in lag online). As one of the TODO notes says, I am still not entirely sure why there should still by default be an update per cell when draw_delay == 0, but this is preserving old behavior from before e645bd13c135, and I would need to do more investigation before simplifying. -------------------------------------------------------------------------------- 42bb9d4d07 | gammafunk | 2021-06-15 09:30:55 -0500 Fix a shop vault depth (nicolae) -------------------------------------------------------------------------------- 4180522d9c | gammafunk | 2021-06-15 09:19:36 -0500 Some shop vaults from nicolae (12593) No real changes from the original submission aside from a couple very minor bug fixes. -------------------------------------------------------------------------------- 165cb48cdd | gammafunk | 2021-06-15 09:14:06 -0500 Refactor and expand objstat statistics This commit reworks most of the internal data handling of objstat to be more consistent and to allow tracking of additional data. All item categories now track additional categories of whether the item was in a vault, held by a monster, or in a shop. Aspects like enchant/charges and brands are likewise tracked within these new categories. We also now track statistics for spells, as described further below. Artefact books are moved over to the spellbook tracking file, treating level artefact books and theme artefact books as two distinct book types. Additionally manuals now track by their associated skill instead of all together. Finally, objstat no longer produces redundant listings for "All Levels" when only one branch is tabulated, since that data is already in the branch summary. For items, the tracking categories of artefact, vault, shop, and held by monster are independent of each other. So one can't determine the number of items both held by a monster and in a vault, for example; tracking all combinations of these aspects would lead to too many statistics of marginal interest. Exception to this are the fact that an item can't be both held by a monster and in a shop and that all shop items are vault items, since shops place through vaults. Subtracting the values in these categories from the overall value will always give the count for the negation of that category. For example, subtracting NumArte from Num gives the number of non-artefact items. I've removed fields like "NumOrd" that can be calculated in this way to reduce the number of output statistics; these calculations can be easily made by a spreadsheet, once the data is imported. For spell tracking, we track overall counts by spell and within the new categories mentioned above, including artefact for spells in artefact spellbooks. Additionally we have "Chance" fields for spells in all categories. The Chance field gives the percentage of the time the spell was seen on a given level. This can be useful for determining the chance a spell would be seen by some depth, for example. Calculation of Chance fields could be extended to other item categories like Misc, Staves, or even all items, if that's later deemed useful. Internally it now uses map<> instead of vector<> for indexing statistics, which simplifies statistical initialization, since we can rely on default initialization of zero for most statistics. I've made these maps use enum types keys where that's possible, but in some cases like item sub_type we still need to use int keys, since item sub_types don't share a common enum type. -------------------------------------------------------------------------------- eefcff550b | Nicholas Feinberg | 2021-06-14 17:31:47 -0700 Rewrite new game spell setup In preparation for future changes, don't give new characters a spellbook and then immediately destroy it. Instead, give them a specific list of spells. -------------------------------------------------------------------------------- 15d3ce7508 | advil | 2021-06-14 09:54:04 -0400 fix: guaranteed source of digging in sprint_mu slime (Nivim) There is no code to remove the walls on TRJ death, and it is not easy to port the regular game code over. I'm guessing the intent was to break these walls somehow (they are rock, not stone). The sprint does place a source of digging, just not in slime, possibly because it would have been eaten. However, that is no longer an issue, so I'm just adding a guaranteed digging wand on the altar. If someone ever implements wall destruction here, remove this. -------------------------------------------------------------------------------- e5723c67b8 | advil | 2021-06-14 09:20:01 -0400 fix: prevent closets in `heliophobic_arrival_ceremonial_halls` Extends the fix in #1984. The biggest thing this vault needed was a `transparent` tag; I've also added the pathing from #1981 as it will help it place, and in addition to that added explicit @ tags. It could be good to randomize the outer pathing a bit, but let's keep it simple for now. Resolves #1973 Resolves #1984 -------------------------------------------------------------------------------- 0782e7eb64 | DreamDust | 2021-06-14 09:20:01 -0400 Fix: lemuel_upstairs_altar [Committer's note: ensure that this places where a downstairs can place] Resolves #1981 -------------------------------------------------------------------------------- ca74d27db6 | hellmonk3 | 2021-06-13 22:16:23 -0400 Merge pull request #1972 from hellmonk3/rollingrocks New spider minivault -------------------------------------------------------------------------------- fa2398d640 | hellmonk3 | 2021-06-13 21:39:57 -0400 Merge pull request #1971 from hellmonk3/zotshop New Zot:5 shop vault -------------------------------------------------------------------------------- 992921d2c4 | hellmonk | 2021-06-13 21:28:55 -0400 Return blade hands to level 5 While it's unlikely to return to the TM start book, blade hands works best at a lower level, where the option to cast it in heavy armour is more appealing. -------------------------------------------------------------------------------- 6cae3acc97 | Kate | 2021-06-14 00:22:28 +0100 Adjust Wereblood description -------------------------------------------------------------------------------- e233d83751 | Nicholas Feinberg | 2021-06-12 15:39:18 -0700 Add a Werewolf quote (Ge0ff, 12601) -------------------------------------------------------------------------------- 9d2d252d84 | Kate | 2021-06-12 19:33:39 +0100 Fix pluralisation Apparently both are valid, but "vortices" is what's currently used elsewhere. -------------------------------------------------------------------------------- 1a68546ab8 | advil | 2021-06-12 13:59:59 -0400 fix: remove some ancient mac debugging code This code originates from pre-version-controlled dcss or earlier. I can only imagine that at some point <2005 things were weird with intentional crash signals in MacOS to the point where accessing *nullptr seemed like a good idea, but on a modern mac this has been increasingly unreliable, and on an M1 / big sur device, it freezes with 100% cpu before timing out or needing kill -9, at least 2/3 of the time. As far as I can tell, sending abort works fine and doesn't do this. We'll see if this generalizes to other devices. -------------------------------------------------------------------------------- 6cbc8dfb29 | Nicholas Feinberg | 2021-06-11 21:26:29 -0700 Send DCSS straight to hell Welcome to the dev team, hellmonk! :) -------------------------------------------------------------------------------- 3808f8b1c9 | advil | 2021-06-11 15:42:53 -0400 fix: enable autofight for blinkbolt -------------------------------------------------------------------------------- 4e44252f3f | advil | 2021-06-11 14:55:34 -0400 refactor: better organization for animated objects take 2 These are still a bit all over the place, but this at least gives a slightly more unified API and uses it; small UI cleanups happened as a consequence, e.g. better labeling in ctrl-x, animated armour gets the dancing icon (I realize it isn't technically "dancing" but it's still useful I think). Hopefully haven't missed too much here. This reverts commit f925c23bd1a27674721db3c623a4d332f2cfaff7. -------------------------------------------------------------------------------- f925c23bd1 | advil | 2021-06-11 14:17:03 -0400 Revert "refactor: slightly better organization for animated objects" (fails to build on tiles, oops) This reverts commit 201ea1cf866eb8e85181b8f30b0fa74a58a99de0. -------------------------------------------------------------------------------- 201ea1cf86 | advil | 2021-06-11 13:55:32 -0400 refactor: slightly better organization for animated objects These are still a bit all over the place, but this at least gives a slightly more unified API and uses it; small UI cleanups happened as a consequence. Hopefully haven't missed too much here. -------------------------------------------------------------------------------- ec92ba881d | nlavsky | 2021-06-11 01:50:31 +0100 Don't put Refrigeration users under penance for tracer checks (#1978) After 73eefd5d, Ozocubu's Refrigeration users can get under penance for opening the z? or Q menus or just for having the spell on the quiver. It happens if they worship a god who cares about allies and if there are allies nearby. Fix this by skipping conducts when doing tracer checks. -------------------------------------------------------------------------------- 7c8ad2e407 | advil | 2021-06-10 17:09:11 -0400 fix: remove accidental debug messaging -------------------------------------------------------------------------------- 5a9c36edca | advil | 2021-06-10 17:05:35 -0400 build: reduce iterations for uniques testing This is one of the slower tests, and for something testing a basically unchanging mechanism, doing all of these iterations every time on CI doesn't seem to accomplish much to me. -------------------------------------------------------------------------------- 10283c2238 | advil | 2021-06-10 15:13:23 -0400 feat: tweak polar vortex glyph colours It's possible this is overcomplicating things, as it may make it slightly harder to identify terrain. However, the glyph colours were inconsistent with the tile colours, and also not very on-theme for how ice is usually depicted on console. (Of course, if Tornado had never existed, this might be less of an issue.) I ended up deciding that e.g. just using glaciate glyph colours didn't really work, it was too ugly, so this uses a bit more randomness for one of the phases to add some more subtle console ice colouring in. One phase is always stable, to prevent complete chaos. -------------------------------------------------------------------------------- 5d3a65c723 | advil | 2021-06-10 14:23:25 -0400 fix: more vortex removal for CI -------------------------------------------------------------------------------- dcd9d5d9b8 | advil | 2021-06-10 14:12:34 -0400 fix: remove an ENCH_VORTEX reference for CI Looks like it is safe to just remove this? -------------------------------------------------------------------------------- 90a9cae496 | advil | 2021-06-10 13:54:04 -0400 fix: get rid of "unable to find exits" error in bounce.lua test Tagging this with no_exits simply skips the placement code that generates this error. -------------------------------------------------------------------------------- 85dd5f356d | advil | 2021-06-10 13:54:04 -0400 build: shorten mut_species.lua test This is one of the slowest tests, and it has been a long time since it actually found anything; I think we can do with fewer iterations. -------------------------------------------------------------------------------- 738ad7bf98 | advil | 2021-06-10 13:54:04 -0400 fix: revert a debugging change This was for debugging itemspecs, but accidentally got committed in 1d930f0793d61. -------------------------------------------------------------------------------- e710ad149d | advil | 2021-06-10 13:54:04 -0400 fix: improve crashes for unrecoverable builder lua errors This isn't intended to be a full solution for lua errors at levelgen time, but tries to make the crash process smoother, both in terms of messaging, and efficiency. The builder for each map tries to run vault lua 25 times, and tries to build a level 50 times before bailing entirely with a crash. So if a vault has e.g. a broken itemspec that produces a lua error during levelgen, this can be repeated at least 25 times, and for wizmode force generation (&P), 25 * 50 times. The vast majority of errors of this category (though not all) will be deterministic, so there's no point to retries. In cases like this, on a debug build the lag for the crash is also pretty noticeable. So, implement some stuff to immediately bail (for &P) or veto (for regular levelgen). In addition, percolate the actual lua error up the messaging chain a bit better, so the it now is actuall visible directly from the command line. (It's probably a bit *too* redundantly printed now, though.) Implementation: this commit adds a state variable to signal that an error was fatal, and handling for it to improve the messaging and skip all these retries. This may be something that would be more naturally done with exceptions, but it's entirely possible that these exceptions would need to dance around the lua layer (which can't have exceptions thrown across it, see 091e5a1), and I don't want to mess with this. For regular levelgen, this does throw a veto exception, but from a place where that should be safe to do. -------------------------------------------------------------------------------- 6f2aa7e302 | Nicholas Feinberg | 2021-06-10 10:14:22 -0700 Let Storm Form go mano-e-mano (engine, Reeces) Oversight! Also sneakily revert the EV bonus from the last change. -------------------------------------------------------------------------------- 1b1a975c3d | Nicholas Feinberg | 2021-06-10 09:08:21 -0700 Rework Air Elementals Air elementals' use of Twister (a lesser Tornado/Polar Vortex) was intended to give them a more interesting gimmick than their old ones (submerging in air). However, it was quite complex, and tended to cause quite a lot of collateral damage to their own allies. That could be fun sometimes, but it could also result in victories that felt unearned. Instead, let's try a new spell: Stunning Burst, a weak electrical beam attack that can inflict a very brief (1 turn) paralysis on hit. rElec can resist it, as can dodging, stasis, or controlling line of fire, but Will has no effect. Let's see how higher-frequency, lower-impact Para feels. -------------------------------------------------------------------------------- 534494da46 | advil | 2021-06-10 09:30:55 -0400 fix: prevent save corruption on &P crashes This fixes a couple of ways that a save could become unloadable when it crashes with &P: (i) the force props didn't get cleared, so the game would try to regenerate exactly the failing levelgen process all over again (which might be ok for some crashes, but not e.g. a bad itemspec), and (ii) placeinfo would get corrupted in a way that doesn't get fixed up (now it gets corrupted in a way that does). -------------------------------------------------------------------------------- 27faaac778 | gammafunk | 2021-06-10 04:14:35 -0500 Checkwhite -------------------------------------------------------------------------------- de6c002c37 | gammafunk | 2021-06-10 04:13:51 -0500 Some Shoals vaults from nicolae (12593) A set of 7 decor vaults and a set of 18 monster vaults. Minor edits have been made to the original submissions to follow syntax ordering style and to reglyph monsters to use number glyphs where possible. Remove patrolling tag for vaults that use in-branch monsters and add it in other cases where out-of-branch monsters are placed in vaults with special themes. More substantive edits to a couple vaults described below: nicolae_shoals_hidden_pirate_stash: Make the possible rapier weapon loot be good_item and make the scroll 50/50 for magic mapping or any scroll, instead of having a weight of 4 for the latter. nicolae_shoals_pincushion_passage: Thin out the monster a count, turning a 2/3 chance into a 1/3 chance, since otherwise it's a bit high for placing so many upper tier monsters. Could go either way on this change, but a bit fewer monsters felt right. nicolae_shoals_raging_river: Use elemental wellsprings instead of a custom vault define, which was a permanently berserk water elemental. A cute idea, but ultimately not quite interesting enough to warrant a custom definition, and I think what wellsprings can do is ultimately more interesting. -------------------------------------------------------------------------------- a7538b3203 | gammafunk | 2021-06-10 04:13:51 -0500 Some cleanups for Shoals.des Fix a section header and reindent and reorder a bunch of lines in some vaults. -------------------------------------------------------------------------------- c40782c2da | gammafunk | 2021-06-10 04:13:51 -0500 A quote for scrolls of identification (nicolae, 12593) -------------------------------------------------------------------------------- ced786f65e | Nicholas Feinberg | 2021-06-09 19:24:13 -0700 Don't claim Okawaru cares about your friends (Ge0ff) Since, as of 08c3841fb2f98d06ca037a69b54f3ed05b193e84, Oka doesn't. -------------------------------------------------------------------------------- 0aef527cbc | Nicholas Feinberg | 2021-06-09 19:20:16 -0700 Storm Form tweaks Make it nonliving (not having this was an oversight) and double the EV bonus to improve defenses a bit. -------------------------------------------------------------------------------- 64d35965e2 | Nicholas Feinberg | 2021-06-09 19:20:16 -0700 Remove Absolute Zero Absolute Zero was a spectacular, memorable effect: instantly turn the closest enemy into a block of ice! Unfortunately, in play, it ended up feeling worse than it sounded. The targeting constraints were a bit less limiting than had been intended, and many otherwise dramatic fights against powerful foes felt like anticlimaxes. It's still not entirely clear whether the spell was "too powerful" relative to the investment required to cast it, but it didn't *feel* good. There have been many suggestions for improving Absolute Zero - for example, adding a delay to the effect and making it a L9 Poison (!!) spell. When we want to experiment with those, we can revert this commit. For now, though, let's toss it. (A small part of this change [targeter removal] is in the previous commit - sorry! Don't miss that if you revert this.) -------------------------------------------------------------------------------- ff5298d5c3 | Nicholas Feinberg | 2021-06-09 19:20:16 -0700 Move Chain Lightning to level 9 After moving Tornado to Ice as Polar Vortex, Air needed a new level 9 spell. Chain Lightning is a spectacular and fun effect, but the current version is a bit messy and hard to understand - recursive arcs result in notoriously mysterious damage numbers ("4-264"). This seemed like a great opportunity to fix both. The new, level 9 Chain Lightning is intended to be an extremely powerful, but situation-dependent, effect. It does massive damage to the nearest target (partially ignoring both rElec and AC), and then arcs from that target outward, dealing somewhat reduced damage on subsequent arcs. With the right setup, it can spread across the entire screen, or it can just hit a few enemies on one side, depending on how you're positioned. It's intended to be competitive with Fire Storm (and thus keeps the Conjuration school), but to play very differently. Monster Chain Lightning is also changed to match. Nikola now does 3d17 at max range and 3d45 at point blank (again, partially ignoring AC and rElec), which should make him a more comprehensible and interesting encounter about managing distance, rather than just quaffing a resist potion or tricking him into walking near a plant. We'll see how that works out! -------------------------------------------------------------------------------- 7141f643d0 | Nicholas Feinberg | 2021-06-09 19:20:10 -0700 Shift: Tornado (L9 Air) -> Polar Vortex (L9 Ice) Ice, as a school, is intended to be 'diffuse' and 'subtle', With a few exceptions (i.e. Freeze), it tends to be best at dealing damage gradually to many enemies. That provides it with a distinctive playstyle, and Tornado fits that playstyle perfectly. As such, we'll shift Tornado to be the new level 9 Ice spell. Subsequent commits will discuss the removal of Absolute Zero and the new level 9 Air spell further. Functionally, the main change here is that Polar Vortex does 33% more damage (3 more dice) but is 40% resistable by rC, as with Hailstorm. Otherwise, it's the same spell. -------------------------------------------------------------------------------- 4220d81b6a | Nicholas Feinberg | 2021-06-09 18:41:10 -0700 Move Freezing Cloud to level 5 Since clouds now dissipate out of LOS and Ozocubu's Refrigeration now deals heavy damae, it's hard to justify the investment in Freezing Cloud as a 3-school spell. Move it to level 5 to make it a bit more viable, and to add symmetry with Bolt of Magma as a L5 Fire/Earth/Cj. -------------------------------------------------------------------------------- a17f9a2f5c | advil | 2021-06-09 20:43:40 -0400 feat: add basic tele closet detection to placement.lua This code tries to find spaces that are isolated, contain no stairs or hatches, and aren't marked with the no_tele_into KPROP. There are some things where it gets false positives, e.g. spaces completely filled by monsters, feature mimics, probably more. Reuses existing connectivity checking code. -------------------------------------------------------------------------------- 1d930f0793 | advil | 2021-06-09 20:42:27 -0400 fix: a batch of tele closet fixes Many of these are false positives, in the sense that they are tele closets filled by monsters (skipped by the tele code except for wizard teleport). But, they quiet the scripts. -------------------------------------------------------------------------------- 57ac2eb73c | advil | 2021-06-09 12:25:28 -0400 feat: options for resuming placement.lua in the middle This lets you choose where to start by vault name, which is convenient for running large batches of placement checks. I also added an option to limit the number of vaults tested. -------------------------------------------------------------------------------- 7e0d850643 | advil | 2021-06-09 12:24:02 -0400 fix: a batch of vault opacity fixes Detected via the placement.lua script. Not all of these are perfect fixes, and several of these vaults will still trigger vetos under some circumstances. -------------------------------------------------------------------------------- 9baf572ecc | advil | 2021-06-09 11:52:01 -0400 fix: some vault opacity fixes from nicolae This fixes several vaults that could generate isolated regions, including merging the change in snakefix.des in https://crawl.develz.org/mantis/view.php?id=12590 . -------------------------------------------------------------------------------- 940ed4fa31 | advil | 2021-06-08 22:18:09 -0400 fix: expand opaque mask skipping for vault exits Since 080276f, the `@` glyph is never automatically masked as opaque, leading to some connectivity checks for non-transparent vaults that do have exits. However, many vaults with only one exit rely on `+`, `=`, or even ` ` (in the case of floats with no marked exits) being interpreted as an exit as well. Example: library_closet in https://crawl.develz.org/mantis/view.php?id=12591. This commit expands things so that anything that counts as an exit for a vault will not receive an opaque mask unless that glyph is explicitly masked, which will expand connectivity checks by quite a bit. This may over-veto, we'll see, but in my testing seems to work and fixes the issue in 12591 without otherwise disrupting the seed (will need to do some more automated testing). -------------------------------------------------------------------------------- cb30e825f4 | advil | 2021-06-08 22:14:22 -0400 fix: avoid vetoing islands in pf_hell_entry_tar_river Because any `w` tile could turn into `.`, this vault can often generate islands in the corners, which will veto. This tweak adjusts the corners to never convert to land; two of the optional spectral shrikes may place only in the corners. -------------------------------------------------------------------------------- 2a5033c031 | advil | 2021-06-08 21:55:49 -0400 fix: various vault transparency fixes Mostly for new-ish vaults; I'm a bit surprised if these placed. In most cases this is just adjusting the masking. For nemelex_altar_shiori the removal of the transparent tag may be awkward, as it means this will veto unless *both* doors link up, but masking this one would be a pain. -------------------------------------------------------------------------------- e70438ac7b | advil | 2021-06-08 17:02:09 -0400 fix: let `sword_in_stone` not choke on dancing singing sword e7febcc0c011a added singing sword to `sword_in_stone`. However, the dancing weapon spec parsing couldn't handle providing an unrand here, and so the 1/50 condition would just produce a lua error (even if the vault is placing at a depth where the non-dancing one would be used). This commit implements correct spec parsing for unrands, and so lets this vault work as intended. If singing sword is already placed, it places a dancing fallback unrand (which seems to work correctly). -------------------------------------------------------------------------------- 418a8ee560 | Nicholas Feinberg | 2021-06-08 12:36:48 -0700 Make Wereblood heal 1d3 on kill Wereblood is dangerous to use because it draws in more enemies, That's a good tradeoff to discourage players from using it all the time, but to encourage player to use it for some fights, give a small amount of healing on kills so that the player is more likely to be at high enough health to face later enemies. -------------------------------------------------------------------------------- 26df433047 | Nicholas Feinberg | 2021-06-08 12:16:40 -0700 Don't put a level 7 spell in a starting book ??oops -------------------------------------------------------------------------------- 59ac6f31e6 | advil | 2021-06-08 15:00:54 -0400 fix: fix fixes -------------------------------------------------------------------------------- e6c32ae999 | advil | 2021-06-08 14:57:15 -0400 fix: yet more hydraform removal I'm not sure if a straight replacement with storm form in changes is what was intended, but hydra form's presence there was causing crashes. Also removed it from the enum on upgrade. -------------------------------------------------------------------------------- b079ea8264 | advil | 2021-06-08 14:37:09 -0400 build: more fully remove hydraform and hopefully fix CI -------------------------------------------------------------------------------- c590d4a5df | Nicholas Feinberg | 2021-06-08 10:14:49 -0700 Storm Form to level 7 Discourage using it at low spellpower (where it's much less useful) and communicate that it's meant to be a top-tier tmut, comparable to Dragon Form. It becomes castable around 60-70 power now, which feels like a reasonable starting point. -------------------------------------------------------------------------------- 47a774193f | hellmonk | 2021-06-08 09:46:48 -0700 Replace hydra form with storm form Hydra form was intended to be a heavily power-scaling form that made up for its bad defenses with cleaving melee and heal on kill. In practice, it was hard to obtain enough power for hydra form to outdamage to other forms, let alone find situations in which its benefits made up for poor ac and awful evasion. Storm form will attempt to fill the same niche as a lategame form that rewards high spellpower, but hopefully do it a bit better. Storm form melds non-jewelery slots, provides 2 + power / 2.5 base damage elec branded cleaving melee (breakeven post-brand damage with dragon form at 90ish power), 10 + power / 10 AC, retains player size and adds a power / 10 ev bonus, provides flight and relec, and has an activatable "blinkbolt" ability that deals elec damage and blinks the player to the end of its path, but must target a monster and has a cooldown. The new spell is level 6 transmutation/air, which makes spellpower more expensive in terms of exp but does allow easier enhancement. It is probably still very niche, but should be better in its niche. Numbers are open to adjustment. Additionally, it needs cool tiles for the form and ability. -------------------------------------------------------------------------------- 85643e0b18 | hellmonk | 2021-06-08 09:46:48 -0700 Increase ice form's ac power scaling. Ice form became comparatively unattractive due to blade hands buffs in 0.20 and was somewhat niche. Combined with the blade hands nerf, buffing ice form ac somewhat should make it more appealing. AC is unchanged at 0 power and 5 higher at maximum (100) power. -------------------------------------------------------------------------------- ec9bb07eb8 | advil | 2021-06-08 10:07:59 -0400 build: update ci irc information -------------------------------------------------------------------------------- c6a4cbde82 | Nicholas Feinberg | 2021-06-07 20:57:37 -0700 Remove wandering mushroom/toadstool magic Wandering mushrooms were able to path through toadstools so that it wouldn't be annoying when you created a wandering mushroom, prayed on a corpse to get a toadstool, and then got stuck. That logic really isn't need anymore. Reverts b5de9b17133aa . (Sorry, Sage.) -------------------------------------------------------------------------------- 6c7882eca4 | Nicholas Feinberg | 2021-06-07 20:38:23 -0700 Allow silencing rolling charge (engine) Alternative solution would have made 'the rumble of your scales through the stone' (or whatever) alert victims. If this is the next high-level stabbing tech then maybe I'll do something about it, who knows. -------------------------------------------------------------------------------- fc7c993222 | Kate | 2021-06-07 17:02:01 +0100 Adjust elemental wellsprings Their self-damage on cast caused them to abjure their own summons, as well as being poorly documented as a special-case on top of a spell that doesn't normally create summons. Instead give them Summon Water Elementals as a normal spell and remove their self-damage on cast as well as their fast regen. Also give them a radius 1 water aura like water nymphs, rather than just affecting the tile underneath them. -------------------------------------------------------------------------------- 819d820658 | Kate | 2021-06-07 16:11:45 +0100 Shorten Gozag's distraction message It was a lot wordier than necessary for something that's often displayed multiple times a turn. The "dreaming of imaginary riches" part was intended to clarify that it doesn't require actual gold to be present on the floor or in inventory, but the new "golden aura" wording now covers that anyway. -------------------------------------------------------------------------------- fd60fd639a | Aliscans | 2021-06-06 18:33:09 -0700 Fix an error message when creating a malformed dancing/spectral weapon. Previously, if you using the wizard mode create monster command with "dancing weapon; stone" on a build with asserts compiled in, the game crashed with "ASSERT(wpn) in 'dungeon.cc' at line 5159 failed.". The same happens for any non-weapon, or even "nothing", and the same if a vault was created which included such a monster. With this change, it prints "Monster 'dancing weapon' requires a weapon." instead in wizard mode, and the game cannot start if any vault contains a monster like that. -------------------------------------------------------------------------------- 90fd9eff7f | l33t-d00d | 2021-06-06 18:31:04 -0700 Modify Grammar Sceptre of Torment Minor grammatical modification to the message when wielding the Sceptre of Torment. "Terribly searing pain" (adverb modifying adjective describing noun) becomes "Terrible, searing pain" (compound adjective describing noun). Both are correct, however, the latter flows and sounds better. -------------------------------------------------------------------------------- a8cc5da48b | Nikolai Lavsky | 2021-06-06 18:29:52 -0700 Tweak Ozocubu's Refrigeration usefulness check Currently, the UI incorrectly tells the player that the spell has valid targets when there are only plants, butterflies, or player allies nearby. This commit changes Refrigeration's usefulness check, so the spell is grayed out on the quiver if there are no hostile monsters in LOS. [Committer's note: I rewrote this to be a bit simpler.] Closes #1968. -------------------------------------------------------------------------------- 8976fa19b5 | dilly | 2021-06-06 18:16:24 -0700 WJC Sifu names change Deng Ai, Jiang Wei, Zhang Bao, Sun Luban(especially this one) are not appropriate for the masters of martial arts council. -------------------------------------------------------------------------------- 5437b2cd39 | hellmonk | 2021-06-06 18:15:50 -0700 Change the gozag gold distraction message. The previous messages implied that nearby gold piles or the player's carried gold caused the effect, which was confusing. -------------------------------------------------------------------------------- e8f9bb252e | Nicholas Feinberg | 2021-06-06 18:13:04 -0700 Don't let animated armour open doors They have no hands! -------------------------------------------------------------------------------- 8da17f8a6b | Nicholas Feinberg | 2021-06-06 18:12:31 -0700 Remove unrand animated armour crash Don't crash when saving if an animated armour drawn from an unrand is walking around. -------------------------------------------------------------------------------- ef78505d0f | Nicholas Feinberg | 2021-06-06 17:45:59 -0700 Fix Vampiric Drain messaging (Yermak, 12597) And do a bit of refactoring while I'm in the area. -------------------------------------------------------------------------------- 54dba09ff7 | Nicholas Feinberg | 2021-06-06 10:23:26 -0700 Remove Invis range listing (Undo) Misleading since 6385558a29ec6c . -------------------------------------------------------------------------------- 958d993ae5 | gammafunk | 2021-06-05 22:33:28 -0500 Update the history section of the manual I've rewritten the history section to hopefully better capture the origins of Linley's Dungeon Crawl and its progression to DCSS. Mention Moria instead of Angband, as the former is what Linley actually gave as his inspiration: "Crawl started out in about 1995 when, having played PCHack and Moria, I managed to get hold of NetHack 3.1.3. Although I liked the randomness and the humour of it, there were some things I really wanted to fix - the targetting system, for example - and I thought parts of it, like spellcasting, could be made much more interesting (NetHack still has very few spells which weren't wand/potion/scroll effects in Rogue). So I dusted off my old Turbo C++ box and set about teaching myself C, with only a rudimentary knowledge of Commodore 64 BASIC to get me started (I wasn't connected to the internet in those days)." (From https://web.archive.org/web/20060424060820/http://tvilsom.org/roguelike/50.html) Mention Hack instead of PCHack as the latter is a direct port of Hack, and curious readers will have an easier time finding info on the original game; I certainly did! The mention of traditional RPGs, specifically Ultima IV, is hopefully interesting to people who didn't realize that PC RPGs were also an direct inspiration, particularly the limited LOS/play area of a large map seen in games like Ultima IV. Moria does already have a similar play area compared to Crawl, but Linley highlighted the influence of PC RPGs aesthetics like of Ultima in a couple of interviews. Sadly I'm only able to find one online reference where he directly mentions them: httpe://quote-un-quote.tumblr.com/post/2178789666/interview-with-shmup-legend-li nley-henzell Hopefully this addition to the narrative won't be seen as unreliable original research! Internet archaeologists reading this who find additional sources, please send them my way. I've also moved the bit about Wizard's Castle and the Orb of Zot into this first paragraph. For describing the transition from Linley as lead developer to Brent Ross, to the founding of DCSS, I've cleaned up the timeline and mentioned the two project founders, Darshan Shaligram (aka greensnark) and Erik Piper, by name. I feel it's important to highlight their very important efforts in getting DCSS started and include some basic details about that from greensnark's excellent writeup, which I've also linked. Hopefully this new history section gives a clearer picture of how the project progressed. It's possible that we could describe the subsequent "eras" of DCSS development in this section, but that's arguably even more difficult to sort out. We could highlight the addition of major features like Tiles and WebTiles, perhaps some content milestones and notable fundamental changes. I'll leave that for a future writer, after further discussion. -------------------------------------------------------------------------------- 3745823196 | gammafunk | 2021-06-05 22:33:28 -0500 Update IRC and community information Now that we've completed the move to Libera IRC from Freenode, update all references to that network and the appropriate channels. I took the liberty of updating two very minor source comments in cc/DES files to refer to conversations as being on "IRC" instead of "##crawl", so anyone reading them without pior knowledge of the old channel won't be confused. I've also updated the Overview and section of the manual to refer primarily to the community resource listing on http://crawl.develz.org instead of just listing IRC. I've added a "Contact and community information" heading to the "License, contact, history" section and put the existing community info under this heading. I've also added the DCSS subreddit to the list of community resources and adjusted the language to be applicable to both it and Discord. I've updated the IRC info to mention #crawl-dev for development. History is moved to its its own heading and will be updated in a subsequent commit. For Hints and FAQs, again refer to the website for community resources instead of just listing IRC, and update IRC listing for hints in other languages. Ideally these hints would instead refer to the website, but that would need work by translators. I've also referenced the github issue tracker over mantis in a couple places where only mantis was mentioned and referring to both would be awkward. Possibly we need to consistently mention only the github tracker and only put information about mantis in somewhere like the contributor's guide. -------------------------------------------------------------------------------- 8a41f320e8 | Nicholas Feinberg | 2021-06-04 20:09:06 -0700 Nerf peacekeeper bands in Vaults Drop them from 2-3 pals to 1-2. Peacekeepers are supposed to be top-tier Vaults threats, but not mega-top-tier. -------------------------------------------------------------------------------- e08c5e17fd | Nicholas Feinberg | 2021-06-04 18:12:16 -0700 Make the Amulet of the Air enhance air (hellmonk) Why not? Remove the +5 EV to avoid clutter. (Isn't rMsl enough?) -------------------------------------------------------------------------------- 08c3841fb2 | Nicholas Feinberg | 2021-06-04 18:04:39 -0700 Remove Okawaru's friend conduct It had little actual impact on gameplay and little flavour - mostly it was an occasional surprising annoyance. I think there's room here for a much more interesting, stronger anti-ally conduct, but I don't know when we'll get to it, and there's no good reason to leave this around in the meanwhile. -------------------------------------------------------------------------------- 373bd8bca1 | Nicholas Feinberg | 2021-06-04 18:00:23 -0700 Fix more Lear/merfolk/form bugs Don't unmeld boots when in a form that melds boots if you exit the water as a merfolk, or if you exit the form while in the water. Lear's is a kind of large boot. -------------------------------------------------------------------------------- d0ff78f834 | Nicholas Feinberg | 2021-06-04 17:36:56 -0700 Don't allow wearing items over Lear's Previously, if Lear's Hauberk was melded, you could wear aux armour that Lear's normally blocks. Don't allow that. -------------------------------------------------------------------------------- 5b7f72125b | Nicholas Feinberg | 2021-06-04 17:28:20 -0700 Warn for a rare Ash/holy/necromut issue If casting Necromutation would cause you to shatter a cursed holy wrath weapon, prompt first. This is probably buggy in some other way. -------------------------------------------------------------------------------- 8faf1edda1 | Nicholas Feinberg | 2021-06-04 17:14:23 -0700 Add message for manual for maxed skill (Yermak) -------------------------------------------------------------------------------- c6d2f85da4 | Nicholas Feinberg | 2021-06-04 17:04:34 -0700 Rewrite cause fear code (vt) Don't let the Cause Fear targeter claim to affect undead. This was a weird rabbithole and I'm not very happy with the resulting code! -------------------------------------------------------------------------------- d1902e2d21 | Nicholas Feinberg | 2021-06-04 16:32:16 -0700 Fix missing dancing weapon / gozag death message (split) There was no message at all for dancing weapons being destroyed if you followed Gozag. -------------------------------------------------------------------------------- 6385558a29 | Nicholas Feinberg | 2021-06-04 16:21:15 -0700 Simplifiy Invisibility (Yermak) Make it self-targeted only, to reduce the number of keystrokes while casting. It was possible to use Invisibility on other targets, e.g. on allies as a buff or on enemies to trick enemies into shooting them, but in practice this happened fairly rarely. In future, we might add some other effect (perhaps an evocable or unrand) that encourages those fun interactions. -------------------------------------------------------------------------------- 72385e2e4b | Nicholas Feinberg | 2021-06-04 16:10:11 -0700 Fix pet AI / non-beam spells (ardl, dang3rdave) Airstrike, LRD and Freeze will now all set pet target correctly. Possibly Irradiate and Chain Lightning should too? I'm unsure. -------------------------------------------------------------------------------- 6342a01c75 | gammafunk | 2021-06-04 09:30:45 -0500 Update some guarded unrand vaults The guarded unrand vaults are a set of minivaults that place specific unrandarts. This commit updates many vaults in this set to use a common weight, to extend placement ranges to cover later Dungeon, where applicable, and to fix other issues, especially for the recently merged ones. The common weight of 3 will ensure that these vaults don't place too frequently, and there's generally no need to have certain vaults with higher or lower weight. Remove unnecessary transparent tags where a vault doesn't have multiple exits and a few other tags like no_item_gen where that's not necessary. Update the section comments to mention the common weight and that the motivation for this is balance; we generally don't weight vaults by subjective interest, as the old comment implied. Keep the suggestion for out-of-depth monsters that are escapable, but mention that runed doors or transporters are an option if nastier out-of-depth monsters are used. Don't mention not using overpowered/useless unrands since we're always reworking unrands to make sure none are useless, and even the more overpowered ones deserve a fun vault! For specific content changes, some details are described below: minmay_guarded_unrand_tortoise: Allow this vault to actually place in Vaults as intended by making it a hard room, applying the necessary substitution to make its walls general. minmay_guarded_unrand_staff_of_olgreb: Extend placement from D:5-10 to D:5- and have three sets monsters, scaling up the three spider/insect/snake monster definitions with placement depth. minmay_guarded_unrand_finisher: Extend placement from D:7-13 to D:7-, using two sets of monsters in two tiers. Have wraiths and a skeletal warrior before D:13 and skeletal warriors and a reaper afterwards. minmay_guarded_unrand_resistance: Extend placement from D:9-D:14 to D:9 without modifications, since the monsters it places are fine for D:15. chequers_guarded_unrand_ignorance: For Dungeon, extend placement from D:7-12 to D:7- (leaving Orc unchanged). This vault is certainly dangerous enough for late Dungeon without any changes. chequers_guarded_unrand_mask_of_the_dragon: Remove the no_tele_into markers. This is a Zot vault, so players can handle being teleported inside. hellmonk_guarded_unrand_starlight: Add placement for D:13- in addition to the existing Depths placement by using cherubs instead of angels and daevas. hellmonk_guarded_unrand_salamander: Add scaling for Dungeon that uses mystics and no tyrants before D:13 and adds tyrants after. hellmonk_guarded_unrand_cigotuvi: Extend placement from D:9-D:14 to D:9-. Make the skeletons/zombies pull monster types from later depths, and for D:13- use soul eaters instead of hellwings. hellmonk_guarded_unrand_staff_of_battle: Extend placement from D:8-13, to D:8-, adding a Tengu Reaver for D:13 onwards. hellmonk_guarded_unrand_dark_maul: For Dungeon, extend placement from D:8-12 to D:8-. Revamp the monster set to use less trivial monsters holding the maul and a better set for the accompanying threats. Scale monster count with depth of placement. hellmonk_guarded_unrand_gong: Extend placement to Vaults by adding logic to place the vault as a vault room. Add 9 spawns after D:13. hellmonk_guarded_unrand_night: Extend placement from D:7-12 to D:7- by introducing satyrs along with the dream sheep after from D:13 onwards. hellmonk_guarded_unrand_gyre_and_gimble: Extend Dungeon placement from D:6-D:10 to D:7- by making the 2-handed monster be an ettin and the spriggan be a spriggan berserker with a rapier. hellmonk_guarded_unrand_vines: Extend placement from D:7-11 and Lair:1-3 to D:7- and all of Lair. Have both a regenerating monsters as well as plant monsters, using Trolls and a single Hydra before D:13, introducing oklob plants in Lair and replacing trolls with hydra, scaled with depth of placement, before replacing oklobs with a single Swamp plant monster, either a shambling mangrove or a thorn hunter. hellmonk_guarded_unrand_frostbite: Extend placement from D:7-12 to D:7-, adding nastier ice demons for D:13 onwards. hellmonk_guarded_unrand_zhor: Extend placement from D:7-12 and Lair:1-3 to D:7- and all of Lair. Scale monster counts better with depth, adding an ice dragon for D:13 onward. Use a single runed door instead of clear doors, since the latter are still pretty confusing to players, especially in terms of auto explore. hellmonk_guarded_unrand_vitality_bloodlust: Extend placement from D:7-11 to D:7-, randomizing monster counts more and adding a deep troll shaman and higher deep troll count for D:13 onwards. Closes #1937. -------------------------------------------------------------------------------- 8ece3b8c5a | gammafunk | 2021-06-04 09:30:45 -0500 Some tweaks to a few large themed vaults Several god-themed vaults in large_themed.des had never been properly updates for the creation of Depths, having absdepth conditions that never applied or just didn't make sense. Other aspects of these vaults needed updating, including more appropriate monster selection and some generalization to let them place in late Dungeon, where they're also a good fit. Some content changes for four vaults are described below. All but evilmike_library_of_no_secrets now additionally place on D:13- as well as Depths: evilmike_library_of_no_secrets: Placement is unchanged at D:11- and Depths, but adjust monster lists in both branches. Use both summoning direct damage spellcasting monsters, but using only normal and out-of-depth branch monsters. Add and place an additional monster glyph for the top-end threats rather than using a set of weights with only two glyphs. evilmike_makhleb_hellhole: For Dungeon, use common demons, kobold demonologists, and a milder selection of tier 2 "greater servant" demons. Thin out monster placement relative to Depths. For Depths, remove the now-trivial common demons and kobold demonologist, fully replacing these with hell knights and deep elf demonologists, respectively. Use a brimstone fiend as the "boss" guarding the altar instead of another hell knight. Update the "prisoner" area to not not reveal itself head of time and to contain actual loot with a more appropriate set of guards. The prisoner loot as a demon weapon and some nice potions. Make the prisoner area have a grate instead of a runed door, so as not to clutter ctrl-o. Compassionate players may elect to free them with a dig charge if they wish! evilmike_halls_of_destruction: For Dungeon, use appropriate spellcasters for the two tiers, with the second including deep elf zephyrmancers as the top end. Make the unique spellcaster boss alternate between Nikola and Jorgrun, with a deep elf annihilator backup should the chosen unique be already generated. For Depths, likewise updates the spellcasters, going up to liches for the second tier, and alternating between Frederick and Boris with an ancient lich as backup. Replace the harmless fire vortexes with salamander tyrants. Scale monster placement by branch, placing fewer iood statues and tyrants in Dungeon compared to Depths. evilmike_negative_zone: Update the monster list to be a more appropriate set of necromancy-themed monsters. Don't use ancient/dread liches, as those have no actual necromancy spells. Place different loot types in a nice arrangement instead of using a heavily random SUBST. This commit also cleans various aspects of syntax for the above vaults and a couple other vaults in larged_themed.des. -------------------------------------------------------------------------------- 4ce4c228df | gammafunk | 2021-06-04 08:44:03 -0500 Clean up lua depth checks Use you.in_branch() instead of a comparison to the you.depth() string in order to check branch location, since the latter is error-prone. This batch of changes only caught one such error, but the string comparison is case-sensitive, and you.in_branch() correctly generates an error if the argument given is an invalid branch name. Also prefer use of you.depth() to you.absdepth() when only one branch is involved, as this is clearer. It would probably be best to just always use a combination of you.in_branch() and you.depth(), since its more clear and doesn't require DES readers to look up branch absdepth values. However this requires rewriting a lot of conditionals, and I've mostly only modified one related to the first part of this patch. -------------------------------------------------------------------------------- 6ab302a81b | hellmonk | 2021-06-03 06:02:40 -0500 New guarded unrand vaults. Guarded unrand vaults for amulets of vitality and bloodlust, cloak of starlight, seven league boots, salamander hide, robe of vines, robe of night, cigotuvi's embrace, skin of zhor, lear's hauberk, shield of the gong, damnation, staff of battle, dark maul, gyre and gimble, frostbite, and rift. Comitter's Note: Merged several commits into one and updated commit comment with a full list of unrands covered. -------------------------------------------------------------------------------- bc2d63fdf1 | hellmonk | 2021-06-02 23:10:12 -0400 New spider minivault Now you, too, can collect a star_item in 0.5 a presses -------------------------------------------------------------------------------- 74d5156d8b | hellmonk | 2021-06-01 13:07:00 -0400 New Zot:5 shop vault Idea in conjunction with nicolae; a shop that sells great gear for 1 gold, appearing only on Zot:5. -------------------------------------------------------------------------------- e72e49191c | Nicholas Feinberg | 2021-06-01 07:55:36 -0700 Fix mindburst/2h ogre lore (Also ettins and maybe a few others.) -------------------------------------------------------------------------------- cae1a64fa4 | Nicholas Feinberg | 2021-06-01 07:50:33 -0700 Improve Mindburst lore (dinky) You are huge! That means you have multiple heads! Burst those minds! -------------------------------------------------------------------------------- 94dc6ad4cf | gammafunk | 2021-05-29 06:01:34 -0500 Some cleanups for a Snake rune vault Minor DES cleanups and checkwhite. Closes #1963. -------------------------------------------------------------------------------- 6ea3bcaf3c | hellmonk | 2021-05-29 06:01:34 -0500 New snake end: quicksilver temple This snake end takes its monster theme from snake ziggurat floors, which eventually place quicksilver dragons. Two of them serve as the boss. Since those are rather dangerous compared to normal snake spawns, I tried to keep the total number of monsters relatively low compared to other endings. -------------------------------------------------------------------------------- 427f276c44 | gammafunk | 2021-05-29 06:01:28 -0500 A batch of Snake vaults from nicolae (12590) A set of decor vaults and a set of monster-placing vaults. Most changes are minor, with a few substantive changes to the monster-placing vaults described below: nicolae_snake_attic_fulla_snakes: Thin out snakes in the attic a bit. It still has a lot of snakes, just not quite so many. nicolae_snake_dead_anacondas: Combine the inner derived undead anacondas into one definition and favor the more interesting/stronger types of skeletons and zombies. Use a simpler distribution for monster placement. nicolae_snake_magic_snake_eye: Don't place loot in piles on the same square, using three loot glyphs for any that need to place multiple item. nicolae_snake_naga_rites: Thin out monster placement somewhat. One can take only so many ritualists. nicolae_snake_snakewalk: Used fixed loot classes. There are only 4 loot items here, so we can just put 4 higher quality items. Thin out the monster placement slightly. I elected to not thin out monsters in a similar vault using out-of-depth monsters in this batch, nicolae_snake_storage_room, since it places far richer loot. -------------------------------------------------------------------------------- 423d0e134b | gammafunk | 2021-05-29 00:49:39 -0500 Some DES file cleanups Move a multi-branch snake-themed vault to mini_monsters.des, move another vault in this file to the appropriate file section, and update the file header comments. -------------------------------------------------------------------------------- 3e9cee4cb2 | gammafunk | 2021-05-26 16:08:34 -0500 Reduce monster count in a vault (Ge0ff) The vault nzn_swamp_stair_ambush places 8 guaranteed monsters near stairs in a small area. While this is within acceptable bounds, it's on the hard side of things, and additionally there's no monster count randomization, which we like to have for monster-placing vaults. Remove three monsters on-average by adding appropriate chances for shallow water or floor instead of a monster in some places. -------------------------------------------------------------------------------- cd1846a45e | advil | 2021-05-26 16:11:58 -0400 fix: use correct quiver for lua items.fired_item() This was getting the item behind the primary action, which is either the wielded weapon or ammo used by the wielded weapon, but not in general what the quivered item is. The doc string was also only correct for an intermediate implementation of quivering. -------------------------------------------------------------------------------- 35abcb988c | gammafunk | 2021-05-26 02:05:59 -0500 Make a loot vault diggable (Mels) The vault minivault_21 is an old vault that places loot behind fully undiggable walls, but with escape hatches should the player land inside. The loot is inaccessible for a large majority of players, since they'd have no way to break stone walls. This commit makes the vault rock so that most players can eventually access the interior eventually (e.g. with digging). Also remove the allow_dup tag, since it places a good deal of high quality loot. There's not need to give such nice things more than once per game! -------------------------------------------------------------------------------- 8631133539 | advil | 2021-05-24 10:39:48 -0400 fix: don't overwrite (jobbed) draconian breath spells A draconian with a job usually has a spellbook, and this code would overwrite their breath weapon with that spellbook. This appears to be unintentional, and is pretty old. The bug was not apparent because the describe code doesn't actually use the monster spell list to show the breath weapon; see mon-util.cc `get_unique_spells` and describe-spells.cc `_monster_spellbooks`. (In general, this code is not what I expected and is probably ripe for bugs like this...) -------------------------------------------------------------------------------- 20e75d603b | Nicholas Feinberg | 2021-05-24 07:32:41 -0700 Fix quicksilver ooze AF desc (dinky) -------------------------------------------------------------------------------- 601b473118 | Nicholas Feinberg | 2021-05-22 20:03:37 -0700 Merfolk Long Blades title: Swordfish (hellmonk) -------------------------------------------------------------------------------- 813e06a757 | advil | 2021-05-22 18:11:55 -0400 fix: remove a likely unapropos weapon name Because "banish" has a specific meaning in crawl, "Banisher" as a weapon name is very likely to be inconsistent with the weapon flavor. (I spotted this while looking at learndb unapropos names, specifically, `+1 trident "Banisher" {holy, +Blink rPois MP+9}`.) -------------------------------------------------------------------------------- b8eb6cee8e | Kate | 2021-05-22 01:12:21 +0100 Simplify flaying Make it closer to torment-lite, dealing a fixed 25% of current HP instead of its previous fairly complicated damage calculation. -------------------------------------------------------------------------------- 73eefd5def | gammafunk | 2021-05-19 22:19:46 -0500 More cleanups for Ozocubu's Refrigeration The check for whether a target was vulnerable used some outdated logic, and the UI for players casting this spell didn't even perform the check in the first place. Hence players casting the spell with only rC+++ monsters in LOS would not get the usually prompt about a useless cast, even though all visible targets are immune. This commit fixes this logic, adds a tracer check, and refactors the LOS attack spell code slightly. -------------------------------------------------------------------------------- e80a49f48c | gammafunk | 2021-05-19 14:26:12 -0500 Fix spell -Potion application (AliasTheSpectator) If the player had rC+++ and cast Ozocubu's Refrigeration, their immunity to its damage accidentally prevented application of -Potion. The player spell doesn't damage the player even without the immunity granted by rC+++, but this bug emerged as a holdover from when the spell did self-damage. This commit applies the debuff unconditionally. -------------------------------------------------------------------------------- 8b4daa1eef | Nicholas Feinberg | 2021-05-18 17:18:53 -0700 Dart slug: nerf damage, buff cast rate (hellmonk) To have mercy on poor felids, decrease damage to 2d3 (from 2d4) and increase cast rate to 30% (from 20%). Given the existence of AC, this should more or less balance out. -------------------------------------------------------------------------------- a233589e6f | advil | 2021-05-18 13:03:34 -0400 refactor: clean up some vaults monspec code, document No behavior changes, but fix up a 9 year old stylistic choice I'm not a fan of and make the documentation/comments a bit clearer for people looking at this for the first time. -------------------------------------------------------------------------------- e86db4a01e | Nicholas Feinberg | 2021-05-17 20:15:30 -0700 Weaken early D vault OODs Cap 8s and 9s to only spawning monsters up to (depth * 2) until D:9. This roughly corresponds to the range for which chaff was removed in dd57cda9ea3d35 . -------------------------------------------------------------------------------- 18a14b5c60 | Nicholas Feinberg | 2021-05-17 20:15:29 -0700 Weaken early D OODs Removal of chaff from the D spawn pool made OODs much nastier than they were in the past. Let's have no more D:2 water mocassins or steam dragons. -------------------------------------------------------------------------------- ee19b5822f | Nicholas Feinberg | 2021-05-17 09:08:07 -0700 Revert Sacrifice Hand piety change Back to 65 piety, from 60. Sacrificing your hand is an iconic and very cool Ru experience - it's fine for it to be a little stronger than other sacs, since it's fun! -------------------------------------------------------------------------------- 5f64966fcc | Kate | 2021-05-17 00:31:58 +0100 Fix Yred/Beogh recall cancelling Ozocubu's Armour Recalling offlevel allies moved the player to 0,0 in order to silence messages about expiring enchantments on them. However, this movement also resulted in Ozocubu's Armour and Frozen Ramparts being cancelled. Use msg::suppress to silence any such messages instead. Cheibriados Time Step and Temporal Distortion do still move the player to 0,0 so have the same problem (and would need a different approach to fix it). -------------------------------------------------------------------------------- 7fc4abc71e | Kate | 2021-05-16 20:07:03 +0100 Give Chuck some more exciting rocks Since the returning brand doesn't do anything special for him with monsters getting infinite ammo. -------------------------------------------------------------------------------- d55d32fc2f | Kate | 2021-05-16 20:04:26 +0100 Adjust some monster ammo quantities Since monsters now have infinite ammo, remove some cases where they were given additional ammo to make them less likely to run out. Also reduce some quantities of rarer ammo (such as curare and branded javelins) to reduce the amounts handed out to the player. -------------------------------------------------------------------------------- 41d2c3503b | Kate | 2021-05-16 18:48:41 +0100 Remove unused cloud immunity mutations But leave their functionality intact for transferred games, rather than add more save compatibility hacks for old demonspawn. -------------------------------------------------------------------------------- 245c70e1c0 | Aliscans | 2021-05-15 11:35:43 -0700 Let a Kikubaaqudgha-worshipping wizard create endless gifts. The wizard mode "get a god gift" command now creates one first level spellbook (if you have had no gifts from Kikubaaqudgha yet), followed by any number of second level ones. -------------------------------------------------------------------------------- 81437c0335 | Aliscans | 2021-05-15 11:35:43 -0700 Simplify _give_kiku_gift(). Rather than have the game use variables such as "gift" and "success" to track whether to return true, return false as soon as something fails. Make the items() call always create a book of Necromancy. This should have no effect as make_book_kiku_gift() overwrites it. Return immediately if items() fails, rather than calling make_book_kiku_gift() on env.item[NON_ITEM] first. -------------------------------------------------------------------------------- b0971d1698 | Aliscans | 2021-05-15 11:35:43 -0700 Simplify _give_sif_gift(). Rather than have the game use the "success" variable to track whether to return true, return false as soon as something fails. -------------------------------------------------------------------------------- bc5ded6cda | Aliscans | 2021-05-15 11:35:43 -0700 Split _gift_sif_kiku_gift() into a function for each god. There wasn't much common code, and this makes the flow easier to follow. -------------------------------------------------------------------------------- 7b0c17a4f7 | Aliscans | 2021-05-15 11:27:28 -0700 Fix what happens when you try to read a spellbook. Make the game give a "You aren't carrying any scrolls." message if you try to read() when you have no scrolls in your inventory or on the floor, but there is a spellbook on the floor. The game had given an inventory prompt with no items on it instead. -------------------------------------------------------------------------------- 7c134c3035 | Nikolai Lavsky | 2021-05-15 10:09:15 -0700 Highlight Curl's AC boost on webtiles HUD (12567) Highlight boosted AC when palentongas curl up. -------------------------------------------------------------------------------- 5e56b55837 | Nicholas Feinberg | 2021-05-15 10:04:01 -0700 Fixup sac validity logic We already check whether a mutation is at max level; no need to double-check it. (This logic also turned off a bunch of other validity checks for skill/xp, probably unintentionally.) Closes #1916. -------------------------------------------------------------------------------- 3ec4c25e8c | Nicholas Feinberg | 2021-05-15 10:03:28 -0700 Checkwhite -------------------------------------------------------------------------------- 145365d198 | hellmonk | 2021-05-15 10:03:28 -0700 slightly increase ru sacrifice timer -------------------------------------------------------------------------------- 41ace87d0d | hellmonk | 2021-05-15 10:03:28 -0700 Account for spellcasting skill when sacrificing wizardry. Instead of just looking at int, account for any spellcasting training when calculating piety, since that's a good indicator the player is casting things. -------------------------------------------------------------------------------- eccaff0f4d | hellmonk | 2021-05-15 10:03:28 -0700 Allow multiple levels of sacrifice experience. Much like sacrifice skill, the mutation already allowed this but additional validity checks forbid it. Sac experience may now be taken up to three times for a total of -6 xl and the piety gain has been decreased somewhat. It would be ideal to make sacrifice experience directly reduce the player's level rather than stepping through xp (so that it's a relevant sacrifice at all stages of the game rather than only relevant briefly upon taking and very lategame) but that seems rather complicated to implement. -------------------------------------------------------------------------------- 4e7b9e3c90 | hellmonk | 2021-05-15 10:03:28 -0700 Adjust sacrifice skill. Allow the player to take it up to three times. The mutation already supported this, but a check in _sacrifice_is_possible prevented ru from offering it again once it was taken. I am not sure if this was intentional or not. This commit also adjusts the piety downward somewhat for the first sacrifice, but more piety is given if the player elects to take it multiple times. -------------------------------------------------------------------------------- 7f30ced503 | hellmonk | 2021-05-15 10:03:28 -0700 Adjust some sacrifice piety values. Nerf sacrifice resistance somewhat and sac hand slightly. Buff sacrificing willpower and love; those are more serious drawbacks than the old values indicated, especially when comparing sac willpower to sac resistance. -------------------------------------------------------------------------------- e960553459 | hellmonk | 2021-05-15 10:03:28 -0700 Add a piety bonus for sacrificing words and drink together. Taking this combination shuts down a lot of options, so award a little piety bonus. Mummies will also get a bonus for sac words now for the same reason. -------------------------------------------------------------------------------- 834f9addc8 | hellmonk | 2021-05-15 10:03:28 -0700 Don't give piety for evo skill when sacrificing mp. -------------------------------------------------------------------------------- c5a3f79286 | Nicholas Feinberg | 2021-05-15 09:20:46 -0700 Devilishly good new tiles (Sastreii) Makhleb altar and the Hellbinder. -------------------------------------------------------------------------------- 56a4fb2168 | Nicholas Feinberg | 2021-05-15 09:03:51 -0700 Deduplicate excommunication XP -------------------------------------------------------------------------------- c127bba4f6 | Nicholas Feinberg | 2021-05-15 09:00:55 -0700 Make Sac XP pricier Rather than just costing the player two XLs of XP, actually increase the cost for all future XLs as if the player was still at their original XL. This should make it a much more consistently meaningful sacrifice, rather than one which becomes mostly irrelevant for most of the game (due to how XP cost scaling works). No adjustment to piety right now, though I can imagine it going up slightly. (It was fairly over-valued before.) -------------------------------------------------------------------------------- fb435604d7 | Nicholas Feinberg | 2021-05-15 08:09:38 -0700 Fix GDR comment typo (nlavsky, goratrix) -------------------------------------------------------------------------------- aa87e14f67 | Nicholas Feinberg | 2021-05-14 11:19:34 -0700 DRR AC GDR (hellmonk) Remove weird breakpoints for GDR effectiveness at even-numbered AC values. This does not matter. -------------------------------------------------------------------------------- 40ce562a0f | Nicholas Feinberg | 2021-05-14 08:44:32 -0700 New wizlab tiles (Sastreii) Zonguldrok (antique lich + shrine), Moon Base (walls), and also a tweak to the new Murray tile. That's not a wizlab thing but no one told Murray. -------------------------------------------------------------------------------- c4ce80cea6 | Nicholas Feinberg | 2021-05-14 08:32:15 -0700 WIP -------------------------------------------------------------------------------- ff078d554e | Nicholas Feinberg | 2021-05-14 08:16:48 -0700 Simplify GDR Guaranteed damage reduction is intended to smooth out some of the nastiness in Crawl combat. It guarantees that your AC will never roll below some % of its max value when defending against melee attacks and mundane projectiles (not against spells, etc). This is a mostly reasonable idea, but it's implemented bafflingly: it uses your base AC OR a hodge-podge of special cases based on your species and/or form, meaning that it's both spoilery and weird. Some AC is effectively worth more than others. Not great! Instead, simplify it to be based purely on the player's current AC. (Specifically, AC^(1/4) * 16.) Previous example values: Robe: 0% Scale mail (ie Fi): 28% Plate: 39% New values: AC 6 (ie Fi): 25% AC 20: 34% AC 50: 43% This is a buff to some things (anything that didn't have GDR before) and a nerf to other things (early plate). It's all over the place. Chaos reigns. (But in practice I suspect the difference will be mostly unnoticable.) -------------------------------------------------------------------------------- fdeffcb720 | Kate | 2021-05-13 19:27:43 +0100 Fix meph chance display -------------------------------------------------------------------------------- 9a643b30eb | gammafunk | 2021-05-13 05:44:09 -0500 Adjustments to two volcano maps For hellmonk_zot_springs, thin out the upper-tier monsters in the main chamber, since it felt a bit too fierce in play-testing. The middle-tier molten gargoyles are pretty tough at this depth as it is, so multiple salamander mystics and the other higher tier threats compound the difficulty of this map with each additional placement. Make the upper-tier set not include molten gargoyles, so we won't place too many of those, since the middle-tier placement already places four on-average. For syntax, reglyph to use consistent glyphs for monsters and items and to use a linear glyph progression. Fix the middle-tier monster NSUBST of 3 to not use ':' when placing the next tier on 4, since this would place either six of such monsters or zero, which seems unintentional (and undesirable). Clean up water tile placement and reorganize statements. For hellmonk_pyromancer_palace, reglyph decorative lava so we can mark it no_tele_into without marking the non-decorative lava. Closes #1949. -------------------------------------------------------------------------------- 7c0e23aee5 | hellmonk | 2021-05-12 22:53:31 -0500 Fix an incorrect glyph in hellmonk_smoking_crater -------------------------------------------------------------------------------- 5e02258609 | hellmonk | 2021-05-12 22:53:31 -0500 Deep elf pyromancer volcano. Pyromancers galore; deep elf archer serves as the boss. -------------------------------------------------------------------------------- 58c629d5e2 | hellmonk | 2021-05-12 22:53:31 -0500 New volcano map: zot springs Based on the legendary zot vault. Places humanoids, steam clouds. No eruptions. -------------------------------------------------------------------------------- 4505690ab0 | Nicholas Feinberg | 2021-05-11 21:41:46 -0700 New monster tiles (Sastreii) Boulder beetle, black bear, polar bear, zombie dragon, and Mnoleg. -------------------------------------------------------------------------------- a92136e5f8 | Nicholas Feinberg | 2021-05-11 21:17:10 -0700 Tweak Dj apts (pubby) Increase XP apt by 1 (0 -> +1) and drop spcast 1 (-2 -> -3). The goal here is to increase the odds that new spells will require some investment by the time you get them, rather than being immediately castable. This could encourage strategic decisionmaking (is this new spell worth investing in?). It's also intended to make =wiz more useful for Dj. -------------------------------------------------------------------------------- b3d8e82157 | advil | 2021-05-10 14:54:44 -0400 feat: add a way to reset the !a warning without swapping (Yermak) This is a very minimal change to allow this, it resets the warning as a side effect of rewielding. This is not great UI and it's a bit of a hidden feature, but as Yermak pointed out, there are corner cases where you really want something like this (e.g. Ash, + accidentally hitting y or using it one-off for something like rampaging). I've at least documented the behavior. This flag is used for ranged weapons as well as !a-inscribed weapons. -------------------------------------------------------------------------------- e0cfffa631 | Kate | 2021-05-10 14:52:30 +0100 Update manual entry for grey draconians -------------------------------------------------------------------------------- 3f2173a928 | gammafunk | 2021-05-10 03:11:45 -0500 Fix dart descriptions (Goratrix) 0b7d3b79 updated the descriptions, but incorrectly changed the entry to one for needles. -------------------------------------------------------------------------------- 0b7d3b79db | Kate | 2021-05-10 02:52:05 +0100 Update needle descriptions -------------------------------------------------------------------------------- e7c6dc9676 | Kate | 2021-05-10 02:28:38 +0100 Let classed monster grey draconians swim Previously only base grey draconians could travel through water. -------------------------------------------------------------------------------- a3e552604e | Kate | 2021-05-10 02:21:07 +0100 Remove unbreathing (mostly) Unbreathing had a number of niche effects but was mostly redundant with rPois and undead/nonliving/plant holiness. Instead make the things that checked it just check holiness and rPois directly as appropriate. Affected mechanics are mephitic cloud confusion and curare damage (both now only check rPois, since all undead/nonliving/plant holiness creatures have rPois anyway), and spore confusion and water drowning damage (both now just check undead/nonliving/plant holiness). Very few monsters/species behave differently as a result - grey draconians, iron dragons, slimes, smoke demons and ophans are now fully affected by the above mechanics (unless their rPois grants them immunity in the cases of meph and curare). Grey draconians gain regular amphibiousness instead of the unbreathing flavour, removing the need for special-casing them in water. -------------------------------------------------------------------------------- a67198749c | Kate | 2021-05-09 18:45:20 +0100 Don't allow Wu Jian attacks or ripostes with nonweapons -------------------------------------------------------------------------------- 099f9bb0e8 | Nicholas Feinberg | 2021-05-07 15:58:35 -0700 New Sastreii tiles Mundane boots, Murray, Nergalle and Snorg, in that order. -------------------------------------------------------------------------------- 28e009f8a6 | gammafunk | 2021-05-06 12:36:34 -0500 Unrename a vault This vault was apparently intentionally renamed in 2394d0fb to change "ooze" to "endoplasm", but the vault never placed a monster that got renamed to endoplasm. It did place a death ooze, which got replaced with a quicksilver ooze, so the original name is still appropriate. In any case, renames should be avoided unless the old name would somehow generate confusion or a new naming format is used for a set of related vaults, neither of which is the case here. -------------------------------------------------------------------------------- 6ee8fce0c9 | gammafunk | 2021-05-06 06:37:52 -0500 Update a digging-themed vault (Lightli) The vault wad_dig_loot had a hidden diggable area with a nasty monster spawn and loot. We've moved away from having completely hidden spoilers like these, prefer our spoilery vaults to at least broadcast their uniqueness to some degree. This vault didn't do anything special with its secret area, so instead update the chamber to be visible, but introduce digging monsters at later depths. Also add Elf to the placement list, since we have a unique digging monster there, and scale the monster and loot count with depth. Now it places two 8 spawns from D:12-15, three 8 spawns in Elf, and four in Depths, with each new monster also generating another loot item. Also fix its teleport closet by marking the loot chamber no_tele_into. -------------------------------------------------------------------------------- 3ef0f4ec91 | Kate | 2021-05-05 18:47:26 +0100 Fix Ignite Blood mutation description -------------------------------------------------------------------------------- 0b992a5a9d | advil | 2021-05-03 19:40:49 -0400 fix: remove a duplicate BREATHE_POISON (12579) This led to cosmetic duplicates of this ability on the `a` screen. -------------------------------------------------------------------------------- 81dfa19a63 | dilly | 2021-05-03 17:12:53 -0400 Minor fix for gnrine It wasn't green enough. -------------------------------------------------------------------------------- 0b80122b6a | advil | 2021-05-03 15:23:26 -0400 Update sdl2-image for android builds Per #1892. -------------------------------------------------------------------------------- 0a9fa4a780 | advil | 2021-05-03 15:23:26 -0400 Update sdl2-mixer for android builds Per #1892. -------------------------------------------------------------------------------- a4d602e826 | advil | 2021-05-03 15:23:26 -0400 Bump lua contrib for android builds This updates lua and fixes some issues with android builds, per PR #1892. I'm merging this slightly differently than in that PR just to be a little more careful, these changes since other builds depend on these contribs as well. -------------------------------------------------------------------------------- 2a531a4d09 | Kate | 2021-05-03 15:52:38 +0100 Add some missing cloud descriptions -------------------------------------------------------------------------------- 715e165ca6 | Kate | 2021-05-03 15:52:38 +0100 Fix spelling -------------------------------------------------------------------------------- a7b940fc0e | Kate | 2021-05-03 15:52:38 +0100 Tweak portal timer wording They were fairly misleading - "nearby" portals were extremely close, and "distant" ones were also still quite close. Add an extra level of distinction, and use multiples of default LOS range for the differences between ranges. -------------------------------------------------------------------------------- 9b0c66ea95 | Kate | 2021-05-03 15:52:38 +0100 Make poison and miasma clouds affect unbreathing creatures again This was considered a bug when it was changed previously, however it was actually intended behaviour (and only mephitic clouds explicitly mention in their description that unbreathing creatures are immune). Unbreathing is a fairly complicated mechanic so reducing the number of things it effects is probably better, and the change also had some strange knock-on effects like making grey draconians immune to sickness, which doesn't fit flavour-wise. Revert to the original behaviour, and update some descriptions to hopefully make it clearer. This reverts commits e1f20c3b445d4e6f4d869a2e080ec252b498914c and 368d90fffdfadd77c1e5298e59cdf97a51697a67. -------------------------------------------------------------------------------- 564068e7f7 | Kate | 2021-05-03 15:52:11 +0100 Adjust potion of mutation probabilities It was very easy to reliably remove bad mutations with just a few potions of mutation due to them removing 2-4 mutations as their first effect, and to acquire a mostly or entirely positive mutation set due to the guaranteed good mutation at the end. While they should still be useful for clearing out bad mutations, the consistency was a little too high, so reduce the number of mutations removed to 2-3, and reduce the chance of adding a good mutation at the end from 100% to 50% (so that the overall number of mutations added/removed on average also remains the same). -------------------------------------------------------------------------------- 97766e7410 | Kate | 2021-05-03 12:56:04 +0100 Remove wispform's blinkitis and extra speed Random blinking was an especially annoying feature even for a form that's intended to be dangerous. The monster that the form was based on also no longer exists, so instead just make wispform standard speed (distinct from bat/pig badforms which are fast), keeping the existing downsides of most other badforms of melding equipment and preventing weapon or spell use. -------------------------------------------------------------------------------- 131cd56ac5 | gammafunk | 2021-05-03 03:40:42 -0500 Some tweaks to an ice cave map For ice_cave_azure_passage, some tweaks to the monster set and placement, and some DES syntax cleanups. For the monster set, remove shapeshifter simulacra, which are far too weak. Leave in the somewhat stronger glowing shapeshifter simulacra, and add in demonic crawler simulacra. The latter make decent lower-tier threats and fit the "aberration" theme. Also add in very ugly thing simulacra, but at half weight. These are somewhat nasty, but characters with some rC shouldn't find them too difficult. For the slime creature placement, the seven bands currently placed is excessive. Reduce this number by about half, replacing them with 2/3 chance for simulacra and 1/3 chance for quicksilver oozes. For DES syntax, reorganize to use normal monster slot glyphs where possible. Use a simpler SHUFFLE+SUBST instead of a more verbose lua conditional. Reindent statements and reorganize to have a consistent order. I've also renamed the map to ice_cave_hellmonk_azure_passage. Keeping the ice_cave prefix is good for consistency with other maps in this file, but we should include the vault author's name when possible. Closes #1933. -------------------------------------------------------------------------------- fa0a1138f8 | hellmonk | 2021-05-03 03:40:42 -0500 Slime themed ice cave. Places various Jiyva-adjacent simulacra, a few ice statues, slime creatures, and various high level slimes as the boss monsters (including a guaranteed azure jelly). -------------------------------------------------------------------------------- 2f9bb313c0 | Nicholas Feinberg | 2021-05-02 20:13:27 -0700 Zappify dispel undead (ardl) This removes a cap on damage that was added all the way back when dispel undead was first added in 0c7d47c22ef, but that, afaik, could never actually be hit except by very high HD panlords or player ghosts. -------------------------------------------------------------------------------- 2a214b436d | advil | 2021-05-02 12:09:58 -0400 fix: blanket no_tele_into for gammafunk_dig_for_victory We really need a better way to write no_tele_into KPROPs; in this case I think what probably happened is that the KPROP got out of sync with later changes to the vault, though I stopped trying to debug the details. Looking at the vault it seemed simpler to just blanket prevent teleporting into the whole thing. (Perfectly fine with me if someone wants to go back and fix the KPROP though.) I've also applied a similar tweak to passability as that in 3a4c58a182d1; while working on the tele fix I noticed that this vault would likely lead to similar connectivity issues as seen in #1909, because of the conditional CLEAR. Resolves #1812 -------------------------------------------------------------------------------- 4d8f0be3d4 | advil | 2021-05-02 11:41:47 -0400 feat: allow setting tiles window width by ratio On the previous defaults, the tiles window width was screen edge - 90 in both dimensions. This works fine on many screen ratios, but is kind of annoying (in my opinion) on an ultrawide screen. This commit provides an option to override the width setting using a ratio of the height, and makes it activated by default. When activated, the width setting is instead used as a maximum value. This has no impact on full screen mode. This can be disabled by just setting `tile_window_ratio` to 0 or a negative value, in which case the behavior is the same as before (including if you had custom values set here). I've used the golden ratio as the default value, so on a 4:3 screen you'd typically have the same default results as before, but on a wider screen the window default width will be capped. This looks (again, IMO) a lot better on an ultrawide ratio like 2:1 or greater. It would be ideal, eventually, to actually remember positioning and size. -------------------------------------------------------------------------------- 673ba79eab | advil | 2021-05-02 10:44:53 -0400 fix: cap Ashenzari scry radius at los A kobold with a scarf of shadows has a los of 3, but the ash scry radius would go up to 4 at full piety. This commit fixes at least two bugs for this case: * in all build targets, the "comes into view" messages would happen at los 4 instead of 3, even though the monster would not be fully visible (e.g. shown as a sensed monster) * in local tiles, radius 4 would be highlighted as if it were in los, but only the background tile would be drawn, not even monster memory or sensed monster icons. Resolves #1844 -------------------------------------------------------------------------------- bf574a6a6b | Kate | 2021-05-02 00:06:28 +0100 Don't allow cancelling forced blinks with Ozo's Armour (Psymania) -------------------------------------------------------------------------------- a84896973d | advil | 2021-05-01 17:17:33 -0400 fix: do hepl ancestor setup when receiving ancestor Before 9dc9f58f1f8, setting up the name prop and generating the ancestor itself were done together in _join_hepliaklqana, ensuring correct sequencing. After this commit, they were separated; this becomes an issue for monks, who get their piety bonus when joining (triggering the ancestor generation code) before the on_join function is called, leading to an empty name and crashes. Instead, ensure that the name and gender are set up any time the monster is instantiated, including the first, rather than in an on_join function. -------------------------------------------------------------------------------- 62a2e9f2fb | advil | 2021-05-01 13:04:27 -0400 fix: swap a mutation check for felids This doesn't really matter, because felids have both mutations and nothing else does, but it's good to be correct. (Also, a minor unrelated whitespace fix.) -------------------------------------------------------------------------------- 91b3acb402 | Neil Moore | 2021-05-01 01:19:45 -0400 Don't crash when the first of two ancestors dies Actually fixing up the second ancestor in tags.cc would be better, but that is tricky because one or both ancestors might be off-level, and the daction to handle that case would destroy them both. Instead, let the extra ancestor die normally, but without triggering DUR_ANCESTOR_DELAY. -------------------------------------------------------------------------------- 00726eb06d | Nicholas Feinberg | 2021-04-30 16:34:33 -0700 Fix: don't spawn hep ancestor until 1* Overlooked the code to respawn dead ancestors over time. Oops! -------------------------------------------------------------------------------- 6f521eb9b9 | Nicholas Feinberg | 2021-04-30 15:15:41 -0700 Only trigger spectral on melee (kingbuddyboy) Don't allow ranged attacks to re-trigger existing spectral weapons. -------------------------------------------------------------------------------- b2b6fe9c5e | Nicholas Feinberg | 2021-04-30 08:41:47 -0700 Show actual attack delay on @ It's not a secret! We display it in the inventory and every time that you swing your weapon - no need to add secret mystery adjectives. -------------------------------------------------------------------------------- e39799b483 | Nicholas Feinberg | 2021-04-30 08:34:29 -0700 Remove sInv from axes Pretty good targeter bug. I think ardl or dilly or someone reported this but I couldn't find the message when I looked for it again, sorry! -------------------------------------------------------------------------------- 9dc9f58f1f | Nicholas Feinberg | 2021-04-30 08:24:56 -0700 Move Hep frailty & ancestor to 1* Hepliaklqana was one of the last gods that provided a benefit at 1*. In general, the tension of having to worship for a little while before actually getting an upside from your god (assuming you haven't taken some other tradeoff, e.g. an ecumenical altar or a Monk start) tends to produce more interesting gameplay. Along with recent major Hep buffs, it seemed like it was finally time to make this change. -------------------------------------------------------------------------------- 4f6a661ab4 | Nicholas Feinberg | 2021-04-30 08:24:56 -0700 WIP hep nerf -------------------------------------------------------------------------------- 3e6434628b | advil | 2021-04-30 11:14:09 -0400 fix: reorder messaging for irradiate No need to give the blasting message for protected allies. -------------------------------------------------------------------------------- 4302cc2033 | advil | 2021-04-30 11:06:54 -0400 lint -------------------------------------------------------------------------------- 276f4da11a | advil | 2021-04-30 10:37:56 -0400 refactor: unify hepl and fedhas ally protection Historically, these allies were treated quite differently, but ab74d117c10 put them closer together by allowing some attacks to pass through ancestors. However, like the original fedhas protection implementation, this check is sprinkled all over the place leading to inconsistent behavior between special cases and reports like #1925 (deja vu for those who did the original fedhas bugfixing). This commit continues the trend by doing the checks in exactly the same places, leading to cleaner code and a more consistent set of religious ally protections. Unlike the previous commit that refactors fedhas, this commit is an expansion: hepl ally protections now cover a whole bunch of cases (various spells, clouds, etc) that weren't considered in previous commits, and hep allies should now be immune to all sorts of area spells like refrigeration. But it is much cleaner from the player's perspective, and code perspective, to give these two cases exactly the same protection, once shoot-through is allowed for ancestors in the first place. One awkward case I am still aware of is OoD behavior, where the ancestor is protected from damage but seems to block the orbs (with or without a shield). In the long run it would be nice to continue generalizing this code to cover demonic guardians, conj projectiles, etc., but the more general it is, the harder it is to get the messaging right for all cases, so I aborted trying to do that for now. Resolves #1925 -------------------------------------------------------------------------------- 7b2b3e46e3 | advil | 2021-04-29 18:13:46 -0400 refactor: abstract some common fedhas code The code to check whether Fedhas protects an ally is repeated in a number of places in a way that is a bit error-prone (in fact, most cases seem to not be handling all the attitude possibilities). This commit abstracts this into a common location with some relatively simple way to call it. This could be even more abstracted into something that covers non-god cases that often show up nearby fedhas checks (e.g. demonic guardian). I actually started to do this and it's trickier than it seems, though. -------------------------------------------------------------------------------- 946c659c87 | advil | 2021-04-28 11:35:29 -0400 fix: disable cleaving during fsim I'm not sure if this is new or old (but I'm surprised to see no reports about it if the latter), but right now, if you fsim with a cleaving weapon while adjacent to a real monster, the real monster takes damage (and may die, grant xp, etc). Probably it would be nice to somehow have a way to factor in cleaving to fsim, but this isn't it. So, simply disable it for now. -------------------------------------------------------------------------------- bc3fc7707e | advil | 2021-04-28 11:09:56 -0400 fix: disable decapitation during fsim 910b67f9770a fixed the main case for #1917, but it was still possible to trigger a crash by fsimming directly against a one-headed hydra. To handle this, disable decapitation insta-kills for simulated attacks. (Arguably, it might be better to accurately represent the damage involved in an insta-kill, but this is a lot simpler.) -------------------------------------------------------------------------------- 910b67f977 | advil | 2021-04-28 10:23:24 -0400 fix: save head count across fsim rounds This restores the head count after a single fsim round. It's possible that some people were using the simulation of head growth, but allowing head growth or cauterization makes the calculation across rounds against hydras pretty unreliable (and leads to crashes). It's of course possible to specify head count in the monster spec for people who want to test particular cases. Resolves #1917 -------------------------------------------------------------------------------- 38810cc1a4 | advil | 2021-04-28 10:12:12 -0400 fix: handle tab at weapon select menu This was simply missing a `break` in the custom menu code for handling the case; focus cycling was being correctly overridden. Resolves #1339. -------------------------------------------------------------------------------- e311f74bc8 | gammafunk | 2021-04-27 20:19:57 -0500 Some cleanups for a volcano map For hellmonk_smoking_crater, slightly increase the number of upper-tier monsters, adding one more on average over two locations. This map feels on the easier side unless you rush in quite recklessly, and it doesn't have the usual cloud gimmicks to try to "force" players to a particular area. Increase the chance of cloak of the thief to be something a player might actually see over the course of many games. Reglyph the vault to not override pre-defined glyphs, and clean up syntax and spacing. Closes #1929. -------------------------------------------------------------------------------- e4e9b07c1e | hellmonk | 2021-04-27 19:42:56 -0500 New volcano map with a smoke/steam theme. Places a highly variable number of monsters; lots of steam dragons. Loot includes a couple of fog scrolls or cloak of the thief (rarely). No eruptions. -------------------------------------------------------------------------------- 7f87ac42b0 | Kate | 2021-04-27 21:52:28 +0100 Remove some duplicated artefact checks Elyvilon being prevented from being named on */+Rage items was redundant since weapons aren't eligible to be named after Ely, and -Cast conflicting with rings of fire/ice/wizardry/MP was also redundant since -Cast can only appear on armour and amulets. Moves a couple of other checks back to _artp_can_go_on_item rather than _randart_is_conflicting. -------------------------------------------------------------------------------- f2daf0da32 | Kate | 2021-04-27 21:52:19 +0100 Adjust some more artefact restrictions Prevents -Cast and +MP on the same artefact, and prevents Trog from gifting items with +Int. Also adjusts which item types can be named after which gods - quick blades can now be named after Chei (since they're no longer a hated item), and non-weapons can't be named after Trog. -------------------------------------------------------------------------------- 71c9e0f10e | Kate | 2021-04-27 21:47:49 +0100 Mark a teleport closet as no_tele_into In onia_ninara_dug_in_and_dangerous. -------------------------------------------------------------------------------- 7bfb9e8c44 | advil | 2021-04-27 12:27:26 -0400 fix: correctly check antimagic brand conflicts for randarts The `get_weapon_brand` call here simply doesn't work, returning SPWPN_NORMAL. I think this is because the brand prop is not yet set up on `item` (past a point I stopped trying to figure out exactly what the problem was). Possibly this check should be in `_is_randart_conflicting` anyways? I was able to replicate this in 0.25.1 with the seed from @Goratrix in the issue: resolves #1322. -------------------------------------------------------------------------------- 7ea0e0ed02 | advil | 2021-04-27 12:04:48 -0400 fix: remove "Power" from rand_wpn.txt This is generally confusing with the unrand sword of Power, and can actually in rare circumstances generate e.g. "the great sword of Power" (I just saw this in a test game). -------------------------------------------------------------------------------- fbe13134a7 | advil | 2021-04-27 10:25:08 -0400 fix: always announce xom chaos branding The message ordering when Xom granted an item and "upgraded" it to chaos was confusing, because the item was announced before the brand took effect. (I suspect this changed at some point.) Rather than try to work out how to fix the message ordering, this commit leans into this effect and just announces the change after the item generates (still letting the player know what they would have gotten). It's still not very explicit about removing the old brand, but hopefully this will be clear enough. Also: * Standardize Xom's chaos upgrade using the same message as in regular branding. Possibly more boring, but also more predictable. * Clean up some code for Xom upgrading ally weapons. Resolves #1865 -------------------------------------------------------------------------------- 3287b30435 | advil | 2021-04-27 10:25:08 -0400 fix: check form in player::could_wield Other checks (e.g. size, handedness) mostly conspire to cover this case already, but this fixes some UI issues for giant forms when the player normally can't wield giant weapons. As a side effect, it does mark all weapons as useless when in a non-wielding form, but if this is a problem, the fix would be to adjust the ignore_transform parameter from the caller. (This might lead to other issues though if any forms narrow the wield restrictions. But I'm not sure they do.) Resolves #1889 -------------------------------------------------------------------------------- 6e592c6ea3 | advil | 2021-04-27 10:25:08 -0400 fix: annotate staves with {weapon} These are not technically weapons, which is why this has to be done manually, but from the player's perspective that distinction is not particularly helpful -- I think the player will expect anything that can be wielded, used in attacks, etc to show up when doing a stash search for "weapon". Resolves #1907 -------------------------------------------------------------------------------- 986d5f5408 | gammafunk | 2021-04-27 04:55:24 -0500 Rework the Jungle Book Lair ending The map due_jungle_book is memorable, but uses a spoilery lua death trigger. Killing the sole anaconda found on the map causes random green elephant statues to "come alive" as dire elephants. We do have lua spoiler vaults at various places in crawl, but it's best to not feature these in a common Lair ending. Furthermore this effect doesn't result in very interesting gameplay relative to how much of a spoiler it is. One of the most common tactics is grabbing loot, teleporting out, and ignoring most of the spawned monsters. This commit reworks the vault to have a strong undead theme, adding in the relatively underused necromancer monster and its Bind Soul ability to pull off "on death" effects with better gameplay and less spoilers. Necromancers get a band of living beasts, mostly elephants but with death yaks and cane toads mixed in. We also mix in bands of thematic skeleton, zombie, and spectral monsters throughout the vault, including a spectral version of the old "Kaa" anaconda. Monster encounters are now spread out so that none of the various vault chambers are empty, which was a problem with the old vault. Overall there are fewer dire elephants, since the previous vault placed too many, but they still feature prominently in the largest loot chamber and can appear in their derived undead forms elsewhere in the map. The guaranteed piece of loot that previously required burning trees is now guarded by an obsidian statue. This loot has a necromancy theme, being one of such items as a high quality pain or draining weapon, shadow dragon scales, an artefact ring of positive energy, an artefact amulet of regeneration, or a necromancy themed book. The necromancy-themed unrands Sceptre of Torment, Morg, Cigotuvi's Embrace, Sword of Zonguldruk, and Majin-Bo all have a chance to appear as this loot item, although each with low chance. -------------------------------------------------------------------------------- b115f176c6 | Nicholas Feinberg | 2021-04-26 17:47:03 -0700 Truly unique new tiles (Sastreii) Rupert gettin ripped and Frederick gettin mean. -------------------------------------------------------------------------------- 09c2292e34 | advil | 2021-04-26 19:26:14 -0400 fix: prevent -cast and +int (kate) This also seems like a case where these properties should conflict. Also, move the conflict check from a8074f5 to a more natural place. -------------------------------------------------------------------------------- a8074f570f | advil | 2021-04-26 18:02:10 -0400 fix: prevent RegenMP with -cast Inspired by: https://www.reddit.com/r/dcss/comments/myz00g/my_candidate_for_the_most_useless_ artifact_ever/ This combo is amusing but also pointless enough that I think it is worth filtering out, similar to antimagic + MP. -------------------------------------------------------------------------------- f39c287674 | Kate | 2021-04-26 21:00:15 +0100 Redraw agrid on gaining the silence aura mut (#12577) -------------------------------------------------------------------------------- 3a4c58a182 | advil | 2021-04-26 11:30:35 -0400 fix: adjust connectivity for gammafunk_its_a_trap This should only be marked `passable` in vaults; because of the conditional SUBST for - it is potentially one-way outside of vaults and can generate connectivity traps as well as actual traps. I replicated this behavior using seed 12239598491091230555 at version 407484c in Snake:3, from the game shown in #1909. Resolves #1909. -------------------------------------------------------------------------------- f0060e8222 | Kate | 2021-04-26 08:47:18 +0100 Make Repel Missiles unablatable Repel Missiles having a power-dependent chance of ending after repelling something was an important feature for the player spell, but not relevant on on the few monsters with rMsl (and would only trigger rarely even for them). With the player spell gone, remove that extra layer of complication. -------------------------------------------------------------------------------- 78b3836a5f | Kate | 2021-04-26 02:30:25 +0100 Refactor disease to be a standard duration Disease is no longer a widespread status effect and only shows up in the Abyss from ancient zymes, so doesn't need so much special handling. Turn it into a normal duration (with recovery rate no longer affected by the player's regeneration rate), and make it dispellable instead of being healable with potions of curing. -------------------------------------------------------------------------------- cf8293e1eb | Kate | 2021-04-25 22:55:09 +0100 Fix pluralisation of pieces from Xom's chessboard And any future things from other things. -------------------------------------------------------------------------------- 8197cbaaf9 | advil | 2021-04-25 13:37:03 -0400 fix: correctly handle hand names ending in `e` (celly00) Prevent "It is a one-tentacleed weapon". -------------------------------------------------------------------------------- e8a0a9c698 | gammafunk | 2021-04-24 21:31:59 -0500 Fix a typo (Yermak) -------------------------------------------------------------------------------- 99ddfe5caa | gammafunk | 2021-04-24 21:17:56 -0500 Don't have burned demonic trees release demons This behaviour creates a disincentive problem similar to the one that orcish idols had when destroying those caused smiting: it would practically never be worth it to intentionally burn a demonic tree. Although creating a chaos cloud doesn't do much in terms of gameplay, having that alone is better than creating destruction disincentives. This commit removes the demon summoning part, but keeps the chaos cloud aspect. There might be room for more monster-activated behaviour, similar to how Awaken Forest works (and that effect does work normally on demonic trees). The challenge with monster-activated behaviour will be that demonic trees have limited distribution, even in the abyss. -------------------------------------------------------------------------------- a652b1bed6 | gammafunk | 2021-04-24 21:17:56 -0500 Update visuals of an Abyss-themed ghost vault For gammafunk_ghost_abyssal_escape, incorporate the new demonic trees into the the vault border. Also randomize the border walls more, incorporating crystal and metal, similar to how Abyss wall ranomization happens. Add a "ruined" floor tiling around the vault for some nice visual effect and to help the glass and demonic trees have floor tiles that seem a bit more logical. Choose a floor color that blends with the the branch-specific floor tile color, when that's possible. The effect is subtle in most branches, but it's especially nice for Shoals, where the sand tile is somewhat bright, so we'd like to use a more matching color. Somewhat increase the trees used in walls for Swamp, since they're still pretty sparse for spriggan druids' purposes even though we replace some of the interior rock with trees. -------------------------------------------------------------------------------- 0d77da13b5 | Nicholas Feinberg | 2021-04-24 08:26:24 -0700 Salamander tweaks (Sastreii) - New tiles for base Salamanders, Mystics and Tyrants. - Remove tyrant weapon use; this wasn't used and wasn't displayed on tiles. -------------------------------------------------------------------------------- 246ed28529 | gammafunk | 2021-04-24 03:40:15 -0500 Fix up a Lugonu altar vault For the altar vault amcnicky_altar_lugonu_corruption, use rock instead of stone, since we're using Abyss rock tiles and recolouring stone stends to be more problematic. Don't use console colours that would confuse the features with other types of walls. Also, when the vault places in Swamp, use the newly introduced demonic trees instead of rock, for a more Abyss-themed feel. -------------------------------------------------------------------------------- ec5411427b | gammafunk | 2021-04-24 03:40:15 -0500 Add demonic trees (Sastreii) A new type of tree appropriate for the Abyss and Pan. When ignited, it releases a durably summoned hostile demon and leaves a clouds of chaos. The demon has a chance to be a greater demon based on the depth of tree placement. The chaos clouds are single tile chaos clouds with somewhat long duration, but don't spread like forest fires. We now place these as the default tree type in both Abyss and Pan. These trees work normally in terms of being awoken and susceptibility to fire/lightning bolts. They have a set of very creative tiles, courtesy of Sastreii, a description, as well as a description of their unique burning behaviour. -------------------------------------------------------------------------------- 6f9b4697ca | gammafunk | 2021-04-24 03:40:15 -0500 Describe burning mechanics in tree descriptions Put basic details about tree and mangrove burning in their descriptions, using a common entry for both types. -------------------------------------------------------------------------------- f074c5909a | gammafunk | 2021-04-24 03:39:39 -0500 Refactor descriptions of terrain modifiers Currently the awoken status for trees is handled as a pseudo terrain type in terms of descriptions by adding an "awoken" prefix to the feature name. This means each possible type of awoken tree needs its own unique description entry. This commit handles awoken and summoned (temporary terrain) descriptors similarly to how we handle icy walls. Now they print as descriptors after the main feature name, and can pull in a common entry for the detailed description show under x-v. -------------------------------------------------------------------------------- 76f056063d | gammafunk | 2021-04-24 03:38:09 -0500 Move mangroves back to their own feature type Mangroves were made normal trees in 7a9dbbb8 when trees were made fully opaque, instead of requiring two to break LOS. However multiple gameplay differences remain between trees and mangroves, namely they don't spread forest fires and they leave shallow water after destruction. Having them be normal tree features but with the behaviour conditioned on location complicates documenting these differences for the player. It also complicates their usage in other areas, since they'll be mangroves in appearance only, and will not do any of the usual mangrove things. It's far more straightforward to have features with gameplay differences be properly distinct feature types, hence this commit restores mangroves to their own type. The handling for flame clouds and leaving water is conditioned on the original feature being a mangrove, not its being a tree in Swamp. I've also added a mangrove feature description that mentions mangrove differences. This change does bring some complications. For vaults, we condition the default meaning of the 't' glyph by branch, so that mangroves are the default definition for any vault placing in Swamp. Vault authors can still use a KFEAT to get whichever type of tree they need. For save compat, we add a minor version that converts all normal trees to mangroves in Swamp. For vaults, I've gone through and modified the few vaults using mangrove tree tiles outside of Swamps to use proper mangrove trees. -------------------------------------------------------------------------------- c0a873f3f4 | gammafunk | 2021-04-24 02:03:48 -0500 Fix grammar handling of Zot trap descriptions Zot traps having an upper-case first character broke the description database lookup and gave inconsistency with other feature descriptions, showing "Zot trap" instead of "a Zot trap". Update the grammar function to have an option to ignore case, allowing articles to be added for upper-case phrases and use this for Zot traps. Also refactor some feature description code to no longer have special cases for mechanical traps and abandoned shops that are properly converted to distinct feature types. -------------------------------------------------------------------------------- a85bd9520d | advil | 2021-04-23 19:13:31 -0400 docs: Document force_more_message vs runrest_stop_message These work completely independently, but this was not a very obvious fact from the documentation. I think in the long run I'd prefer to change this, but it's non-trivial to do, so for now at least make the situation clear. -------------------------------------------------------------------------------- e4650c3cbe | advil | 2021-04-23 19:05:12 -0400 refactor: remove some more hunger references -------------------------------------------------------------------------------- 97754add85 | advil | 2021-04-23 18:28:02 -0400 Add portal alerts to default runrest_ignore These not being here is almost certainly one reason for reports of people missing these. -------------------------------------------------------------------------------- 1d5596e97f | advil | 2021-04-23 18:26:05 -0400 Add zot clock alerts to default runrest_ignore It seems that this is entirely independent of force_more_messages, so these need to be in both places. -------------------------------------------------------------------------------- 8b38eeb0f3 | advil | 2021-04-23 17:50:05 -0400 Force-interrupt all delays on zot clock messages One factor in the death in 12569 is that when you have `explore_auto_rest = true`, and start autotravel, it uses the delay interrupt options for `interrupt_travel` rather than `interrupt_run`, which does not include messages. It seems pretty reasonable that the zot clock alerts should just interrupt anything, regardless of configuration, which sidesteps this issue. -------------------------------------------------------------------------------- 29160eaed2 | advil | 2021-04-23 16:08:33 -0400 Mark diamond obelisks as not a threat The only effect of this should be allow ghouls / bloodless vp to heal with obelisks in sight. Their effect is via clouds, which should still prevent autotravel etc. Also, remove some tornado dprf spam. Easy enough for someone adding tornado to put in temporarily if needed later. Possibly resolves mantis 12569, but not any hepl bug (such as #1747). That is, I suspect 12569 was not actually hepl related, but that there is another similar hep bug. -------------------------------------------------------------------------------- e809cff456 | Edgar A. Bering IV | 2021-04-21 21:32:36 +0300 update CREDITS.txt -------------------------------------------------------------------------------- 0c245655db | Edgar A. Bering IV | 2021-04-21 20:55:09 +0300 Remove food(.des) food.des housed the guaranteed food vaults, which after the removal of food simply became a part of the minivault pool. This moves most of them to mini_monsters.des. The spriggan baker becomes the spriggan hatter, placing hats and occasionally a skinned spriggan corpse (yikes!). The "fruiting plant" subvaults are removed (they had a TODO asking for flavour without food). Vaults that use them are adjusted. One vault that was a notorious and spoilery autoexplore trap is removed. Another, with jelly flavour, is removed. The flavour wasn't strong without being able to place royal jellies, and without players eating at all the side-by-side jellies eating the door and a ration for the player is also lost. -------------------------------------------------------------------------------- a35ceff83e | Edgar A. Bering IV | 2021-04-21 19:59:13 +0300 Fixup some Nemelex overflows (Yermak) -------------------------------------------------------------------------------- 9982866e19 | Edgar A. Bering IV | 2021-04-21 17:01:56 +0300 Revert "Prevent bounced bolts from escaping LOS" This reverts commit 4a294289ab1eb94c2edadeffdf97aeacee0a300f. This approach to clamping had some weird unintended consequences for the fire/steam/water interaction. Addressing them correctly and consistently seems rather challenging from the current way the beam code is written. For now I'll roll this back, perhaps in the future a better solution to prevent out of LOS attacks will be found. -------------------------------------------------------------------------------- 781257ad05 | Edgar A. Bering IV | 2021-04-21 16:51:51 +0300 Reword Vampire regeneration (Shummie) -------------------------------------------------------------------------------- cb85b5eba1 | Edgar A. Bering IV | 2021-04-21 00:06:50 +0300 Don't crash when aimed_at_spot the player can't see -------------------------------------------------------------------------------- 88d13c5596 | Kate | 2021-04-20 21:31:45 +0100 Free Hepliaklqana ancestors from the gender binary And allow them to start out as GENDER_NEUTRAL in addition to it being selectable when recalling identity. -------------------------------------------------------------------------------- 079d617196 | Edgar A. Bering IV | 2021-04-20 23:14:54 +0300 Fix a Hepliaklqana message (12568) -------------------------------------------------------------------------------- 151369d6e4 | Nikolai Lavsky | 2021-04-20 22:58:36 +0300 Further fix webtiles display of defense boosts After fc3203cb, defense boosts provided by the "acrobat and divine shield are no longer coloured blue. This is because unlike other boosts, these two are handled separately in `tileweb.cc:_update_statuses()` and don't use `short_text` strings from duration-data.h. Fix this by updating `short_text`s in `_update_statuses()`. Also, fix colouring of corroded AC and weapons on the HUD. -------------------------------------------------------------------------------- 4a294289ab | Edgar A. Bering IV | 2021-04-20 22:31:56 +0300 Prevent bounced bolts from escaping LOS The targeter does a good job of guaranteeing player bolts don't have an initial target out of LOS, but bounced bolts can escape. Explosions can also explode in order to reach outside of LOS; clamping down on those would need to be done elsewhere. -------------------------------------------------------------------------------- 3be03a2e56 | AlexanderPosch | 2021-04-20 10:34:38 +0300 Don't reduce the bounce range of spells with items Resolves #1800. The code checks how long a bounced spell would have been if los had not been restricted and then increases the range of bounced the spell. (Kobolds nightstalker mutation does not count as a los restriction). [ Committer's note: Closes #1885. Squashed and rebased. Re-wrote some checks based on the change to how mutations interact with normal vision. Changed the range display to always display the normal-vision range (the symbol strings are rather cryptic, and the UI communicates things well enough with beam path highlighting). Re-wrote the commit message; adjusted style to fit our style guidelines. ] -------------------------------------------------------------------------------- 8b510267b1 | Edgar A. Bering IV | 2021-04-20 10:34:38 +0300 Reduce explicit species checks: barachi Create a MUT_DAYSTALKER as a + counterpart to MUT_NIGHTSTALKER to replace Ba's LOS fakemut. -------------------------------------------------------------------------------- 5a55d11bb6 | Edgar A. Bering IV | 2021-04-20 10:34:38 +0300 Make Nightstalker adjust base LOS This affects halo and umbra scaling only; everywhere else current_vision is used (which already applied nightstalker). These have always been species mutations but predate the concept of a variable base los. -------------------------------------------------------------------------------- 1420032b4b | Kate | 2021-04-20 07:41:44 +0100 Refactor immunity display on % Adds generalised handling for immunity to replace the current rPois special-casing, and uses it to also display infinite willpower (in shadow form) and infinite rampaging (with the seven-league boots). Closes #1920. -------------------------------------------------------------------------------- 288ea87c7c | Kate | 2021-04-20 06:59:06 +0100 Mark scarves of invisibility as useless with Sac Artifice (#12486) -------------------------------------------------------------------------------- 551b87177e | gammafunk | 2021-04-20 00:57:46 -0500 Have soul bound monsters always create simulacra The monster Bind Souls spell currently only creates simulacra if the monster rolled successfully for the chance to leave a corpse. This is an aspect of how the old version of the spell directly consumed corpses, which closely mirrored the player Simulacrum spell. However Bind Souls isn't trying to have symmetry with the player spell; in fact the two spells don't have same name. The corpse requirement only serves to weaken the most distinctive ability of the necromancer monster, which isn't very dangerous at the depths in which it appears. This commit has a simulacra always be created when a monster dies with the Bind Souls enchantment active, giving Bind Souls and by extension necromancers a buff. -------------------------------------------------------------------------------- 450f9b2e0d | gammafunk | 2021-04-19 19:14:50 -0500 Fix an artefact amulet equip crash (Skunz) Now that Regen+ can appear on amulets as of bf8bb431, the artefact equipment code needs an update to not assume an artefact with the regen artp must be armour, which results in a crash. This code is to prevent double messaging in cases of e.g. moon troll leather armour that also has a regen property. This currently can only happen for unrands, since the regen artp doesn't allow multiple levels for randarts. While there currently is no unrand regen amulet with regen++, this commit adds the relevant check for amulets in order to future-proof things. -------------------------------------------------------------------------------- 7ee7857c10 | Edgar A. Bering IV | 2021-04-19 19:09:15 +0300 docs: changelog through 0.27-a0-1047 -------------------------------------------------------------------------------- c940c042cb | advil | 2021-04-19 10:28:14 -0400 fix: check is_stationary in _can_movement_ability (alex1729) The practical effect is that this commit applies DUR_LOCKED_DOWN to rolling charge and hop, where before they were exempt despite being movement-like. I think this was just an oversight, rather than intentional? Before this duration existed, is_stationary just checked treeform, which would have disabled these abilities anyways. -------------------------------------------------------------------------------- 98bf31544f | Nicholas Feinberg | 2021-04-18 11:48:46 -0700 Make guardian golem inner flame trigger consistently Moderate buff to a spell generally considered weak. -------------------------------------------------------------------------------- 1e905a0851 | Nicholas Feinberg | 2021-04-18 11:48:46 -0700 Properly credit guardian golem explosions They were being attributed to the dead monster, not to the hexer, which resulted in the player not getting XP for kills from the explosion damage itself (though they did get credit for any cloud kills, oddly). -------------------------------------------------------------------------------- 2b6ed4f61c | RojjaCebolla | 2021-04-18 21:15:58 +0300 Add Poisonous Vapours to Veh's spell gifts table This helps ensure Ignite Poison can be put to use, and helps with the fact that there are extremely few 2nd-level spells for Vehumet to choose from. [ Committer's note: Closes #1880. This also gives Veh's wizardry bonus to the spell, which is fine because it is destructive! ] -------------------------------------------------------------------------------- c275e32347 | Edgar A. Bering IV | 2021-04-18 21:15:37 +0300 Nerf Makhleb heal-on-kill (cebolla, kate-) This passive is runaway strong and outshines Makhs shiny actives. On every kill that passes the piety threshold (random2(you.piety) >= 30) (at high piety more than 80% of the time) give up to 2 * monshd, on average 3/2 * monshd. In lair, when characters are often around 100 hp a death yak heals for an average of approximately 20% health(!). This commit halves the value of each heal replacing hd + random2(hd) with (1 + hd) / 2 + random2(hd / 2); rounding up always for the base so that something happens when the effect is triggered. [ Resolves #1878 ] -------------------------------------------------------------------------------- 1f2d7d2970 | RojjaCebolla | 2021-04-18 21:15:37 +0300 Improve Makhleb's Major Destruction Remove the non-bolt targeted zaps: the explosions (orb of electricity and fireball) could be unfortunate surprises not previewed by the targeter; the projectiles (sticky flame and iron shot) likewise could be surprises, though of a more subtle kind. In their place, in a parallel with minor destruction, add magma bolt and corrosive bolt zaps. Unlike minor destruction, where acid breath requires special power scaling, each of these zaps has a reasonably close damage averages (though the variances are all over the place; fine for a chaos spell). Major Destruction's power computation was exactly the same as Minor Destruction, topping out at a paltry 81 power on a max roll. Comparing the dice definitions for zaps, this meant Major Destruction was on average only approximately twice the damage of Minor Destruction. With the high variance (power randomization, zap randomization, then damage roll) it didn't feel worthy of the significantly higher cost in training, hp, and piety. This commit doubles the spell-power for Major Destruction zaps. With the exception of lightning bolt the Major Destruction zaps are all lower variance than the Minor Destruction counterparts, so this should feel much stronger at high Invocations. [ Committer's note: Re-wrote commit message; tweaked power formula and zap list. Closes #1879. ] -------------------------------------------------------------------------------- 8915be9327 | Edgar A. Bering IV | 2021-04-18 21:15:37 +0300 Describe the ancestor's special shoot through properties. -------------------------------------------------------------------------------- ccdeed5ca2 | Edgar A. Bering IV | 2021-04-18 21:15:37 +0300 Remember friendship (PleasingFungus) Allow the Hepliaklqana ancestor to shoot through the player, symmetric with the player's ability. -------------------------------------------------------------------------------- ab74d117c1 | sdynet | 2021-04-18 21:15:36 +0300 Allow projectiles to pass through ancestors This change will slightly break Hep's balance, but instead I expect that the player's management QoL will be much better. [ Committer's note: tweaked where the check goes. Closes #1835. ] -------------------------------------------------------------------------------- 2e39039ceb | Edgar A. Bering IV | 2021-04-18 21:15:36 +0300 Adjust demonic guardian protections Allow firing enchantments through them and protect them from chain lightning. Fedhas plants have (unintentionally) had these protections for 6 years without trouble, so it's better to extend them to guardians as well instead of changing the Fedhas behavior. -------------------------------------------------------------------------------- 74cc72d83b | Nicholas Feinberg | 2021-04-18 08:45:31 -0700 Don't give djinni stone/bone legs New tiles for lichform/statue form, irrespectively. -------------------------------------------------------------------------------- 8e1b44f6bd | Kate | 2021-04-18 04:48:17 +0100 Remove an unused ability description -------------------------------------------------------------------------------- c9ac73bf2f | Kate | 2021-04-18 04:48:17 +0100 Tweak Palentonga charge ability description To match wording of other abilities. -------------------------------------------------------------------------------- b38debd254 | Kate | 2021-04-18 04:48:17 +0100 Refactor Word of Chaos Fixes word of chaos being usable while silenced (via the quiver), and improves the timing for ability failure. Also improves behaviour around invisible monsters and monsters that would always be unaffected. -------------------------------------------------------------------------------- 943f6fbcab | Kate | 2021-04-18 04:48:17 +0100 Adjust descriptions for some DS mutations -------------------------------------------------------------------------------- 21ed115f35 | Kate | 2021-04-18 04:48:11 +0100 Simplify player torment immunity checks -------------------------------------------------------------------------------- 4f73a2ec51 | Kate | 2021-04-18 04:47:31 +0100 Simplify Demonic Will handling -------------------------------------------------------------------------------- 0ecb5ae1e9 | Kate | 2021-04-18 02:27:54 +0100 Fix Pan lord pronouns Currently the unique Pan lords all use they/them - the rune announcement messaging will need some extra handling if any of them are changed. -------------------------------------------------------------------------------- eef1433cc0 | Kate | 2021-04-18 02:27:54 +0100 Announce Pan floors with a guaranteed demonic rune The guaranteed demonic rune vaults are all easily recognised for spoiled players, and it's also a lot more fun to encourage getting the rune from one of them compared to a standard random pan lord, so add a message announcing their presence similar to the one that already exists for holy Pan. -------------------------------------------------------------------------------- 0ab3ac089c | advil | 2021-04-17 18:22:59 -0400 fix: extra qualifier for mutation check in 3cb69ffe5362 Shouldn't matter, just adds a bit of safety. -------------------------------------------------------------------------------- 3cb69ffe53 | advil | 2021-04-17 18:18:28 -0400 fix: more general code for species mutation fixup This will more consistently remove species mutations fixed up this way if they shouldn't be there, as well as add them if they should. This code is still not very general (in principle this should be readable off of the species def, but it's tricky to get that right for all cases), and doesn't handle ds muts. -------------------------------------------------------------------------------- bab068f60c | advil | 2021-04-17 17:35:15 -0400 fix: Add generic fixups for four dj innate mutations These are dj-specific so it should be safe to have these fixups. These mutations may be affected on a small number of games on cko impacted by the recent ds mutation bug. -------------------------------------------------------------------------------- c56cccb18a | advil | 2021-04-17 16:28:18 -0400 fix!: reorder demonspawn mutations added in #1852 Commits in that PR added new mutations to the middle of the enum; this has save compat consequences because this enum is serialized as an int. This is a bit of an emergency fix to prevent further breakage; the commit has already gone live on cko, and save compat will get even worse for impacted games, but we really need to keep this from impacting other servers. -------------------------------------------------------------------------------- 5bb4860596 | Neil Moore | 2021-04-17 15:48:53 -0400 Clarify that whitespace fixes should be separate from real changes [skip ci] -------------------------------------------------------------------------------- 72157e4a48 | Neil Moore | 2021-04-17 15:20:49 -0400 Link to coding conventions from contribution-process.md [skip ci] -------------------------------------------------------------------------------- fe178dfb49 | hellmonk | 2021-04-17 19:52:18 +0300 Clean up some facet selection checks. It would be nice to remove the gotos here. Alas, [ Committer's note: Closes #1852. Rebased, squashed some things, fixed up whitespace and braces. Used MUT_TORMENT_RESISTANCE instead of altering the behavior of STOCHASTIC and having a separate mutation. Tweaked the verb for word of chaos to not suggest divinity. ] -------------------------------------------------------------------------------- cd13395478 | hellmonk | 2021-04-17 19:52:15 +0300 New "Demonic Will" mutation for the damnation facet. This mutation provides Will+ and additionally deals a small amount of retaliatory damage whenever the player beats a monster's will check. This replaces rF+ as the first rank of the hurl damnation facet; the facet is now will/res torment/hurl damnation. The theme is something like becoming a brimstone fiend. -------------------------------------------------------------------------------- 496972007f | hellmonk | 2021-04-17 19:52:15 +0300 New corruption/chaos themed demonspawn tier 3 facet. The facet begins with two stages of MUT_CORRUPTING_PRESENCE, which has a small chance to apply corrosion (at either rank) or malmutate (at rank 2 only) any monster dealt damage by the player. It does not require the player to use melee to get the effect, but triggers less frequently than black mark. At rank 3, grants MUT_WORD_OF_CHAOS, an active ability that forcibly blinks away every monster in los and additionally may ensnare, slow, or fear them at the cost of medium draining and a cooldown. -------------------------------------------------------------------------------- 02609334a0 | Edgar A. Bering IV | 2021-04-17 19:52:14 +0300 Give torment resistance at level 2 of the damnation facet -------------------------------------------------------------------------------- 1916af9b50 | Edgar A. Bering IV | 2021-04-17 19:52:14 +0300 Remove the stochastic torment resistance mutation It's removed from the black mark facet and not slated to be added to any of the demonspawn facet re-works. hellmonk suggested making this mutation deterministic and give 50% resistance, to be used in future demonspawn. This is already done by MUT_TORMENT_RESISTANCE level 1 so there's no need to re-create the effect. For save compatibility the old mutation applies the new effect. -------------------------------------------------------------------------------- 7767df9f8c | hellmonk | 2021-04-17 19:04:58 +0300 Rework the black mark facet. Formerly negative energy themed, this facet was relatively weak. This rework keeps the most interesting mutation and tries to build something new around it. The new facet is debuff oriented and provides a hex enhancer, followed by black mark, then a permanent 1 tile silence "donut" aura, providing a wide variety of debilitating effects for the player. -------------------------------------------------------------------------------- aeb4ca5a24 | hellmonk | 2021-04-17 19:04:58 +0300 Rework the hurl damnation ability's power scaling. Previously, hurl damnation used experience level * 10 to determine power. Power is capped at 200, which was reached at xl 20 - frequently before the player had the mutation. The new formula is 40 + experience level * 6, which reaches 200 power at max level and is otherwise weaker unless received implausibly early. -------------------------------------------------------------------------------- fc7557d7ac | hellmonk | 2021-04-17 19:04:58 +0300 Add passive freeze to the generic mutation pool. Perhaps it would be interesting here, where it's not a facet payoff. I think it's worth a try, at least. -------------------------------------------------------------------------------- 53199a3a11 | hellmonk | 2021-04-17 19:04:58 +0300 Remove passive freeze facet. It was notoriously bad and had significant mechanical overlap with spiny. Not worth saving. -------------------------------------------------------------------------------- 066d056d8b | Goratrix | 2021-04-17 08:00:24 -0700 Add variety to boots tiles This adds back the boots tiles which were replaced in b2ee965 and enables variation between the tiles, same as already exists for robes and helmets. -------------------------------------------------------------------------------- 15b55ab828 | advil | 2021-04-17 10:59:39 -0400 docs: fix a typo -------------------------------------------------------------------------------- 9a371d6b8d | advil | 2021-04-17 10:57:51 -0400 docs: Document some commit conventions There's a bunch of pitfalls that I see coming up in PRs again and again to do with commit messages, and this tries to make them explicit. My aim here is to document conventions that we do have, but that are often unstated or only stated in chat / PR feedback -- but if anyone feels that I got things wrong or too prescriptive here I'm happy to be corrected! -------------------------------------------------------------------------------- ae19ba6e15 | advil | 2021-04-17 10:35:05 -0400 docs: convert coding conventions to markdown This is much more readable as markdown because of the many code blocks, and it also lets the document have a working table of contents. There were a number of minor formatting changes throughout, with some small content changes, including (i) adding a brief why/TLDR version towards the beginning, (ii) mentioning the checkwhite/unbrace scripts explcitly, (iii) documenting some of the more mechanical spacing rules. -------------------------------------------------------------------------------- f0a3ee54a8 | advil | 2021-04-17 09:30:34 -0400 fix(tiles): Skip pre-layout message rendering This is basically a followup to 5a74e75d8f72. Those crashes in local tiles revealed that the message window is getting rendered before tiles has a layout, so the message window is width 0; this is basically harmless but triggers pathological linebreaking behavior that it's better to skip (and has the potential to trigger rendering glitches, though I don't think it will currently). Re the removed comment there: I have verified that the current wrapcprint behavior should prevent infinite loops even with width 0, as long as linebreaks are correctly added; the loop will always abort if it runs out of y space. The bug in cfdca905f5 involved failing to correctly add a linebreak. So restoring the wrapcol ASSERT should be unnecessary. -------------------------------------------------------------------------------- 407484c6a7 | gammafunk | 2021-04-17 03:25:12 -0500 Rework monsters in a lemuel castle vault The vault lemuel_castle_with_subvaults has monster placement that's not much been updated, and still has logic based on Dungeon having 27 levels. This commit reworks the monster and loot placement, giving it better scaling with depth, with appropriately themed monsters at each location. It also cleans up the tagging and supporting lua code, organizing it similarly to our current DES standards. For monsters in Dungeon, we use the same scaling as ghost vaults, since this vault places over the same range. Previously it had a specific theme for each depth (e.g. gnolls then later orcs), but something so specific is more difficult to scale. Instead we use a mix of gnolls, orcs, kobolds, and other Bailey-loving humanoid monsters to give us good variety of monster classes. We introduce different types "guard dogs" as the depth changes, using hounds after jackals, and also adding in some howler monkeys, since those are great at rousing the castle army. In the late dungeon hell hounds and even raiju make an appearance at the back of the castle. For Depths, we keep the "giant" theme, since there are enough such monsters to choose from, and use mostly dragons as the guardian beasts instead of hound genus monsters, however one may found a shrike or X at the back of the castle moat. On Depths:5 it places the Zot entrance and draconian and dragon monsters as before, but with some tweaks to the composition of those. Keep the death drakes, but use real dragons instead of a bunch of low-level drakes. Don't thin out the number of "1" monsters drastically only for Depths:5, rather removing about 8 of these from the original lemuel subvault, since that one places so many more than the other subvaults. It still places the most monsters (and the most loot), just not so many more compared to the other subvaults. For loot, scale up the type and quality with depth instead of the thining out numbers earlier. We don't change the monster count with depths, so the overall loot count should likewise remain constant. -------------------------------------------------------------------------------- be84625216 | Kate | 2021-04-17 08:47:24 +0100 Don't allow Manifold Assault to attack projectiles -------------------------------------------------------------------------------- 1fd4cec11e | Kate | 2021-04-17 02:50:03 +0100 Simplify Cleansing Flame description (Yermak) -------------------------------------------------------------------------------- b2ee965f6f | Nicholas Feinberg | 2021-04-16 18:48:42 -0700 New Sastreii tiles Hydras + normal & randart boots. -------------------------------------------------------------------------------- 9da5d22180 | Kate | 2021-04-17 01:57:41 +0100 Update MUT_PAWS description (advil) -------------------------------------------------------------------------------- eb3bcc3169 | Kate | 2021-04-17 01:44:30 +0100 Adjust some stealth handling Fixes Merfolk and Octopodes not getting their bonus stealth when flying over water, makes the Jiyva-only translucent skin mutation always give a full pip of stealth, and removes the marginal stealth penalty and bonus from hooves and paws respectively. -------------------------------------------------------------------------------- 57dfabebf2 | Kate | 2021-04-17 01:40:43 +0100 Improve known/unknown staircase descriptions (#1621) Closes #1621. -------------------------------------------------------------------------------- b18e172e69 | Kate | 2021-04-17 01:40:25 +0100 Adjust Barachi mutation description -------------------------------------------------------------------------------- e6159548ff | Kate | 2021-04-16 23:37:54 +0100 Update Cleansing Flame description (#12200) -------------------------------------------------------------------------------- 3ad0f943fe | Kate | 2021-04-16 04:06:41 +0100 Remove the Random Bolt spell It was used only by Mnoleg, whose spellset is focused around spamming lots of summons so was unlikely to be notable there. -------------------------------------------------------------------------------- 4cfe56dd59 | Kate | 2021-04-16 01:18:13 +0100 Use ancestor pronouns in a transference message -------------------------------------------------------------------------------- b18131059d | Kate | 2021-04-16 01:18:10 +0100 Simplify a transference message (#1906) Since the grammar for correctly specifying different types of terrain would be very fiddly to handle. Closes #1906. -------------------------------------------------------------------------------- cdb93c67d5 | Kate | 2021-04-16 00:58:36 +0100 Make Serpent's Lash movement take priority over rampaging It's intentional that rampaging generally takes priority over Wu Jian attacks, but with Serpent's Lash active the expected behaviour is for movement to not take any time, so make the instant movements take priority over rampaging. -------------------------------------------------------------------------------- 31948d8415 | Kate | 2021-04-15 23:10:00 +0100 Shorten the shopping list header slightly To handle edge cases with very large and expensive shopping lists (10 or more items costing a total of 10000 gold or more would have slightly cut off the header message on an 80x24 terminal). -------------------------------------------------------------------------------- 5030419646 | Neil Moore | 2021-04-15 17:58:27 -0400 Be more clear about shopping-list total cost (Nivim) -------------------------------------------------------------------------------- 818bb6d2ef | Neil Moore | 2021-04-15 16:51:36 -0400 Add tests for uppercase and friends. Including a check (using the Turkish locale) that they handle ASCII as though we were in the C locale. -------------------------------------------------------------------------------- 3fb6992e63 | Neil Moore | 2021-04-15 16:20:11 -0400 Expand on comma_separated_* tests 1. Also test arrays of strings and arrays of const strings. 2. Also test comma_separated_fn with a non-trivial stringification function. 3. Also test alternative values of comma and andc. 4. Also (in a separate TEST_CASE) test comma_separated_fn with stringification functions that take a non-string parameter: both an actual function pointer, and a std::function. -------------------------------------------------------------------------------- bc1d1ccee9 | Aliscans | 2021-04-15 11:53:54 +0300 Let the arena create an ironbound beastmasters on request. Previously, the game terminated (with game_ended_with_error()) if the user attempted to create an arena with a M_REQUIRE_BAND monster which didn't create a band in the same dgn_place_monster() call. This change means that the monster is created as if the M_REQUIRE_BAND flag wasn't there. -------------------------------------------------------------------------------- 778c41be60 | Aliscans | 2021-04-15 11:53:54 +0300 Explain why wizard mode create monster fails for ironbound beastmasters. If the user tries to create a M_REQUIRE_BAND monster without a band, say "That monster can only be created with a band." instead of "Unable to place monster.". The request is still denied. -------------------------------------------------------------------------------- dafb6c8885 | RojjaCebolla | 2021-04-15 10:38:30 +0300 Create artefact_creation.md Basic documentation for artefact creation. Can be expounded on later if needed. [skip ci] -------------------------------------------------------------------------------- 25969acef8 | Nicholas Feinberg | 2021-04-14 18:48:11 -0700 Display chance to hit with spells (split) Not chance to miss. This is simpler and consistent with the behaviour of ranged attacks. -------------------------------------------------------------------------------- e9c4887cf0 | Nicholas Feinberg | 2021-04-14 18:43:23 -0700 Many many new tiles (Sastreii) Naga body tiles, ironbound frostheart & beastmaster, and Kryia's mail coat. -------------------------------------------------------------------------------- d4db56bea9 | CanOfWorms | 2021-04-14 21:38:33 -0400 Minor death yak tile edit (Sastreii) -------------------------------------------------------------------------------- 3ebc474583 | gammafunk | 2021-04-14 20:19:05 -0500 Adjust an overflow altar and fix syntax For beargit_hepliaklqana_dungeon_heroes, the spawns at Depth D:7-9 were a bit too nasty, since, starting at that depth, we both introduced potential gargoyle and vampire ancestor monsters and placed two ancestor monsters instead of one. Adjust this vault to only place one ancestor monster at that depth, placing two spawns on D:10-D:12, and placing all three starting with D:13. Also mix the spriggan "hexer" ancestor on D:7-9, as this is easier than the vampire. Down-weight the molten gargoyle at the earliest depth it can appear. Also fix the use of backup monster syntax for KMONS. The backup separator `,` is split first, meaning my `/` alternates were getting parsed incorrectly, instead being treated as duplicate alternates. -------------------------------------------------------------------------------- 00e00afbbc | gammafunk | 2021-04-14 14:56:40 -0500 Toke up the bong cloud Add a checkerboard pattern to the vault floor in console and tiles and make the xom's chess piece always appear in the spot of the bong cloud king. Also disallow traps, vault rotations, and vault mirroring. -------------------------------------------------------------------------------- 402bc293fc | hellmonk | 2021-04-14 20:54:44 +0300 Very important vault. -------------------------------------------------------------------------------- a1f0d90d03 | advil | 2021-04-14 11:14:16 -0400 Fix a missed .ico reference for windows installer builds -------------------------------------------------------------------------------- 64c96e512b | advil | 2021-04-14 10:43:11 -0400 Standardize app icon location/naming These were a bit scattered, leading to potential confusion for downstream packagers (and me!). I'm not sure if dat/tiles is really the best place for this, because that will get copied into installs, but it is at least a place where the most icons already existed. As a convenience, this pulls in the (currently unused) 48x48 icon from #464. The svg in that PR was identical to the one that was in util/ so no need for an additional copy (possible that the copy in util was simply missed, it was far from an obvious location). For downstream packagers in the future: rather than adding duplicate icons to the repo, the preferred process would be to copy them out of `dat/tiles` similar to how the mac and windows builds now work, and to add any new icons to this location -- though I think at this point we might have enough to cover every base! (Commit caveat: not tested yet on windows, I'm going to let CI do that...) -------------------------------------------------------------------------------- 931a06d827 | advil | 2021-04-14 09:57:53 -0400 Allow specifying GAME at the make command line This is sometimes requested by downstream packagers in one way or another, e.g. as in #464. That PR hardcodes a change for tiles, which would be pretty reasonable if one were writing this from scratch. But, there are many secondary build processes that assume the binary is named `crawl`, so it's a bit tricky to make that change as requested without a lot of followup pain. Instead, this allows e.g. packagers to invoke the build process as: `make TILES=y GAME=crawl-tiles` to have a one-step build process that produces a differently-named binary without touching `crawl`. -------------------------------------------------------------------------------- 9df88ad596 | mgdelmonte | 2021-04-14 09:29:28 -0400 Added lua item.description Similar to the recently added `spells.describe` function, this adds the string `description` to the Lua item object. The description is the same text one sees in the UI. Helpful for players using scripts to evaluate relative item values for damage, noise, etc. [Committer's note: fixed submodules, imported commit description from PR. Resolves #1894.] -------------------------------------------------------------------------------- 2aa4ecdaef | CanOfWorms | 2021-04-14 01:42:01 -0400 Improve readability of some new tiles The new yak and wolf tiles suffer from a lack of contrast, which can make it difficult to make out against specific floor tiles. They also have an added problem of looking suspiciously similar to zombies due to their colours. Similarly, the new death yak, catoblepas and hound tiles have contrast issues. The following edits attempts to fix this issue by adding some bright areas to each tile to improve visibility against any floor tiles, as well as tweaking their colours to look less like derived undead. There are also some silhouette tweaks to help differentiate similar monsters, e.g. hounds have a smaller tail compared to wolves, and death yaks have larger and spikier fur compared to regular yaks. -------------------------------------------------------------------------------- ec49774fc9 | Nicholas Feinberg | 2021-04-13 20:24:33 -0700 Swap Static Discharge and Swiftness (hellmonk) Static Discharge to level 2, Swiftness to level 3. The former should help AE early game and give Vehumet more options for L2 gifts. The latter seems fine for an already strong spell. No tweaks to either spell at present. We can adjust damage and duration respectively as we see fit, but it felt fine in playtesting. -------------------------------------------------------------------------------- b56dff0882 | Nicholas Feinberg | 2021-04-13 20:12:31 -0700 Fix Freeze death messages Instead of being blasted by endoplasms, you're now properly frozen. This may cause horrible bugs with very old high score files, since I'm re-using the death type from when you could commit suicide with Ozo's Fridge. I hope not! -------------------------------------------------------------------------------- 3d650569c9 | Nicholas Feinberg | 2021-04-13 19:59:00 -0700 Increase early D book variety Reduce the rarity threshold for books to spawn on D:1. This allows the following set to be chosen (without passing an additional 1% chance) BOOK_MINOR_MAGIC BOOK_MISFORTUNE BOOK_CANTRIPS BOOK_CHANGES BOOK_MALEDICT BOOK_CONJURATIONS BOOK_NECROMANCY BOOK_CALLINGS Previously, only minor magic, misfortune, and cantrips could spawn on D:1. (Previous to that, no books could spawn until D:3.) -------------------------------------------------------------------------------- 750d543db3 | Nicholas Feinberg | 2021-04-13 19:22:59 -0700 New Djinni title: Weightless Champion They're clearly not middleweights! They hover! -------------------------------------------------------------------------------- 30011c25a7 | Nicholas Feinberg | 2021-04-13 19:19:28 -0700 Don't let fleeing monsters aggress (sahdkjhfkaj) Check the escape flag, not emergency, and add it to a few more spells that are appropriate to use in a pinch. -------------------------------------------------------------------------------- d1521fd518 | Kate | 2021-04-12 19:59:01 +0100 Update a comment -------------------------------------------------------------------------------- 133ce1e8f8 | Kate | 2021-04-12 19:59:01 +0100 Fix handling of ARTP_REGEN on amulets (#12561) -------------------------------------------------------------------------------- e5e4f5c7a4 | advil | 2021-04-12 13:13:52 -0400 Fix sacrifice validity issues + document A number of crucial checks for sacrifice validity were being done in `_random_valid_sacrifice`, which it turns out is not used for all sacrifices (only for ones that involve multiple possible mutations). This commit abstracts those checks into a static function and also applies them to all the other sacrifice possibilities in _sacrifice_is_possible directly. In addition, I've tried to add a few commenting hints throughout to help this code be more easily understood. Probably this could use a more thorough refactor. I've also added another check to ensure that piety is always 0 for useless skills; I don't think this should do anything on top of the other checks but it does seem like a useful sanitizer. Fixes mantis 12545 as well as a similar bug on felids. This happened when c3fac4b18bf removed a sac armour-specific check into _random_valid_sacrifice. I'm not sure if anything else would have been affected, because some or all of the other checks maybe were only relevant to health/essence/arcana mutations? But this will future-proof the code a bit as well. -------------------------------------------------------------------------------- a1c40ef19e | Nicholas Feinberg | 2021-04-12 08:16:13 -0700 New Lich tile (Sastreii) It's ready to make friends. -------------------------------------------------------------------------------- 39e2d67666 | advil | 2021-04-12 10:41:55 -0400 Try to fix homebrew for mac CI runner Homebrew is migrating to github for storage, because their previous provider is shutting off service May 1. There's a brownout right now "to warn users about May 1st as sunset date for Bintray" (where the warning takes the form to downstream users of a completely uninterpretable 502 error, but ok). This has revealed that the default mac runner uses a version of homebrew that is not updated with the correct download location. There's various plausible ways to fix this but in absence of any official guidance I'm starting with just inserting the official homebrew setup action in hopes that this fixes things up. -------------------------------------------------------------------------------- d8b25303e3 | advil | 2021-04-12 09:52:02 -0400 Tweak mac universal build targets The x86 binary seems to build just fine with an earlier min version even on an OS 11 arm device, so keep it consistent with our previous build process. I've only tested actually opening the resulting app down to 10.13 though. -------------------------------------------------------------------------------- 4a88dd77dc | Kate | 2021-04-12 09:27:13 +0100 Update starting screen and manual species descriptions The manual entries in particular could probably use a larger rework, but this should at least correct most of the outdated information for that section. -------------------------------------------------------------------------------- bf8bb431c4 | Kate | 2021-04-12 06:30:48 +0100 Tweak randart property availability Attempts to simplify which properties can appear on which types of equipment. Some properties which shouldn't appear on quick-swappable items can now generate on amulets as well as armour (in particular Rampage, Harm, Regen, -Cast and -Tele). rCorr can now appear on any item that doesn't have *Corrode. +Invis can now only appear on armour and amulets, to limit swapping to activate it. Some handling for *Tele is removed since it doesn't generate randomly. -------------------------------------------------------------------------------- bca1fa7cf8 | Kate | 2021-04-12 06:30:48 +0100 Don't consider flight an active ability For the purposes of enabling evocations training. -------------------------------------------------------------------------------- 37fc20d06e | Kate | 2021-04-12 06:30:48 +0100 Don't cancel evoked invisibility on unequip Since evoked invisibility now has a maxHP cost and is only available on scarves and artefacts, make it just behave consistently with invisibility from the potion or spell. -------------------------------------------------------------------------------- d37565c9fb | Kate | 2021-04-12 06:29:49 +0100 Remove the ability to cancel Portal Projectile There's not really any reason to allow micromanaging it in this way. -------------------------------------------------------------------------------- 825125a692 | advil | 2021-04-11 22:22:55 -0400 Fix mac tiles packaging Also, restructure mac crosscompilation to use submake, so that parallelizing helps without creating a mess. (Otherwise, the previous scheme parallelized across targets, leading to arch incompatibilities.) -------------------------------------------------------------------------------- 86988a4770 | advil | 2021-04-11 22:22:55 -0400 Disable universal CI builds for now These will need an 11.0 runner, which should come sooner or later. Until then, disable. -------------------------------------------------------------------------------- 8de5b75ad1 | advil | 2021-04-11 22:22:55 -0400 Attempt to add mac universal builds to CI Not sure if this will work at all (tbd if github CI runners support cross-compilation with an arm64 target). But it would be nice if it does! -------------------------------------------------------------------------------- 62f9e41276 | advil | 2021-04-11 22:22:55 -0400 Fix mac console releases in 10.15+ The location of Terminal.app changed, meaning that the launcher script didn't work at all. (Guess the lack of reports says something about how much this release build is used?) -------------------------------------------------------------------------------- 50225284d2 | advil | 2021-04-11 22:22:55 -0400 Support for mac universal builds targeting apple ARM It turns out that apple clang supports cross-compiling in an extremely straightforward way for arm64 vs x86_64; building a universal binary amounts to cross-compiling and then merging binaries with the `lipo` utility. This also means that producing a universal build on an up-to-date x86 device should also be possible (perhaps even in CI?). However, one caveat is that this forces our back-compatibility hand a bit -- I'm not exactly sure how much since I don't have the devices to test, but the choice of 10.12 is based on apple docs. I haven't removed the non-universal app building scheme so we would have the option of distributing multiple builds. Because of the somewhat baroque Makefile setup that exists for mac builds (possibly in combination with my limited knowledge of what the best way to accomplish this build might be) this is a relatively ugly patch. I've also found rebuilds to be a bit flaky for reasons I don't fully grasp, e.g. sometimes a full clean or clean-contrib is needed when changing targets. Some other minor cleanups, removing files that (as far as I can tell) are no longer used. -------------------------------------------------------------------------------- e866cc41d3 | Nicholas Feinberg | 2021-04-11 17:20:19 -0700 New dread lich tile (Sastreii) -------------------------------------------------------------------------------- b57c80000f | Kate | 2021-04-11 22:24:10 +0100 Fix tag_upgrade builds Also fixes Xom chesspieces not displaying on \. -------------------------------------------------------------------------------- e33e995840 | Kate | 2021-04-11 21:41:22 +0100 Add tiles for the seven-league boots (CanOfWorms) -------------------------------------------------------------------------------- 496ac5bf5d | CanOfWorms | 2021-04-11 02:20:13 -0400 Fix typo -------------------------------------------------------------------------------- 395adb26f7 | Edgar A. Bering IV | 2021-04-11 09:00:56 +0300 Replace wands of random effects with Xom's chesspieces This commit moves random effects to an XP evoker, and makes it non-targeted. This is partly for flavour (in order to re-use the amazing chesspiece tiles), and partly for mechanical distinction. Random Effects' effect is not something that would be good to teach monsters (turning random goblins into possible malmutators/paralysis checks etc.); and random effects was the only remaining wand that monsters didn't know how to use. This gives a clear distinction between misc evockers (monsters don't know how to use) and wands (monsters do know how to use). The change is also an experiment in high-charge misc evokers, to get a broader feel for how they play. This is a warm-up for possibly converting all wands to xp-charging. -------------------------------------------------------------------------------- ae3e1deef5 | Edgar A. Bering IV | 2021-04-11 08:43:04 +0300 Movement-adjust Palentonga roll Apply Chei, swiftness, leda's, ponderousness, water, lightning scales, and frozen movespeed modifiers to the roll time. -------------------------------------------------------------------------------- 78274972cd | Kate | 2021-04-11 06:13:51 +0100 Consider rampaging attacks to be hasty with Chei Rampaging movement was already considered hasty, but not if it was a step that resulted in an attack (which meant that the seven-league boots were never considered hasty). -------------------------------------------------------------------------------- d1b44281ea | Kate | 2021-04-11 05:47:04 +0100 New unrand: the seven-league boots Inspired by discussion on mainiacjoe's Wrath of Trog PR and sdynet's suggestion of giving it infinite-range rampaging, add a new pair of unrand boots with the full-LOS rampaging property. To prevent full-LOS stabbing they also wake monsters up when arriving next to them. -------------------------------------------------------------------------------- ec3affb84e | gammafunk | 2021-04-10 18:25:23 -0500 Some Snake vault revamps Remove weak snakes genus monsters from older vaults, bringing in the relatively newer Snake branch serpents in their place and adjusting monster counts where appropriate. Below are notes on additional changes beyond this for specific vaults: minmay_snake_entry_six_corridors: For this entry we use only mambas and moccasins, since it places in Lair. Concentrate the density of mambas a bit more towards the center, but allow them to also place down the corridors. Simplify the placement substitutions. minmay_snake_pond: Also add in sea snakes, placing only amphibious snakes in deep water. minmay_snake_river: Use only anacondas and sea snakes, so the snakes aren't trapped. Also add loot, so the reward of exploring this long water cavern isn't just some snakes and empty space. nicolae_snake_lava_pool: Also and replace lava snakes with salamanders. Also add more types of salamander genus monsters to vaults that have a salamander theme: nicolae_snake_salamander_stairs: Bring in one monster that can either be a salamander mystic or a tyrant, with chance of the latter increasing by depth. Simplify the monster placement to use a more typical if blocks conditioned on depth instead of calculating based on depth. Balance the salamander placement so that it scales better with depth; the old setup was very conservative about number of extra salamanders placed. In addition to the guaranteed salamander "boss", place 2 extra salamanders on average on Snake:1, 3 extra on average on Snake:2, and 4 extra on average on Snake:3. cheibrodos_snake_lava_hold: Buff monster placement so it better reflects the amount of loot rewarded, which is substantial. Incorporate a guaranteed tyrant and mix in a few additional mystics. -------------------------------------------------------------------------------- 57c748b47e | gammafunk | 2021-04-10 18:24:58 -0500 Cleanups for snake.des Add sectioning like we have for other des files, moving decorative vaults to their own section, and use default-depth instead of having all vaults specify depth. Clean up some glyph usage and statement alignment, as well. -------------------------------------------------------------------------------- 0e2820b0bf | gammafunk | 2021-04-10 18:21:55 -0500 Cleanups for spider.des Remove decor tags that I added to vaults, since we currently have no mechanism to place vaults according to this tag. Might be nice to adapt, improve, and generalize logic in swamp.des to place these in other lair branches. -------------------------------------------------------------------------------- 5e7b979315 | gammafunk | 2021-04-10 18:21:55 -0500 Reorganize shoals.des Add sections like we have for other des files, moving decorative vaults to their own section, and using default-depth, so vaults don't have to specify Shoals depth. Some light syntax cleanup as well. -------------------------------------------------------------------------------- f450e38dac | Kate | 2021-04-10 23:46:25 +0100 Update Shadow form status description (Mintice) To match the updated ability description. Closes #1893 PR. -------------------------------------------------------------------------------- 91442b771c | Kate | 2021-04-10 23:46:25 +0100 Tweak Cigotuvi's embrace description -------------------------------------------------------------------------------- 7a51355724 | Kate | 2021-04-10 23:46:25 +0100 Make Hailstorm affect icy creatures It mainly had this exception so that player IE could use it alongside Summon Ice Beast without damaging their allies, but with ice beast no longer in the starting book it's more consistent to have it just deal its icicle-flavoured damage across the board. -------------------------------------------------------------------------------- 386ccf399c | Neil Moore | 2021-04-10 17:15:02 -0400 Checkwhite (doh) -------------------------------------------------------------------------------- 8df42ad0ea | Neil Moore | 2021-04-10 16:57:41 -0400 Add basic unit tests for comma_separated_line and join_strings It would be nice to also test comma_separated_line's optional parameters, as well as comma_separated_fn, but that can come later. -------------------------------------------------------------------------------- 8328ce2b06 | Neil Moore | 2021-04-10 16:57:41 -0400 Avoid a "no previous declaration" warning when building tests -------------------------------------------------------------------------------- 1b49dfe8c2 | Edgar A. Bering IV | 2021-04-10 23:10:39 +0300 Trade Ice Beast for Metabolic Englaciation in the IE Start (Nomi) Summons have a way of defining a book, especially the mid-level options like Summon Ice Beast. Lighting Spire was briefly considered and then removed from the Air Elementalist start for just this reason. While the positional-magic changes to the book of Frost have made the book a bit less "the book of SIB" the background still very much ends up leaning on the spell. Metabolic Englaciation is an interesting spell and a good fit for the starting background. AOE slow interacts well with the other starting spells, but the price is sufficiently high and there's no direct damage, so it shouldn't outshine in the way SIB does. -------------------------------------------------------------------------------- 420bc2496c | Nicholas Feinberg | 2021-04-10 10:55:46 -0700 Re-tweak dead tree description Remove a double period. -------------------------------------------------------------------------------- a5483dda36 | Edgar A. Bering IV | 2021-04-10 20:48:40 +0300 Some petrified tree ruins for the desolation When the realm was turned to salt some of the trees became petrified with sediment instead of dying outright. Heartier plants were also stoned, while weaker ones were reduced to pillars of salt. Practically petrified trees are added two ways, first a chance to place scattered petrified trees among the ruins (just as the statues). Second a few petrified forest ruins as well as a temple to the twin gods vaguely suggesting a duality between them using trees. Each places desolation normal monsters and loot. -------------------------------------------------------------------------------- 97c99b9d80 | Edgar A. Bering IV | 2021-04-10 20:48:40 +0300 A petrified tree ecumenical altar -------------------------------------------------------------------------------- 68d955cad3 | Edgar A. Bering IV | 2021-04-10 20:48:40 +0300 Generalize the dead tree description They slowly migrated out of crypt since the days of evilmike's Crypt:5 ending. -------------------------------------------------------------------------------- 9aecc562e6 | Edgar A. Bering IV | 2021-04-10 20:48:40 +0300 Implement petrified trees Instead of a vault recolour, let's make petrified trees a first class feature. The name implies that they should behave like rock in some ways (be valid LRD targets, be diggable). Implementing them as vault re-tiles and re-names of statues does this, at the expense of clarity for console players. The expense is even higher for screen-reader players, who might go looking for 't' with a reading cursor only to find '8' instead. As a first class feature, petrified trees can behave like their woody bretheren in some ways, be vulnerable to LRD instead of fire, and interact properly with our feature naming/colouring/glyphing systems. On the vault decorating side, tree_dead is now the variant tile for the brown colour of trees, and no living tree is assigned darkgrey in console. There are also vague future plans that might use such a feature: i-x's Elven Crypt sketch or expanding Desolation into a (rune?) branch. This feature is implemented in the spirit of "if you build it they will come". -------------------------------------------------------------------------------- 94b7631ddb | advil | 2021-04-10 12:33:29 -0400 Fix a Na mutation physiology check In https://crawl.develz.org/tavern/viewtopic.php?f=17&t=27105 a player reported a naga getting hooves. I think this could have happened because MUT_CONSTRICTING_TAIL can be suppressed by forms, and the physiology code only checked the current status of that mutation. So, change the foot check to check innate status (i.e. constricting tail = no feet under any circumstances). The other two mutations here aren't suppressed, but it is still safer to do the check this way. -------------------------------------------------------------------------------- 5a74e75d8f | Nicholas Feinberg | 2021-04-09 21:07:57 -0700 Remove a hairtrigger assert Too aggressive and caused consistent crashes in local dev. -------------------------------------------------------------------------------- f56c19cca7 | Nicholas Feinberg | 2021-04-09 20:44:12 -0700 New dead tree tiles (Sastreii) -------------------------------------------------------------------------------- 3b3f0a9232 | Kate | 2021-04-10 02:30:09 +0100 Update draconian knight description They haven't specialised in necromancy for a while. -------------------------------------------------------------------------------- 86d13463b7 | Kate | 2021-04-10 02:23:34 +0100 Remove monster Ozocubu's armour Giving a couple of monsters extra AC that's meltable by fire damage isn't really worth the extra complexity, especially as it now behaves significantly differently from the player spell since it persists through movement. Instead just give the two monsters that had it (Fannar and draconian knights) a slight boost to their base AC (4 and 6 respectively, a slight reduction from the meltable 7 and 9 that they had previously). -------------------------------------------------------------------------------- e2a9cca30b | Kate | 2021-04-09 23:29:57 +0100 Give monster purple draconians an extra point of AC For some reason they had 1 less than other colours. -------------------------------------------------------------------------------- 0e6d9124c6 | RojjaCebolla | 2021-04-09 10:40:54 +0300 Unmeld statueform merfolk boots when leaving water Changing the check for temporary forms to "true" when leaving water keeps the boots from falling off. Closes #1875. -------------------------------------------------------------------------------- 80ed8d6641 | RojjaCebolla | 2021-04-09 10:40:27 +0300 Allow detransforming over water if flying Even if you're [de]transforming into a non-flyer over dangerous terrain, that's okay if you're currently in flight form. Closes #1881. -------------------------------------------------------------------------------- 638403bedd | Edgar A. Bering IV | 2021-04-09 10:34:01 +0300 Further tweaks to the IRC doc Closes #1867 -------------------------------------------------------------------------------- 9b11d684df | RojjaCebolla | 2021-04-09 10:30:55 +0300 Remove reference to bugzilla ...which is no longer a thing. -------------------------------------------------------------------------------- d9e0fce532 | Edgar A. Bering IV | 2021-04-09 10:29:44 +0300 Correct a typo (Yermak) -------------------------------------------------------------------------------- 5a49628fc9 | hellmonk | 2021-04-09 10:19:34 +0300 A couple ecumenical altar vaults with monsters [ Committer's notes: Closes #1872. Toned down monster and item placement. ] -------------------------------------------------------------------------------- b2bd10914a | gammafunk | 2021-04-08 23:41:12 -0500 Add salamander genus monsters to Snake rune vaults Now that we have salamander tyrants as top-tier Snake threats and thus a full set of salamander genus monsters at differing strengths, this commit incorporate these monster types into all Snake rune vaults. At the low and middle tiers, salamanders replace some plain naga and salamander mystics replace some naga mages so there's a 3:1 ratio of nagas to salamanders of the corresponding types. At the high end, tyrants replace some nagaraja with a 2:1 ratio. These ratios are similar to those in the population lists, although we're using more salamander mystics relative to naga mages than the population list does, which is more like 6:1. So nagas will still get most of the attention, especially since there are other types like warriors, sharpshooters, and ritualists where we make no corresponding replacement, but salamander monsters now play a more significant part in guarding the rune. I've done some reglyphing, statement reorganization, and syntax cleanup for these vaults. Some content notes on specific vaults: snake_pit_salamanders_mu: I've reversed the ratios to place more of the salamander monsters than their direct naga counterparts, although plenty of naga still generate in this vault. grunt_snake_rune_pools: This is a water-themed vault, so I've added a fire theme that gets chosen 1/3 of the time. For the original water theme, no salamander monsters place. For the fire theme, it places salamander monsters with a ratio like snake_pit_salamanders_mu, places salamanders instead of sea snakes, and replaces deep water with lava. johnstein_snake_rune_scales: This had a simple nagaraja as an alternate of Vashnia or as a backup monster if Vashnia has already placed. Hence I made the alternate and replacement have a 1/3 chance to be a tyrant instead of a nagaraja. -------------------------------------------------------------------------------- 64c4f523a5 | Kate | 2021-04-09 02:45:20 +0100 Fix a missing TAG_MAJOR_VERSION check -------------------------------------------------------------------------------- cfdca905f5 | advil | 2021-04-08 21:26:16 -0400 Fix line_reader wide char wrapping (dilly) If the line_reader wrapping code hit a wide character on the wrap column, the wrapping code would go into an infinite loop, and the process would need to be killed. This could be triggered in search as well when the previous search was the exact right length to put the cursor for a following search (since it repeats the previous search) at the wrap column, and the first character of the new search was a wide character, then the bug would trigger. Because webtiles still uses the line_reader console ui behind the scenes, the bug was triggerable in webtiles this way by just having strings of the right length. This probably didn't come up for normal usage, but apparently people use the search box to chat to spectators. (Even worse, a webtiles game killed by the server in this state doesn't save, so the bug can be used to roll back a game on demand.) This commit fixes the infinite loop bug in a pretty straightforward way (and also tries to better guard against infinite loops there). It also fixes some fiddly issues with cursor positioning in the case where the last character of a line is a wide char. -------------------------------------------------------------------------------- 8836bdb7d9 | Kate | 2021-04-09 01:41:22 +0100 Update dispellable monster enchantments Makes lots of monster enchantments dispellable that weren't previously. Some could be dispelled on the player but not on monsters, and some were monster-only magical effects that didn't have any particular reason to not be dispellable. Also makes some effects non-dispellable: the frenzy effect from darts (for consistency with other darts), and silver corona, pain bond and idealise (for consistency with other player god abilities). In a rare case of favouring the player over monsters, this also makes monster priestly buffs generally be dispellable - on the player, god-granted buffs can't be dispelled, but on monsters this isn't feasible to do consistently, since spells can be either wizardly or priestly in origin. The previous implementation was very arbitrary (for example, the regeneration portion of Trog's Hand could be dispelled but not the willpower; Donald's priestly might and haste could be dispelled, but deep elf high priests' brilliance aura couldn't be). -------------------------------------------------------------------------------- e92a7396d4 | Kate | 2021-04-09 00:56:22 +0100 Adjust monster fear display So that the "scary" descriptor doesn't fall out of sync with whether a monster is actually causing the player to be afraid. -------------------------------------------------------------------------------- 23531dd7ba | Kate | 2021-04-09 00:26:09 +0100 Allow activating flight while on liquefied ground It was already possible to fly out of liquefied ground by equipping flight equipment, so allow it for potions and batform as well. -------------------------------------------------------------------------------- ce7b1123cd | Kate | 2021-04-08 22:58:22 +0100 Adjust more !cancellation status descriptions Fixes mesmerisation not displaying in !cancellation's description when it would be dispelled, and special-cases transformations (which had buggy descriptions such as "you will no longer be appendages") and flight (which incorrectly claimed flight would be cancelled when the player had permaflight). -------------------------------------------------------------------------------- c46935d415 | Kate | 2021-04-08 22:58:22 +0100 Adjust dispellability of some durations Flash freeze and sticky flame are now dispellable, and the hidden "sickening" duration (applied by ancient zymes) is no longer dispellable. -------------------------------------------------------------------------------- c738167b05 | Kate | 2021-04-08 22:58:22 +0100 Fix protection brand status light (sim) -------------------------------------------------------------------------------- facc31910f | Edgar A. Bering IV | 2021-04-08 23:24:43 +0300 Remove some weight from the dummy faded altar vault -------------------------------------------------------------------------------- b020930490 | hellmonk | 2021-04-08 23:09:51 +0300 Several more ecumenical altar vaults Includes some very small vaults as well as a couple larger ones. [ Committer's note: small tweaks to code layout and tagging, trimmed a few size-wize and some minor tweaks to randomizations. This is all of the non-monster placing submissions from #1872 ] -------------------------------------------------------------------------------- 0721f309d1 | Shapermc | 2021-04-07 23:58:08 +0300 New ecumenical altar vaults The ruins of Machu Picchu inspired these sites for ecumenical altars. I am aiming to make them feel attractive on the outside to explore, and unique and random on the inside. [ Committer's note: Closes #1868. Tweaked some NSUBST lines and ensured connectivity. ] -------------------------------------------------------------------------------- 3444a674c5 | ukdong90 | 2021-04-07 23:58:08 +0300 Just one Gnrine [ Committer's note: Closes #1874. Tweaked and added some tagging. ] -------------------------------------------------------------------------------- 9722c47da7 | Aliscans | 2021-04-07 21:31:45 +0300 Remove Maud from montitle.txt. Maud has gone, and her ghost cannot use this title, so it's just clutter. -------------------------------------------------------------------------------- 0a00ce863d | Kate | 2021-04-06 02:36:33 +0100 Update SPWPN_PROTECTION's duration short_name To be more descriptive and to prevent other statuses (like "protected from fire") matching the webtiles check for increasing AC. -------------------------------------------------------------------------------- fc3203cb9b | Kate | 2021-04-06 02:21:55 +0100 Fix webtiles display of defense boosts Some of them had fallen out of date with duration-data.h changes. Closes #1832. -------------------------------------------------------------------------------- 6cd11ba223 | Kate | 2021-04-06 02:21:55 +0100 Update and extend some duration descriptions To make them more consistently use an adjective form for the short_text, and to add long_text for some durations without it. -------------------------------------------------------------------------------- c0143cd162 | Kate | 2021-04-06 02:21:55 +0100 Adjust some descriptions -------------------------------------------------------------------------------- 22995d6073 | gammafunk | 2021-04-05 18:36:20 -0500 Hilbert curve vaults for Spider by nicolae (12539) Moved these to their own file, since it's a large series of vaults and subvaults. I removed the placement down-weighting, since it's not an extreme vault in any way, and it has a uniq tag to prevent it from placing more than once. These vaults can create large rectilinear areas when the layout embeds them in large areas of rock. To some extend this might be helped by adding a "fuzzed" CLEAR border to the map, but that would apparently introduce potential closet areas, and it wouldn't fully solve the issue. Seems to be a problem all larger vaults have with the cave-like layouts especially, and I'm not sure if there's an easy solution to that. -------------------------------------------------------------------------------- 8736458e1e | advil | 2021-04-05 11:32:25 -0400 CI: pin a pip version that will work with py27 Pip support for py27 has been dropped entirely in pip 21, so we can't unconditionally upgrade. This invocation that I found on the internet somewhere may help. -------------------------------------------------------------------------------- 263514a223 | Nicholas Feinberg | 2021-04-05 08:02:43 -0700 Revert guardgolem dj restrictions (Yermak) Per request, let players experience the joy of the walking bomb. -------------------------------------------------------------------------------- e2d0b17c59 | gammafunk | 2021-04-05 00:59:50 -0500 A watery jumping spider vault by nicolae (12539) Uses subvaults for randomizing the terrain layout. I put this in its own file as there are over a dozen subvaults. No significant edits other using of MONS instead of KMONS and statement rearrangement. -------------------------------------------------------------------------------- 810843a28d | Nicholas Feinberg | 2021-04-04 22:39:50 -0700 Add petrified trees (Sastrei) And a vault to use em. -------------------------------------------------------------------------------- 5cb13e721e | Nicholas Feinberg | 2021-04-04 22:39:50 -0700 Replace trees (Sastreii) Spring has sprung! -------------------------------------------------------------------------------- f01432ee17 | Nicholas Feinberg | 2021-04-04 22:39:50 -0700 Make the Axe of Woe blow stuff up (Don't leave as many corpses around, mostly since they don't have tiles matching the living versions.) -------------------------------------------------------------------------------- f93f10960d | Nicholas Feinberg | 2021-04-04 22:39:50 -0700 Improve useless manual messaging -------------------------------------------------------------------------------- 88e0368d9b | Nicholas Feinberg | 2021-04-04 22:39:50 -0700 Tweak sac XL bonus piety Give ds a little less and give dj the same bonus, since they tragically lose their l9 spell. Mu lose their second necro enhancer but their existence is always suffering, so it's hard to tell the difference. -------------------------------------------------------------------------------- 6585edb262 | Nicholas Feinberg | 2021-04-04 22:39:50 -0700 Ban guardian golem for dj w/o summons This means guardian golem will very rarely show up in dj spell pools, since they'd have to get one of the few low-level summons before it. Seems OK. -------------------------------------------------------------------------------- d1b0476733 | gammafunk | 2021-04-04 23:28:24 -0500 Some monster vaults for Spider by nicolae (12539) Changes from the submission were minor. Removing some chaff monsters and introducing some randomizations. Also some of the usual syntax cleanup and the removal of DEPTH Spider, since we use a default depth now. Substantive changes described below: nicolae_spider_acid_house: Use acid dragons instead of harmless jellies. Don't place as many of these as the vault had placed jellies, but randomize placement numbers. nicolae_spider_baby_got_redback: Use a simple binomial for placement here, trimming the randomized edge placement glyphs so that the average is about the same. This allows for greater variation in the number of spiders placed. nicolae_spider_bzzzt: Randomize monster counts. nicolae_spider_not_touching_you: Change the SHUFFLE that sometimes mixes in orb spiders to a subst roughly giving the same average. The shuffle has hard to parse in terms of what average monster numbers ended up being. nicolae_spider_paper_wasps: Don't place junk scrolls, instead placing any scroll for all item placement, which is less spoilery. Adjust scroll placement so that we're not giving too many relative to monsters we place. Also randomize monster placement counts. nicolae_spider_scorpion_nest: Don't place ordinary scorpions, as those are far too weak. Place only emperor scorpions, thinning out numbers of monsters, and introducing randomization of monster count. nicolae_spider_swamp_cousins: Randomize monster counts. Mark the vault patrolling, so the non-branch monsters tend to stay in the vault. -------------------------------------------------------------------------------- e335657cc0 | gammafunk | 2021-04-04 23:28:05 -0500 Some decorative Spider vaults from nicolae (12539) No major edits to this set, only removing the Swamp DEPTH, as that's now covered by a default depth. This commit also updates the existing nicolae_spider_cling_ruins to use better glyphs and cleans up some syntax. -------------------------------------------------------------------------------- ed2907cb04 | Kate | 2021-04-04 22:05:56 +0100 Display when boulder beetles are rolling in the monster list And on examining them, since the information wasn't displayed very clearly in console in console. -------------------------------------------------------------------------------- 13725f1865 | Kate | 2021-04-04 21:07:13 +0100 Adjust a canned message for Djinn (#12556) -------------------------------------------------------------------------------- 5e6d803879 | Kate | 2021-04-04 19:40:46 +0100 Refactor handling for convoker recall (#8839) Fixes convokers being immune to cloud damage while reciting recall, but should behave the same otherwise. -------------------------------------------------------------------------------- cab673c142 | sdynet | 2021-04-03 08:45:01 +0300 Simplify and rename the Foxfire card This card had a complicated function. There are many different types of monsters that appear on this card, but there was no reason to do so. And some of the summoned monsters appeared hostile. The name was also not intuitive, making it difficult for users to understand what the card was doing. The user had too many considerations to make this card useful. So I'm going to simply trim this card. The basic feature of this card is that it summons many fast monsters. Therefore, I want to emphasize this characteristic clearly. Now this card summons a very large swarm of bees. In addition, I will change the name to the Swarm to make it easier to understand what this card is summoning. If this change is not enough for cards to be useful, I think we can mix one or two queen bees. [ Committer's note: Closes #1864. Squashed, rebased, tweaked commit message. ] Update crawl-ref/source/decks.h Co-authored-by: Edgar A. Bering IV -------------------------------------------------------------------------------- bd7d8addc9 | Edgar A. Bering IV | 2021-04-03 08:44:35 +0300 Update Yred's description -------------------------------------------------------------------------------- 35c287b088 | Kate | 2021-04-03 02:34:42 +0100 Update a check for whether a monster has a body Used for miscast messages and seemingly nothing else, but this check had fallen out of date with death cobs no longer being on '%'. Ideally these kinds of checks shouldn't be based on monster glyph at all since it makes them very prone to breaking. Also add animated armours, tentacles, and Murray to the list of monsters without a body. -------------------------------------------------------------------------------- 2be9358107 | Kate | 2021-04-03 02:34:42 +0100 Rebrace -------------------------------------------------------------------------------- 39567a0c06 | Kate | 2021-04-02 22:47:00 +0100 Give player ghosts the correct hands and feet Since the hand/foot names were based on glyph, they were buggy for player ghosts. Also give non-classed draconians hands instead of claws. -------------------------------------------------------------------------------- 955cc887ef | Nicholas Feinberg | 2021-04-02 14:17:36 -0700 Gnerf gweapons (split) oops -------------------------------------------------------------------------------- 90918d6062 | Kate | 2021-04-02 21:01:39 +0100 Don't make Yredelemnul forbid statue form Since the nonliving conduct is supposed to be gone. -------------------------------------------------------------------------------- bac1ddba90 | Kate | 2021-04-02 21:01:39 +0100 Adjust some artefact autoinscriptions Use Fly instead of +Fly since it's now a passive effect rather than an evocable one. Also adjust *Contam and *Drain to be just Contam and Drain, so that * consistently indicates an effect that triggers randomly while equipped (*Noise, *Corrode, *Slow, *Tele etc). -------------------------------------------------------------------------------- cbadc6d218 | Edgar A. Bering IV | 2021-04-02 19:56:42 +0300 One more credit -------------------------------------------------------------------------------- 0090c0f15f | Edgar A. Bering IV | 2021-04-02 19:29:45 +0300 Update the changelog through 0.27-a0-877 -------------------------------------------------------------------------------- f2a7138e7e | Edgar A. Bering IV | 2021-04-02 19:28:47 +0300 Another credits update -------------------------------------------------------------------------------- 71947af8c7 | Nicholas Feinberg | 2021-04-02 08:56:29 -0700 Fixup _is_damage_threatening (vt) Correct some old comments and fix an inverted conditional. The previous logic made damage more likely to be considered threatening the *higher* your hp was, which was not intended. -------------------------------------------------------------------------------- fdfa2cc8df | Edgar A. Bering IV | 2021-04-02 18:39:42 +0300 Update the credits -------------------------------------------------------------------------------- 80d416ef6e | kippig | 2021-04-02 18:24:12 +0300 Remove d:1 adder in vault -------------------------------------------------------------------------------- 64e2b160fe | kippig | 2021-04-02 17:08:30 +0300 Add diablo chruch arrival vault adds a church based on the tristram cathedral from the first diablo game. To the sides of the church there is a crypt and through the windows the player can see the lust forest they leave behind. There's also a baptism font (usually dry) because why not. -------------------------------------------------------------------------------- 695312e83b | stahara | 2021-04-02 17:03:27 +0300 RST manual: escape the vertical bar key for layer toggle -------------------------------------------------------------------------------- 6d840ccb4b | Edgar A. Bering IV | 2021-04-02 16:40:36 +0300 New ecumenical altar vaults from ShaperMC -------------------------------------------------------------------------------- c4bfac4c02 | Edgar A. Bering IV | 2021-04-02 10:46:33 +0300 Correct exaggerated poison displays This is a 7 year old edge case that was being hit significantly more often and more dramatically by the acceleration of poison. -------------------------------------------------------------------------------- 165b36e3f0 | Kate | 2021-04-02 02:24:03 +0100 Make WJC Heavenly Storm grant bonus EV For such an expensive active ability, it was fairly difficult to use effectively, since it tries to encourage staying in combat against multiple foes for an extended time (while making a lot of noise) to gain its benefits. Grant it a defensive bonus alongside the offensive one to encourage that use, and slightly reduce the noise to the level of normal shouts. -------------------------------------------------------------------------------- f81f37f261 | Kate | 2021-04-02 01:36:49 +0100 Add a Jiyva mutation to engulf monsters in ooze Applies the engulf effect to applicable monsters (which is approximately "living/demonic/holy monsters which are the same size as the player or smaller") when dealing them damage in melee. As long as they remain adjacent to the player, engulfed monsters take asphyxiation damage over time and are silenced. -------------------------------------------------------------------------------- 4f44552337 | Kate | 2021-04-02 01:25:15 +0100 Allow engulfing constricted targets Engulf uses similar checks to constrict but should be able to be applied independently. Also allow actors which are already constricting something to engulf as well (not relevant for any existing monsters, but relevant for player engulfing in an upcoming commit). -------------------------------------------------------------------------------- 7aa06ce512 | Kate | 2021-04-02 01:25:15 +0100 Don't increase engulf damage against water-vulnerable creatures Since the damage is from being unable to breathe while engulfed (rather than than being explicitly water-flavoured damage like a Primal Wave for example), make it deal the same damage to any target that needs to breathe air. Also add a message when the damage is dealt. -------------------------------------------------------------------------------- 357e685177 | Kate | 2021-04-02 01:25:15 +0100 Improve some engulf handling Improve some messaging to apply more generally to both water and slime, and fix some checks being wrong for water-vulnerable creatures. -------------------------------------------------------------------------------- 801a00d0d6 | Kate | 2021-04-02 01:14:43 +0100 Adjust a potion message -------------------------------------------------------------------------------- ea5aba7016 | Kate | 2021-04-01 22:32:00 +0100 Add some mutation comments -------------------------------------------------------------------------------- b963882b24 | Kate | 2021-04-01 22:32:00 +0100 Reduce shoutitis and no potion heal from 3 to 2 levels Both of these are fairly noticeable bad mutations, but they don't gain much from having so many distinct levels. Reduce them both to 2 level mutations. Shoutitis 1 has the frequency of old level 1 (and the volume of old level 2), and level 2 is equivalent to old level 3. No potion heal now reduces healing by 50% per level instead of 33%. -------------------------------------------------------------------------------- 9529aa9bf3 | gammafunk | 2021-04-01 01:59:26 -0500 Reorganize and fix up Spider and Swamp DES Add sections to spider.des for entr/decor/monster/rune vaults, moving vaults to their appropriate sections. Set a default depth of Spider for non-entry vaults, removing this before the rune vaults, which use PLACE instead of depth. Remove DEPTH: Swamp from vaults that now no longer need this. Reglyph and clean up syntax in a few decorative vaults; others need this as well, but I've just done these few for now. Fix the section description for decorative vaults in swamp.des -------------------------------------------------------------------------------- af99fae3ca | Edgar A. Bering IV | 2021-03-31 21:20:45 +0300 Disable ood fuzzing for 8 and 9 spawns. 8 and 9 are specific requests by vaults for an out-of-depth monster with a certain depth modification. Fuzzing can, early on, turn a 9 into an 8. This was previously less noticable in early D because of the non-monster weight in the spawn table. With that removed a D:4 9 can get fuzzed into something worse than an 8 on a more frequent basis. 0 is not adjusted since it is supposed to be a "typical" spawn, so should behave just as if the dungeon builder is placing the monster. -------------------------------------------------------------------------------- 6cdc3c0863 | Edgar A. Bering IV | 2021-03-31 20:01:04 +0300 Check explosions separately from pathing for danger (12477) -------------------------------------------------------------------------------- 7f24984a57 | Edgar A. Bering IV | 2021-03-31 19:51:09 +0300 Trigger location effects after a wind blast (12474) -------------------------------------------------------------------------------- 37602865fa | Edgar A. Bering IV | 2021-03-31 18:50:38 +0300 Interrupt travel when blinked by a dispersal trap (12491) -------------------------------------------------------------------------------- dfebced566 | Edgar A. Bering IV | 2021-03-31 18:42:20 +0300 Don't prompt with a silenced singing sword (12549) -------------------------------------------------------------------------------- d46e367e5e | Edgar A. Bering IV | 2021-03-31 17:01:21 +0300 Grant wereblood bonuses in agreement with the description (12546) -------------------------------------------------------------------------------- 62f096ca86 | Edgar A. Bering IV | 2021-03-31 16:52:25 +0300 Add some transparency tags to ice cave entries (12503) -------------------------------------------------------------------------------- 031e6c2d63 | Edgar A. Bering IV | 2021-03-31 16:06:48 +0300 Remove a duplicate entry in zap-data -------------------------------------------------------------------------------- 6be897d7e5 | Implojin | 2021-03-31 13:48:14 +0300 Add some missiles to default autopickup Curare, atropa, dispersal, and throwing nets are all highly useful items that can save characters. This commit adds them to autopickup by default. (9 years ago, curare was removed from autopickup in e11df56, for reasons that have since been obviated. Everything old is new again!) Closes #1849 -------------------------------------------------------------------------------- b79eb4bb99 | gammafunk | 2021-03-31 04:04:04 -0500 More Swamp vaults from nicolae (12518) A set of decor vaults missed from the last round of merging nicolae's Swamp vaults, and a set of vaults that place monsters. There are some usual edits to syntax, but nicolae kindly reglyphed and made various other requested changes already, so these were not extensive. Below is a description of content changes to the monster vaults: nicolae_swamp_necromancer_hut: Remove the trivial zombies, such as swamp drake and water moccasin. nicolae_swamp_catching_bugs: For the bugs, replace the hornets with a small chance for spark wasps. nicolae_swamp_flooded_prison: Replace the trivial spectres with branch appropriate spriggan rider and spriggan berserker ones. Remove shadows and wraiths, opting for freezing wraiths and will-o-the-wisps, but placing fewer of them. nicolae_swamp_husk_halls: Randomize the number of husks so that we guarantee two but might place one in all four hallways, and put randomized 0 spawns in each hallway, a bit closer than the husk, so we the player can try to use the husk to their advantage. nicolae_swamp_necromancy_gone_wrong: Don't mark the hydra chamber as no_tele, since this is not a teleport closet, just a nasty area. Rework item placement to use more good_item and mix in better loot potions/scrolls in the relevant items, but make all but the necromancy book have a 50% chance to place. Spread any generated items out over the chamber instead of placing them in a big pile. nicolae_swamp_standing_stones: Make potions and scrolls loot of better types and spread out loot items instead of placing in a pile. nicolae_swamp_super_fun_site: Place miasma clouds over water instead of using toxic bog features, which players won't have seen outside of the spell. nicolae_swamp_spooky_pond: Mix in some spooky bog bodies to go with the spooky wisps. -------------------------------------------------------------------------------- 91c9f2ae56 | gammafunk | 2021-03-31 04:03:15 -0500 Remove unnecessary DEPTH statements These swamp vaults can use the default depth, which is Swamp, instead of setting it on their own. -------------------------------------------------------------------------------- 3f109eccf5 | Aliscans | 2021-03-31 11:55:46 +0300 Make acid walls "melt" icy monsters instead of burning them. Change the message when slime_wall_damage() affects an icy monster from (e.g.) "The wall burns the fire elemental shaped block of ice!" to "The wall melts ...". Ice doesn't burn. Remove the message for when acid walls affect the player, as you.splash_with_acid() hasn't used custom messages since 91b40731d1. -------------------------------------------------------------------------------- 9fcfa7f03e | Edgar A. Bering IV | 2021-03-31 11:18:58 +0300 Update altar vault guidelines -------------------------------------------------------------------------------- b608904985 | Edgar A. Bering IV | 2021-03-31 10:52:28 +0300 New ecumenical altar vaults We still need more of these, but this is a start. A collection of small vaults placing the faded altar plus a bit of decor, some of which suggests an old temple (webs, ruins, etc.) or place of worship. There still aren't enough, so to keep them fresh the weight of the basic vault is increased. Hopefully by the next release we'll have plenty of vaults. -------------------------------------------------------------------------------- 9d1eab6076 | Edgar A. Bering IV | 2021-03-31 10:51:54 +0300 Adjust existing ecumenical altar vaults Add a bit more randomization, fix global header style. -------------------------------------------------------------------------------- 634789ea28 | Edgar A. Bering IV | 2021-03-31 10:51:54 +0300 Move ecumenical altars to their own des file -------------------------------------------------------------------------------- b7e72e7e12 | Edgar A. Bering IV | 2021-03-31 10:51:54 +0300 Enforce overflow temple depth restrictions in the builder Overflow temples can place one of two ways: via the overflow temple placement mechanism and as depth-selected minivaults with the uniq_altar_FOO tag. This commit constrains overflow temples to be eligible for minivault placement only after the end of overflow temple depth. On the des side this makes vault specification cleaner and future robust; overflow vaults no longer need to know the specific overflow temple range. Not all overflow vaults could place as minivaults, and a minivault placement would override the later overflow placement, which meant some downweighted special vaults were extra rare (sad!). Now they work together a bit better For dungeon geography and gameplay, the combination of this change with the preceeding sequence adjusting altar placement means that each temple god gets exactly one guaranteed altar in the overflow range. This should give a bit more verve to the milestone of finding a god in the early game as well as equalize the chances of finding a given god by D:10, and make the chance early altar and early ecumenical altar feel more stand-out. -------------------------------------------------------------------------------- 594c3d14ea | Edgar A. Bering IV | 2021-03-31 10:51:54 +0300 Shift overflow temples deeper, increase ecumenical altars Ecumenical altars suffer from the fact that they don't always show up before identified altars; the choice becomes more about a conduct than the chance to gamble for a serious advantage. This commit moves all overflow altars to D:3-. Combined with the previous commits, this means that the only way for an altar to appear on D:1-2 is via the basic_altar vault, which is given an explicit chance of 33% on D:2. Ecumenical altars are given a 50% chance for each of D:1-3. This makes for an 87.5% chance of seeing one, and a 50% chance of seeing one before any identified altar. There is some concern that placing an ecumenical altar on D:1 will encourage startscumming, but a player who would quit on D:1 because they didn't like their ecumenical roll would probably also quit on D:2. -------------------------------------------------------------------------------- 6dff9fb094 | Edgar A. Bering IV | 2021-03-31 10:51:54 +0300 Fix some item specs in altar vaults -------------------------------------------------------------------------------- a37c644b7a | Edgar A. Bering IV | 2021-03-31 10:51:54 +0300 Fade the altars in serial_column_ruins It fits so well with the theme, and also the strict control over identified altar placement in D:1-10. -------------------------------------------------------------------------------- ef54952615 | Edgar A. Bering IV | 2021-03-31 10:51:54 +0300 Remove decorative altars from early D vaults This either adds conditional placement, simply deletes the altar, moves the depth range out of D, or turns the vault into a proper overflow temple depending on the vault tweaked. This is part of a sequence of commits giving the dungeon builder more control over the placement of early altars where they have a large strategic impact. -------------------------------------------------------------------------------- aef5f389f5 | Edgar A. Bering IV | 2021-03-31 10:51:54 +0300 Move non-overflow altar vaults out of D To give more fine-grained control over altar placement in D. Some generic vaults become overflow temples, the rest have their placement adjusted. This change is not applied to non-temple gods, who are special and can do their own thing. -------------------------------------------------------------------------------- 3f101e3ede | Edgar A. Bering IV | 2021-03-31 10:51:53 +0300 Place fancy overflow temples only as overflow temples Most of these were missing one of the two overflow tags, so could only place as minivaults (sad!). These are flashy, to keep them from getting over-used now that their tags are fixed I've made them all overflow-only for the time being. If they become depth-eligible again then the overflow_depth function in overflow.des will need to be moved into an accessible scope. -------------------------------------------------------------------------------- d615d5975c | Edgar A. Bering IV | 2021-03-31 10:51:53 +0300 Unify and overhaul depth and tags of overflow temples Some old overflow temples were incorrectly tagged, and weren't treated as overflows; or had DEPTH specifiers and interest checks as if they were aimed to place as mini-vaults but lacked the necessary tag to be eligible for placement. This commit adds a section to the vault guidelines explaining how to tag and annotate overflow temples and edits the existing temples to fix up some old ones and bring everything into compliance. It also adds some future proofing for overflow temples that include a DEPTH specifier, by having all of them call `: overflow_depth(_G)`. This allows for easier global changes to overflow altars (coming soon!). -------------------------------------------------------------------------------- fc908b8576 | Nicholas Feinberg | 2021-03-30 20:27:24 -0700 Flip turn dragons rightways (gammafunk) Also brighten up swamps and fires. -------------------------------------------------------------------------------- 365ecc8b8e | Nicholas Feinberg | 2021-03-30 20:13:52 -0700 Many new tiles (Sastrei) Destroyer, Rockslime, Lom Lobon, most dragons, and Crazy Yiuf. Plus a tweak to the hound tile, and I removed fire drakes while I was at it. I made minor cosmetic edits to some tiles. Sorry, Sastreii! -------------------------------------------------------------------------------- cb938e01ab | Nicholas Feinberg | 2021-03-30 19:50:08 -0700 Finish the preceding commit Oops. -------------------------------------------------------------------------------- 0ae26c12d3 | Nicholas Feinberg | 2021-03-30 19:45:59 -0700 Dehydrate quicksilver oozes Don't claim they engulf the player in water. -------------------------------------------------------------------------------- d5c7c66f0a | Nicholas Feinberg | 2021-03-30 12:42:53 -0700 Nerf hobgoblin damage a little bit Pulling back on very early-game lethality again. -------------------------------------------------------------------------------- 39f900b3a3 | Nicholas Feinberg | 2021-03-30 12:42:53 -0700 Remove D:1 halberd gnolls In line with removing d:1 gnoll bands and gnolls with nets, give players a little longer before experiencing the true, unadulterated terror of Gnoll. (Unless they're playing gnollcrawl.) -------------------------------------------------------------------------------- a1c911b16d | advil | 2021-03-30 10:40:16 -0400 Tweak the fsim test This test was using a mifi and is therefore impacted by shield skill in a way that is somewhat orthogonal to the point of the test (e.g. the results changed with 0b64aa269c0). Switch to a migl. -------------------------------------------------------------------------------- 6b54cd8ccd | advil | 2021-03-30 10:20:12 -0400 Fix a warning -------------------------------------------------------------------------------- 8289197e94 | Aliscans | 2021-03-30 08:16:52 +0300 Disable spellcasting skill gain for new berserkers. If automatic training was set, and the skills the player actually used all reached 27, the game would start to train the other skills, including the magic skills. This means that someone could offend Trog by training magic skills without casting a spell or visiting the skill management screen. This change turns magic skills off at the start of the game for a berserker (as already happened when you joined Trog at an altar), and avoids that possibility. -------------------------------------------------------------------------------- bb90f61fe4 | advil | 2021-03-29 19:33:39 -0400 sdl2 contrib: fix the build for ARM macs (12407) Basicaly just a missing include, seems to run fine with this fix. -------------------------------------------------------------------------------- 08ebd167ff | advil | 2021-03-29 19:02:23 -0400 libpng contrib: Force-disable neon optimizations on ARM (12407) This is apparently buggy, and preventing M1 builds from succeeding. -------------------------------------------------------------------------------- dbc16e4eb9 | Kate | 2021-03-29 23:07:23 +0100 Fix randart flight property not granting flight (MarcB) -------------------------------------------------------------------------------- ca8104f8d5 | Kate | 2021-03-29 21:20:09 +0100 Revert "Prevent draconians from getting armour troves" This commit didn't actually properly do the thing it claimed to do (trove_armour_1 could generate for draconians), and it also wasn't really necessary since draconians would still generally get lots of good aux armour from these troves. It also tried to prevent draconians from being asked for enchanted dragon armour as a trove toll, but this only worked on always flying, like Djinni. * Emergency flight and potions should be unchanged. * the abilities to start and stop flying are removed, as is ATTR_FLIGHT_UNCANCELLABLE and ATTR_LAST_FLIGHT_STATUS. The one remaining special case I know of (pointed out by Kate) is that Op and Mf have incentives not to fly; I'll deal with that in a separate commit. The old flying code had so many weird interactions that there may still be special cases that don't work right here... -------------------------------------------------------------------------------- be893936b8 | Edgar A. Bering IV | 2021-03-27 23:35:54 +0300 Another poison correction -------------------------------------------------------------------------------- 029fd2ff89 | Edgar A. Bering IV | 2021-03-27 20:45:29 +0300 Correct some poison magic numbers (12544) -------------------------------------------------------------------------------- 212f9d8316 | Edgar A. Bering IV | 2021-03-27 19:56:08 +0300 Correct static discharge resist message order -------------------------------------------------------------------------------- e6ed7f9ff8 | Edgar A. Bering IV | 2021-03-27 19:56:08 +0300 Correct Freeze messaging Correctly display attack punctuation for players and monsters, and appropriately print resist checking messages when players are hit with monster Freeze. -------------------------------------------------------------------------------- 0f416b50e7 | advil | 2021-03-27 12:41:04 -0400 Rename and document a #define for downstream use Downstream packaging targeting reproducible builds may set file mtimes to a stable value, e.g. 0; see #1702. Unfortunately .des cache invalidation relies on mtime, so this ends up breaking under these build conditions. This commit is aimed to refine and simplify the advice I gave in that issue thread: versioned des cache directories are now our (or at least my) official recommendation for dealing with this situation. This change makes it clearer that this option is not tied to DGL, and provides a hint about the option directly in the Makefile. I've tested this and it seems to work fine on its own. Resolves #1702 -------------------------------------------------------------------------------- 27d10ad80f | Nicholas Feinberg | 2021-03-26 18:35:05 -0700 New Iron Golem tile (Sastrei) Plus, de-rim Manticore. -------------------------------------------------------------------------------- f314fb5061 | Nicholas Feinberg | 2021-03-26 17:32:17 -0700 A bevy of new tiles (Sastrei) Goliath Frog, Manticore and Quicksilver Ooze. Get your mind out of the gutter! -------------------------------------------------------------------------------- e5c3fa52fd | Neil Moore | 2021-03-26 16:45:53 -0400 Use shrunken reencoded molluscs That is, convert the smaller version of title_anon_octopus_wizard.jpg to a .png. Not only does the Makefile assume .png for title screens, but client.html was already referring to the (missing) .png file. Also, remove the larger-resolution copy of the .jpg. -------------------------------------------------------------------------------- 38526b5af1 | Kate | 2021-03-26 20:43:44 +0000 Don't allow force-targeting spells when Xom is casting them Since it'd allow cancelling out of the spell. -------------------------------------------------------------------------------- d86de039f5 | Nicholas Feinberg | 2021-03-26 13:08:46 -0700 New octopus wizard title screen Source: https://crawl.develz.org/tavern/viewtopic.php?f=17&t=23228&p=308883&sid=73a8cc49 84fe0311df8fb40206007884#p308883 CC0'd by artist. Asked not to be credited. -------------------------------------------------------------------------------- 8e0dbb66be | advil | 2021-03-26 12:51:12 -0400 When force-swapping a ring, skip unequip effects (11879) Sacrifice hand, then there is a free ring slot, would apply unequip effects on the move, setting up an odd situation for players wearing only one ring on the sac hand target; they should have taken steps to get the ring on their other hand (e.g. by juggling rings, or setting jewellery_prompt = true). I had previously semi-resolved the most annoying point for this bug by making the default ring hand distinct from the default sac hand, but this led to display issues. This commit resolves the bug in a different way, by basically force-moving a ring in this situation while not applying penalties. It also doesn't prompt the player to rewear the ring if there is a bad inscription. Basically, this is intended to make sac hand have no effect on any scenario where a player is wearing one ring (though there is still some messaging). -------------------------------------------------------------------------------- a16a6a3dab | advil | 2021-03-26 12:51:12 -0400 Refactor some arm order stuff, again This changes how arm order is handled from efe1b4415. There, I tried to make things more consistent by providing the arm to be sacrificed as the last element of a vector. This unfortunately has run up against inconsistencies with display order, where it is better to show the left arm first (when there are two). Instead, localize the missing hand calculation to species.cc. It might be better to change the sac hand target, but I don't want to deal with the save compat involved. This commit is a regression for 11879; the default ring target is now once again the left hand (also the sac target). -------------------------------------------------------------------------------- 8ff0b3a6de | Nicholas Feinberg | 2021-03-26 07:42:44 -0700 Tweak Dj job recs Don't recommend berserker, do recommend transmuter. Might be fun? -------------------------------------------------------------------------------- 6bb3289e1e | gammafunk | 2021-03-26 00:16:58 -0500 checkwhite player.cc -------------------------------------------------------------------------------- dcf64ac7a9 | gammafunk | 2021-03-25 22:25:00 -0500 Updates to Hell entry and vestibule vaults In line with the removal of weaker Depths monsters, update the Hell entry vaults to place nothing worse than a tier 3 demon-wise and to update other monsters where appropriate. Likewise update the vestibule subvaults in a similar fashion, so that players coming from Depths won't be confronted with e.g. white imps. The Hells still place plenty of chaff monsters, but those at least have Hell effects and other much stronger monsters we don't use the in the vestibule. -------------------------------------------------------------------------------- cb5310748e | gammafunk | 2021-03-25 22:25:00 -0500 Updates to monsters in Depths encompass vaults Some changes to three Depths encompass maps in line with updates to vaults in 9d5772c0. This commit only handles encompass maps; future commits will address float and minivaults for Depths. map lemuel_river_lethe This vault has some idiosyncratic monster placement that's definitely due for an update. Replace the arrival hell hounds with spectral monsters, reinforcing the undead theme the map has, and replace weak spectrals and simulacra with spectrals drawn from the Depths monster set, which will generally be strong. Remove weaker monsters such as dancing weapons and skeletal warriors, giving suitable upgrades such is iron dragons, vampire knights, vampire mages, and deep elf death mages. Slightly buff loot in a couple places. Remove the guaranteed potion of brilliance under each orange crystal statue, which is not necessary and also a relic from when that potion granted Int. Reglyph certain symbols that override existing definitions and simplify shuffle/subst/nsubst. box_level_dp Update this map to have more coherent monster sets and loot distribution. For the outside area, instead of four monster themes of elves, tengu, spriggans, and a mashup of giants and humans, make two themes of elves+tengu and spriggans+giants. These new sets use only monsters appropriate for Depths, instead of pulling in lower-HD monsters from previous branches. Also update the bee area to have only meliai and a smattering of spark wasps, since killer and queen bees pose no threat. The meliai run the hive, but some wasps are raiding it! Update the potion loot in this area to not be only ambrosia, but any kind of potion, just with less instances. Also remove the guaranteed reflection amulet and scrolls of teleportation loot items in the central box. Both are vestiges of earlier versions of crawl where the teleport traps worked out of LOS to disperse monsters. I'm not sure that the teleport scrolls ever did anything meaningful, but the reflection amulet was actually stasis at one point, presumably to allow a (single) monster to be immune to the traps. In any case, neither need to be explicitly given as loot; the vault gives a high amount of loot as it is, including 16 superb_item. hangedman_crystal_crosses_colossus Minor updates to monster lists. Replace nagaraja, which didn't meet the flavor text's described theme of elemental magic, with the new salamander tyrant. Also replace lower-level elves with deep elf elementalists. Former can't use their awaken earth gimmick, but they can hit harder with fireball and likewise have freezing cloud. Replace weak simulacra with stronger ones, shock serpents with spark wasps, since we have those for Depths now. Remove mana vipers, since those are relatively weak and don't match the elemental theme. hangedman_spin_cycle Update the Depths and shared Dungeon/Depths monster sets. For the latter, replace boggarts with glowing orange brains, orc knights with spriggan berserkers, and naga mage with salamander tyrant. For the Depths-only sets, replace deep elf knights with deep elf death mages and orc high priests with spriggan air mages. Also replace death knights with liches and merfolk aquamancers with tengu reavers. Finally, move a lua block into braces. -------------------------------------------------------------------------------- a30e6d9879 | gammafunk | 2021-03-25 22:25:00 -0500 Rework an altar vault The vault due_chaos_kobolds placed kobolds with distortion or chaos weapons in late branches for flavor, but we're moving away from chaff monsters in late game areas. This commit reworks the vault to be a runed door vault that places in most of Dungeon, using depth-appropriate Kobolds with ugly thing monsters mixed in for later depths. -------------------------------------------------------------------------------- bcfb333f5d | gammafunk | 2021-03-25 22:25:00 -0500 Make some monster item functions more available The function ghost_monster_weapon() had been previously used only for ghost vaults, but this functionality is useful for any vault that wants to specify thematic monster weapons. This commit moves the function and associated table to dgn.monster_weapon() and fix up documentation of both the table and the function. Also rename random_item_def() to dgn.random_item_def(), to be consistent with use of the dgn namespace. Adapt all the vaults currently using these functions to the new names. -------------------------------------------------------------------------------- a1918b6f54 | kippig | 2021-03-25 22:25:00 -0500 Revamp Depths vaults to match the monster table Committer's Note: This commit updates some Depths vaults to replace relatively trivial monsters with more suitable ones, in line with recent changes to the Depths monster lists. I've cleaned up this commit's title, cleaned up a comment for grunt_enter_depths_giant_problem, and tweaked the monster list in hangedman_depths_entry_civil_slaughter in addition to what was done in the original commit. Subsequent commits make further updates to these vaults and other Depths vaults not covered by this commit. Closes #1791. -------------------------------------------------------------------------------- b2075fc2c6 | Nicholas Feinberg | 2021-03-25 20:04:18 -0700 Simplify Tutorial 2 Devolve the more complex endoplasm into a simpler ooze. -------------------------------------------------------------------------------- 3740f5f239 | Nicholas Feinberg | 2021-03-25 19:55:18 -0700 Improve dj msg order (rydianmorrison) Memorize the spell after telling the player about it, so that associated messages (e.g. rcfile remapping spells to another letter) print after you learn what the spell in question is. -------------------------------------------------------------------------------- d11a64c996 | advil | 2021-03-25 22:20:15 -0400 Don't generate .map files in normal circumstances These don't seem very useful these days; the code predates webtiles and also probably easy modern screenshotting. The underlying code is still used in various debug / crash scenarios. -------------------------------------------------------------------------------- eb8d7bc690 | Kate | 2021-03-25 22:46:58 +0000 Restore Majin-Bo's intended behaviour at low HP (PleasingFungus) Make it reduce HP to 1 if the full cost can't be paid, instead of preventing casting at all if HP is too low. -------------------------------------------------------------------------------- dc96bc62b2 | Kate | 2021-03-25 21:51:14 +0000 Fix compilation Whoops. -------------------------------------------------------------------------------- 3c0359225a | Kate | 2021-03-25 21:49:26 +0000 Don't allow paying more HP than you have with Majin-Bo equipped -------------------------------------------------------------------------------- 7beb378477 | Kate | 2021-03-25 20:28:52 +0000 Update Shadow Form description -------------------------------------------------------------------------------- df32bb633b | Nicholas Feinberg | 2021-03-25 12:22:37 -0700 Remove endoplasms' will Accidentally left in when they were turned into earlier-game monsters. Now Will:20 -> Will:0, matching other D:1 foes. -------------------------------------------------------------------------------- 37402fc473 | Nicholas Feinberg | 2021-03-25 08:57:23 -0700 Add good dogs (Sastrei) New tiles for hound, wolf, gnoll sergeant, gnoll shaman, and Grum. -------------------------------------------------------------------------------- 3e622ea735 | advil | 2021-03-25 08:43:02 -0400 Prevent crashes on unknown score species during death This should fully close the barn door behind the recent Dj score crashes (i.e. prevent these crashes from happening in the future if the old species enum ever again doesn't line up with what's on some server). -------------------------------------------------------------------------------- aaee5cf45b | Nicholas Feinberg | 2021-03-24 20:00:34 -0700 Many meat tiles (Sastrei) Bag of meat, meatzerker, large bag of meat, meat hydra, scourge, aaand... The Meatlord. -------------------------------------------------------------------------------- 49a6215e69 | Nicholas Feinberg | 2021-03-24 19:40:17 -0700 Raise Manifold Assault to level 5 It's a very fun spell and people have been putting it to great use, but it should require a little more investment to cast than it currently does. -------------------------------------------------------------------------------- dbedfec26c | Nicholas Feinberg | 2021-03-24 19:37:13 -0700 Buff gnolls (Sastrei) New tile! -------------------------------------------------------------------------------- 74b304f62e | advil | 2021-03-24 21:46:18 -0400 Improve automagic_stop behavior for Dj This lets this option work for Dj based on hp percentage, allowing players to set a distinct autofight threshold for autocasting vs general autofight on this species. Along the way I did fix automagic for Dj, deprecated though it is. But, automagic may eventually just get removed. Resolves #1851 -------------------------------------------------------------------------------- 2a0442d20d | advil | 2021-03-24 19:19:57 -0400 Save abyss on AK start Before this commit, this abyss was in a precarious state: generated, but not saved to disk. An AK start crash (of the kind that doesn't save the game) could load to a load that put the character in a featureless void, crashing immediately (except in wizmode). A previous commit does fixup for this scenario, but this commit should prevent it from happening for future games altogether. -------------------------------------------------------------------------------- f22881d5bd | advil | 2021-03-24 19:19:57 -0400 Fixup for unsaved abyss crashes If the game crashes without saving before an AK start has saved and while they are in the abyss, the abyss map is not saved, and they reload in an empty featureless void (that crashes). This fixup code simply adds a floor and moves the player to that position, as a very ad-hoc emergency measure so that the game will load. The results look weird but should allow the AK start to get out of the abyss (the position is also one that triggers an abyss shift immediately if they want to stick around). -------------------------------------------------------------------------------- 00efbec225 | Kate | 2021-03-24 20:53:32 +0000 Remove scrolls of random effects Replacing them entirely with scrolls of noise. Noise has a much better ability to do something meaningful when read-identifying, where scrolls of random uselessness would generally just cost a turn once per game. -------------------------------------------------------------------------------- 1b1bd85602 | Kate | 2021-03-24 20:07:01 +0000 Remove ants There are a large number of early-to-mid-game poison monsters, between the many types of snakes, spiders and bees. Ants didn't fill much of a gap and were barely used outside of anthill vaults (which weren't particularly distinct from beehives) and early Dungeon worker ants. Worker ants in D have their weight split between scorpions, hounds and iguanas, and in vaults are mostly replaced with scorpions. Soldier ants in vaults are mostly replaced with water moccasins or vampire mosquitos. -------------------------------------------------------------------------------- e4d627daa3 | Nicholas Feinberg | 2021-03-24 07:26:57 -0700 Unremove removed OLD_SP_DJINNI (kate, Implojin) It turns out this was still needed to avoid a crash. Oops! -------------------------------------------------------------------------------- 9892240997 | Nicholas Feinberg | 2021-03-24 07:10:00 -0700 Remove an insult to Centaurs Since they were removed ;) -------------------------------------------------------------------------------- 7101f7346d | Kate | 2021-03-24 11:30:02 +0000 Remove monster Freeze's ministun against other monsters This effect has long been gone from player freeze. -------------------------------------------------------------------------------- 2da19512c5 | Kate | 2021-03-24 10:21:55 +0000 Adjust some more player species-based vaults heliophobic_arrival_battle_scene tries to place player species skeletons, so Palentonga are fine (as they have a dummy monster), but Djinn caused vault errors. -------------------------------------------------------------------------------- a145f7f72e | Kate | 2021-03-24 10:19:39 +0000 Remove some more halfling remnants From a number of player-species-behind-glass vaults (most of which were also outdated from previous species removals/additions), and other vaults based on player species. -------------------------------------------------------------------------------- c38aae387d | Nicholas Feinberg | 2021-03-23 21:25:44 -0700 Remove irrelevant % lines for Dj Don't show MP or spell levels. -------------------------------------------------------------------------------- 6e9d80e302 | Nicholas Feinberg | 2021-03-23 21:22:30 -0700 Nerf a few more early orcs Still compensating for monster weapon buffs/simplification. Later game monsters can hopefully fend for themselves. -------------------------------------------------------------------------------- dd57cda9ea | Nicholas Feinberg | 2021-03-23 21:03:10 -0700 Make D spawn tables more sane Don't spawn monsters far beyond any depths they'd be relevant in. We'll miss you, D:11 quokka, but... not very much. Overall XP generally pretty close, both level-by-level and overall. Late D (D:10-15) has about 65-75% as many monsters as before. A few monsters now show up earlier than before, such as black bears and jellies. The baby dragons (steam/acid) are a bit more common. Quasits and soldier ants no longer spawn in D, in preparation for upcoming changes. -------------------------------------------------------------------------------- fceadbd91f | Nicholas Feinberg | 2021-03-23 19:11:29 -0700 Clarify !attraction (Pekkekke) -------------------------------------------------------------------------------- 2394d0fbd4 | Nicholas Feinberg | 2021-03-23 18:30:06 -0700 Rename ooze -> endoplasm To reduce confusion wrt their new freezy ways by giving em a new name. Also apply a gentle hint of frosty blue to their tile. -------------------------------------------------------------------------------- d7be90942d | Nicholas Feinberg | 2021-03-23 18:19:31 -0700 Fix Dj/Pa manual species order (|amethyst) -------------------------------------------------------------------------------- 7c41658a71 | Nicholas Feinberg | 2021-03-23 18:03:59 -0700 Ban Dj from Kiku and Veh I was undecided about this, but dev consensus seems to largely be behind the change. The goal is to reduce player confusion and to make ecumenical altars a bit less of a trap for Dj, since the 'spell gods' do extremely little for Dj. -------------------------------------------------------------------------------- 5a20dcc000 | Nicholas Feinberg | 2021-03-23 17:43:57 -0700 Fix monster Freeze damage display It was actually 1d5 but claimed to be 1d7, due to a difference between the monster casting code and the player casting code. -------------------------------------------------------------------------------- c3205288ea | Kate | 2021-03-23 22:03:28 +0000 Skip permanently useless potions with Gozag petition Specifically magic for Djinn, and lignification for Mummies/Ghouls. -------------------------------------------------------------------------------- 82d5626f1f | Aliscans | 2021-03-23 22:53:15 +0200 Sort items in a shop in a more predictable order when using ORDER_DEFAULT. As it was, ORDER_DEFAULT sorted items according to the order in which they were originally created by the game. This seems like an unhelpful default to me, and there is no option to control it. This change means that, when you go into a shop, items are sorted by DESC_DBNAME, and by DESC_PLAIN where this doesn't distinguish them. The exeception is known artefacts, which may not contain their DBNAME in the displayed item name (such as the mask of the Dragon, which is sorted with 'h'), so they use DESC_QUALNAME (which sorts it into 'm'). Similar items are together (all robes, all +0 robes, all wands, etc.), and most things are in alphabetical order. If you switch to "sort by price", this order is used for items which cost the same amount. Delete ORDER_TYPE. Change ORDER_DEFAULT to use its label. [committer's note: squashed all commits in the PR, and did some refactoring. Closes #1826.] -------------------------------------------------------------------------------- 10b8fb2fd0 | Goratrix | 2021-03-23 20:32:28 +0200 Supress a compiler warning on Windows -------------------------------------------------------------------------------- 4f19927427 | Nicholas Feinberg | 2021-03-23 08:39:26 -0700 Drop Dj weapon apts by 1 (nikheizen) Since their Spellcasting speciality means they have fewer things to skill, they have more XP sloshing around for hybrid builds. Make it slightly trickier to 'have it all'. Unarmed combat is untouched for now due to being pretty XP hungry anyway, but I might revise that later. -------------------------------------------------------------------------------- dd9af0c1c5 | Nicholas Feinberg | 2021-03-23 08:27:38 -0700 Fix Veh Dj power display bug Don't claim Veh can give Dj spells. -------------------------------------------------------------------------------- 32f27e8180 | Nicholas Feinberg | 2021-03-23 08:20:49 -0700 Gargoyle Jiyva max Invo title: Rockslime (hellmonk) -------------------------------------------------------------------------------- 1ccb5b4bd3 | Nicholas Feinberg | 2021-03-23 08:19:49 -0700 Dj: guarantee new spells on level up (ardl) Don't allow overlap between the random level-up spells and the starting book spells, if any. -------------------------------------------------------------------------------- fadad42f22 | Nicholas Feinberg | 2021-03-23 08:10:38 -0700 Display ooze freeze damage on xv -------------------------------------------------------------------------------- 2d21d9d4bd | Nicholas Feinberg | 2021-03-23 08:08:24 -0700 HACK: semi-fix Freeze death message Don't claim oozes "invoke" Freeze. -------------------------------------------------------------------------------- 2db2cc2744 | Kate | 2021-03-23 11:55:32 +0000 Add a message when equipping Wucad Mu as a Djinn -------------------------------------------------------------------------------- 8cfd13017f | Kate | 2021-03-23 11:36:11 +0000 Adjust formatting -------------------------------------------------------------------------------- 9bdce53276 | Kate | 2021-03-23 11:31:25 +0000 Don't let the staff of Wucad Mu activate for Djinn Since they'd only get the backfire effects and not the benefits. -------------------------------------------------------------------------------- 4d3ab90b7f | Kate | 2021-03-23 11:06:57 +0000 Let wisp/statueform players worship Yred (Yermak) -------------------------------------------------------------------------------- 640f5e82da | Kate | 2021-03-23 11:06:57 +0000 Don't let Djinn mutate poison resistance Since they're already immune. -------------------------------------------------------------------------------- 6942c2d063 | Edgar A. Bering IV | 2021-03-23 10:41:04 +0200 Changelog through 0.27-a0-737 -------------------------------------------------------------------------------- 0a99b990b4 | WhiteShark | 2021-03-23 09:09:18 +0200 Update to Blade Hands description The old Blade Hands description used the word "hands" regardless of the manipulator type for the species. In addition, it failed to mention that it would meld shields and gloves. A function was added to l-you.cc to get the hand type of the player species, and the Blade Hands description now checks hand type to determine the noun used for the player's manipulators. The description was also changed to say that shields and gloves are also melded. -------------------------------------------------------------------------------- af063e7127 | Aliscans | 2021-03-23 09:05:03 +0200 Change a comment to show the power of the warlock's mirror correctly. A comment in bolt::misses_player() states that a displayed SH of 20 gave a 50% chance of blocking ench-type effects, but the code gave the chance of blocking as SH*2 in SH*2+20; 2/3 for SH=20 and 1/2 for SH=10. Make the comment match. -------------------------------------------------------------------------------- 06f963a177 | Aliscans | 2021-03-23 09:05:03 +0200 Add a relevant debug statement for blocking AUTOMATIC_HIT bolts. Separate the "automatic hit" calculation from the "no automatic hit" check in bolt::misses_player(). Change the debug message for "automatic hit" to one which reflects the calculation it actually makes. -------------------------------------------------------------------------------- 3579b8c60d | Aliscans | 2021-03-23 09:03:58 +0200 Make autoexplore/travel wait for barbs to time out. As things stood, trying to travel with barbs stuck in you would see the game ask for confirmation, move a single square (if you accept) and then stop because of the HP loss. This change makes it so that the game waits for the spikes to time out before moving. You can't remove barbs if you are confused or asleep, but you can't travel then either, and player::is_sufficiently_rested() isn't used for anything else. -------------------------------------------------------------------------------- c3177a88c8 | bstrie | 2021-03-23 08:50:24 +0200 Use https rather than git protocol for submodules Fixes unexplainable breakage with `git submodule update`. As discussed with ebering on IRC. -------------------------------------------------------------------------------- a892ba84f6 | Nicholas Feinberg | 2021-03-22 19:30:46 -0700 Reflavor misleading engulf attacks (dinky) Starcursed masses and tentacled starspawns don't have the 'engulf' effect from e.g. water elementals, so they shouldn't claim to engulf. -------------------------------------------------------------------------------- 03f32850a8 | Neil Moore | 2021-03-22 22:26:30 -0400 Correct syntax in docs. [skip ci] <- supposedly this works now? -------------------------------------------------------------------------------- 9302c29d50 | Kate | 2021-03-23 02:23:50 +0000 Fix tag_upgrade builds -------------------------------------------------------------------------------- 6601e7f8fe | Nicholas Feinberg | 2021-03-22 18:55:04 -0700 Make dj crash less Accidentally deleted their flat HP mut in the merge. -------------------------------------------------------------------------------- 8f833cc6cc | Kate | 2021-03-23 01:44:24 +0000 Make Rupert's Berserker Rage a natural ability So it's no longer affected by antimagic, since that doesn't really fit the flavour. -------------------------------------------------------------------------------- 922fb1cf6a | Kate | 2021-03-23 01:44:24 +0000 Rework spell handling for silencable innate abilities Removes the MON_SPELL_NO_SILENT flag in favour of a new category of spell, MON_SPELL_VOCAL, for natural abilities that cannot be used when silenced. Fixes buggy spellbook display for various monsters (#12516). A few monsters are changed in functionality: Vault wardens' Seal Doors is wizardly instead of magical, so counts for Trog piety. Xtahua's Paralyse, Rupert's Paralyse and Confuse, and Geryon's Summon Hell Beast are vocal instead of magical, so are no longer affected by antimagic. -------------------------------------------------------------------------------- eb20345811 | Kate | 2021-03-23 01:44:24 +0000 Remove an obsolete special-case Natural spells are already silent unless specified otherwise. -------------------------------------------------------------------------------- 30b8c66569 | Nicholas Feinberg | 2021-03-22 18:31:35 -0700 Lizard vault fixes (r-i) -------------------------------------------------------------------------------- 098d8ac6d2 | Nicholas Feinberg | 2021-03-22 18:15:04 -0700 More Sastrei tiles Brighten up the yak and the balrug and add a new catoblep. -------------------------------------------------------------------------------- 53cd4ccad6 | Nicholas Feinberg | 2021-03-22 18:03:23 -0700 Remove Yred's nonliving ban It's neither an interesting gameplay twist nor a fun bit of flavour that Yredremnul bans nonliving players (i.e. gargoyles and djinn) from worship. Are you going to tell me that a 'Gargoyle Death Knight' is not cool? No, you aren't. Let the grdk soar once again! -------------------------------------------------------------------------------- c3fac4b18b | Nicholas Feinberg | 2021-03-22 17:47:19 -0700 New race: Djinni Djinn are intended to create a new and distinct 'caster' experience. Floating spirits formed from smokeless fire, they have no MP, instead casting spells using their HP. They also cannot learn spells from books; they instead get spells randomly and naturally, starting on XL 3 and continuing on every even level. The former mechanic is inspired by a design from kilobyte, who created another 'Djinni' species in 0.13. The latter comes from pubby, who created an 'Oni' race using it in various DCSS forks. I'm indebted to their ideas, though this implementation is somewhat different from both. Let's see if this new race does better than their predecessors! -------------------------------------------------------------------------------- 0520e8ecd4 | Nicholas Feinberg | 2021-03-22 17:47:19 -0700 Remove Halflings DCSS's philosophy on species is that they should provide meaningful choices and interesting, distinct play experiences. We originally had four types of elf, three types of dwarf, and gnomes, among others, but it really wasn't very interesting to try to win all of them, since they were fundamentally so similar to each other. Since then, we've moved towards species with much more distinct features than minor skill apt differences or dietary preferences, and the game has been better for it. Halflings had the following distinguishing features: - Small. (Couldn't use some weapons. Shared with kobolds.) - rMut. (Mostly irrelevant.) - Fantastic slings apt. (But slings are usable at 0 skill and take very little skill to reach mindelay, so how much did this really matter?) - Somewhat more 'fight-y' apts than Kobolds. (But other species do that better.) They weren't a *weak* species, they just weren't a very interesting one. Goodbye, Frodo... may you find happiness, off in that place where Gimli and Legolas went. -------------------------------------------------------------------------------- 3f424a255b | Edgar A. Bering IV | 2021-03-23 00:07:45 +0200 Give salamander tyrants bands -------------------------------------------------------------------------------- 02918e9f87 | Edgar A. Bering IV | 2021-03-22 23:58:59 +0200 New Monster: salamander tyrant (i-x) Salamander tyrants are meant to complement nagaraja as a top-tier threat in Snake, so that the latter don't have to do so much heavy lifting in end vaults etc. They're also meant to help depths lava salamanders have a bit more relevance. Snake has lots of melee bruisers, so the tyrant is a damaging spellcaster: flimsier but with some hard hitting spells it likes to cast a lot. The Tyrant is also fine with sitting back behind tougher Naga cousins: its spells don't require line of fire, only line of sight. Two spells play with terrain: Eruption fires the magma-themed upheaval flavour, hitting the player with partially-resistible BOM flavoured damage and creating temporary lava (constraining the player's movement). Pyroclastic Surge strikes foes of a tyrant that are above or adjacent to lava with pure fire damage. The third is a debuff weakening gaze, inflicting DUR_WEAK on the player. As a gaze attack it counts as instant and does not require line of fire, only line of sight. Combined with the terrain constraining attacks the gaze should make tyrants tough to fight in melee, but in a different way than the tankier Naga. -------------------------------------------------------------------------------- 4813a55755 | Edgar A. Bering IV | 2021-03-22 23:58:59 +0200 Don't give new Naga Magi Haste Other (i-x) It takes away from the distinctiveness of salamander mystics. With the player under a hail of curare-spit and slowed that way, haste other was a bit overboard. -------------------------------------------------------------------------------- 6ecf17fd6c | Edgar A. Bering IV | 2021-03-22 23:58:59 +0200 Turn Naga Mages into more supportive allies To give Naga better chances of catching a player, Naga Mages drop some of their attack spells (and teleport other) in exchange for haste other and a new spell: concentrate venom. Concentrate Venom enchants a target allied monster (either N or S type) and turns its poison spit or AF_POISON melee into curare. -------------------------------------------------------------------------------- 86023d4c85 | Edgar A. Bering IV | 2021-03-22 23:58:59 +0200 Tweak Nagaraja spells Remove force lance (which gets the player away from Nagaraja's strong constrict) and replace teleport other with dimension anchor. Nagaraja are the top tier threat in snake and should be hard to escape, but being Naga even hasted most players can get away. -------------------------------------------------------------------------------- 8b94e06931 | Edgar A. Bering IV | 2021-03-22 23:58:59 +0200 Give Naga Ritualists normal weapons (kate-) -------------------------------------------------------------------------------- db6eed0942 | Edgar A. Bering IV | 2021-03-22 23:58:59 +0200 Make Naga Ritualists priests, remove force lance from their spellbook The priest change is mostly flavour, since they wrangle mana vipers it doesn't make sense that they'd be vulnerable to antimagic. Every spellcasting enemy except guardian serpents in snake has force lance, which works against getting snakes close to the player, so that's cut from their book. -------------------------------------------------------------------------------- e81c3644fc | Edgar A. Bering IV | 2021-03-22 23:58:59 +0200 Give Naga Warriors battlecry Nagas are slow, so its easier for the player to avoid being hit by them. Battlecry will increase the consequences of being hit when Warriors are nearby. -------------------------------------------------------------------------------- 43b6169a3e | Edgar A. Bering IV | 2021-03-22 23:58:59 +0200 Increase Naga and Naga Warrior damage Plain Naga are rather flimsy, don't hit that hard in terms of base dam, and have no fancy things to attack the player with. Naga Warriors are much tankier, but by the lair branches don't have a base dam appropriate to their designed threat level and tankiness, and also lack extra tools. Nagaraja base damage isn't tweaked, since they have spells and stronger constrict. -------------------------------------------------------------------------------- a7b8d12a86 | Edgar A. Bering IV | 2021-03-22 23:58:59 +0200 Accelerate poison damage Poison damage afflicts the player with a known "damage debt" to be payed out over time. However, it ticks so slowly that the player can usually finish a poison fight and then rest before the poison becomes a serious tactical consideration. Accelerating poison will make it more relevant on shorter timescales; though the large number of curing potions spawned per game might also need to be trimmed. Specific number changes: Increase the speed cap to 5hp/aut, the speed minimum to 0.1hp/aut and the exponential speed from 1/15th of current poison per 10 aut to 1/5th of current poison per 10 aut. -------------------------------------------------------------------------------- e1682847c3 | Edgar A. Bering IV | 2021-03-22 23:58:59 +0200 Pull out some magic numbers in the poison formulas This will make tuning them easier. -------------------------------------------------------------------------------- 48170eeafe | Kate | 2021-03-22 21:44:09 +0000 Fix spelling -------------------------------------------------------------------------------- 265f56af43 | Kate | 2021-03-22 21:44:09 +0000 Remove a duplicated vault check -------------------------------------------------------------------------------- e0bb579ed7 | Kate | 2021-03-22 21:44:08 +0000 Remove antennae from Desolation of Salt humans -------------------------------------------------------------------------------- 780f848edf | advil | 2021-03-22 16:07:46 -0400 Mark manifold assault as a direct attack for autofight This allows CMD_AUTOFIGHT with autofight_throw=true to activate it when quivered, among other cases. -------------------------------------------------------------------------------- a0013940fb | Nicholas Feinberg | 2021-03-21 20:03:08 -0700 Lighten yaks up a bit (hellmonk) -------------------------------------------------------------------------------- c0f43fc05a | Nicholas Feinberg | 2021-03-21 19:53:54 -0700 Unleash a yak attack (Sastrei) New tiles that look less like sheep! Also death yaks. -------------------------------------------------------------------------------- ec79a4c0d2 | Nicholas Feinberg | 2021-03-21 19:48:31 -0700 Make oozes freeze (hellmonk) In the quest to make D:1 a bit more interesting without being enormously deadly or intimidatingly complex, give oozes a new gimmick: 1d7 Freeze at roughly 1/3rd cast freq. Halve their HP, reduce their base damage to 3, and place them in the D:1-3 range. Vaults are unchanged because old oozes didn't do anything anywhere, so there should be no issues with them being replaced by a monster that doesn't do anything after D:3. -------------------------------------------------------------------------------- 0b40708614 | Kate | 2021-03-22 01:31:47 +0000 Staticify some functions -------------------------------------------------------------------------------- c204baa176 | Kate | 2021-03-22 01:28:24 +0000 Fix display of stat rings on known items screen (particleface) -------------------------------------------------------------------------------- 26b8c838cb | Nicholas Feinberg | 2021-03-21 17:33:02 -0700 Unleash the python (hellmonk) Change ball pythons to only spawn in D:1-3 (instead of up to D:8!), and make them 4x as common in their range. Overall XP is unchanged from D:1-4. -------------------------------------------------------------------------------- fe1b84c61a | Nicholas Feinberg | 2021-03-21 17:26:14 -0700 Remove leopard geckos They were identical to quokkas, and the latter have a more entertaingly Australian flavour. https://www.pacificsciencecenter.org/wp-content/uploads/lydia-gecko-1920x1080.jp g -------------------------------------------------------------------------------- a572aaf4d4 | Nicholas Feinberg | 2021-03-21 17:01:04 -0700 Remove hobgoblin weapons, buff base damage (hellmonk) To differentiate them a little more from other early weapon users and also decrease the amount of early junk lying around. Beware the hob that does find a weapon, though! -------------------------------------------------------------------------------- 5910a5bdcb | Nicholas Feinberg | 2021-03-20 22:33:27 -0700 Remove early-game weaponless enemies Since the difference between enemies with weapons and those without is now so significant, stop spawning early-game enemies without weapons. This is a small player buff as well, since there's a greater chance of finding a venom dagger or such. -------------------------------------------------------------------------------- a52386242a | Nicholas Feinberg | 2021-03-20 22:32:32 -0700 Nerf early-game weapon user damage To compensate for the removal of 1d3 weapon damage reduction and also weapon delay removal, cut about 3 damage off many early game enemies. Also, split centaur damage into hit and kick, as a thematic way to nerf their ranged a little bit. -------------------------------------------------------------------------------- b4952372f7 | Nicholas Feinberg | 2021-03-20 22:13:04 -0700 Avoid a divide by zero -------------------------------------------------------------------------------- d01e12f17d | Nicholas Feinberg | 2021-03-20 17:49:47 -0700 Remove the rim of the moon (wheals) -------------------------------------------------------------------------------- fd0ee990f0 | Kate | 2021-03-21 00:45:17 +0000 Make Shatter deal bonus damage to toenails Toenail golems and rockslimes were on LRD's list of monsters that can be directly targeted, but not on Shatter's list of monsters that take bonus damage. Instead use the same list for both spells. -------------------------------------------------------------------------------- 01df23dd3f | Kate | 2021-03-21 00:45:17 +0000 Always consider ring pluses to be known Since they're always the same. Potentially they should no longer use item.plus at all to simplify the code, but currently some Sprint maps do still use redefined rings with different plus values (particularly for slaying in meatsprint). -------------------------------------------------------------------------------- 5d5f89c6df | Nicholas Feinberg | 2021-03-20 17:43:19 -0700 Update skill descriptions Many of these referenced mechanics and spells that have been gone for most of a decade. -------------------------------------------------------------------------------- f5bc2b81cb | Nicholas Feinberg | 2021-03-20 16:22:41 -0700 Show weapons on new Balrug tile ??oops -------------------------------------------------------------------------------- 830a91cb63 | Nicholas Feinberg | 2021-03-20 16:18:35 -0700 New Chei splash (Sastrei) -------------------------------------------------------------------------------- 0ad5b59bb0 | Nicholas Feinberg | 2021-03-20 16:18:21 -0700 New Balrug & Moon Troll tiles (Sastrei) -------------------------------------------------------------------------------- a58904a08d | Nicholas Feinberg | 2021-03-20 16:09:33 -0700 Mark Manifold Assault only temp useless Your currently wielded weapon is a temporary status, not a permanent condition, so it shouldn't prevent e.g. spell memorization. -------------------------------------------------------------------------------- aed091b46b | Nicholas Feinberg | 2021-03-19 19:40:43 -0700 Display Freeze damage in monster -------------------------------------------------------------------------------- d6162235be | Nicholas Feinberg | 2021-03-19 18:30:38 -0700 Remove rocksliem (RoGGa, 12540) -------------------------------------------------------------------------------- 359e429f13 | Edgar A. Bering IV | 2021-03-19 23:28:06 +0200 Describe curse boosts in chardumps (vt) -------------------------------------------------------------------------------- 86f87662fd | Nicholas Feinberg | 2021-03-19 08:32:58 -0700 New Geryon sprite (sastreii) -------------------------------------------------------------------------------- 7530f89582 | Edgar A. Bering IV | 2021-03-19 12:55:13 +0200 Fix ccache clang in CI? -------------------------------------------------------------------------------- 0c81a3c1c3 | Nicholas Feinberg | 2021-03-18 18:49:32 -0700 Swap Dr/Pa in NG (TheMeInTeam) Draconians are a somewhat fragile species with a wide set of different active abilities to learn (depending on which colour of draconian you become.) Palentongas are more durable (even after the nerf) and have a simpler playstyle to learn. Let's try this way out. -------------------------------------------------------------------------------- 3a15de6056 | Nicholas Feinberg | 2021-03-18 18:43:24 -0700 Pull back on Palentongas Think they got overtuned a bit during 0.26-a. Reduce their HP apt to the original +0. -------------------------------------------------------------------------------- 77a6b55cf3 | Kate | 2021-03-17 22:25:07 +0000 Update some item descriptions -------------------------------------------------------------------------------- d1c2c16caa | Kate | 2021-03-17 22:25:07 +0000 Don't allow targeting empty space with Poisonous Vapours Instead of letting it be aimed at empty space (but costing a turn and MP in case there's an invisible monster there), require a visible target for it to work. Also update some messaging and add a use of BASELINE_DELAY. -------------------------------------------------------------------------------- 8fc010af70 | Kate | 2021-03-17 22:25:07 +0000 Fix indentation -------------------------------------------------------------------------------- c1da3516c2 | Nicholas Feinberg | 2021-03-17 13:24:35 -0700 Make vampires mad (ShaperMC) -------------------------------------------------------------------------------- 6a6c47eaed | Nicholas Feinberg | 2021-03-17 08:44:07 -0700 Give hafi/kofi bucklers Since shield penalties are more meaningful now, and small races have higher penalties. -------------------------------------------------------------------------------- f18a54e897 | Nicholas Feinberg | 2021-03-17 07:41:07 -0700 Tune Ironbound Thunderhulk spellpower up slightly Player feedback suggested they weren't scary enough at range. This moves them from 3d18 to 3d21 damage, plus a lil accuracy bump. The buffs will continue until killcounts improve. -------------------------------------------------------------------------------- ea86b47111 | Nicholas Feinberg | 2021-03-17 07:19:13 -0700 New Green Death and Orange Demon tiles (Sastreii) -------------------------------------------------------------------------------- ac1c3f1d60 | Edgar Bering | 2021-03-17 04:14:57 -0400 Checkwhite -------------------------------------------------------------------------------- f435b565c8 | Nick Johnstone | 2021-03-17 09:21:24 +0200 Enable full screen PWA for WebTiles on iOS Currently, adding the webtiles interface to the desktop on iOS or iPadOS creates what is effectively a bookmark. It opens in the browser, with the domain displaying, and tabs available. By adding these meta tags, if a user creates a PWA for WebTiles on iOS, it will launch in full screen as a separate application to the browser, without the standard tabs interface. This should be a fairly low risk change, as users have to opt in to creating a PWA. The biggest issue is that this hides the browser navigation if you’re using a PWA, so you might theoretically be able to navigate to part of the site that you couldn’t easily return from. This might seem like an edge case, but it would be awesome to be able to play DCSS full screen on an iPad with a keyboard. -------------------------------------------------------------------------------- 0c9945aa31 | Edgar A. Bering IV | 2021-03-17 09:10:29 +0200 Elaborate on some clua documentation -------------------------------------------------------------------------------- 330a3fb6b6 | mgdelmonte | 2021-03-17 09:10:29 +0200 New clua function spells.describe Add the spells.describe function, which provides the same description one can find by accessing a particular spell in the memorised spells list. Useful for evaluating a spell's current damage, accuracy, and other attributes, within a script context. [ Committer's note: Rebased, reworded commit message. Closes #1813 ] -------------------------------------------------------------------------------- b5737ff2c0 | hellmonk | 2021-03-16 20:28:56 -0700 Allow quokkas on D:1. They're not that much different from leopard geckos. Slightly lowered their spawn rate overall - I think this is fine but it probably increases early exp a little bit. -------------------------------------------------------------------------------- 87fe7d4a8f | hellmonk | 2021-03-16 20:28:56 -0700 reduce item generation in early dungeon -------------------------------------------------------------------------------- 9dbe4339e4 | hellmonk | 2021-03-16 20:28:56 -0700 increase ball python melee damage by 1 -------------------------------------------------------------------------------- 69cf137300 | hellmonk | 2021-03-16 20:28:56 -0700 Adjust weapon subtype selection. Allow higher basetype weapons to spawn (with low probability) on early floors. Adjust their spawn rate downward overall to compensate. Note: I'm very unsure about the numbers on this, but a quick objstat seemed to indicate that it would be acceptable for D:1. Further adjustment may be required. -------------------------------------------------------------------------------- 0dccfbd8cf | hellmonk | 2021-03-16 20:28:56 -0700 Allow earlier book, manual, and staff generation. Removes a couple checks preventing books, staves, and manuals from generating on early floors. Many of these were replaced with scrolls or potions, so it's probably a nerf overall. -------------------------------------------------------------------------------- c2beb70d14 | hellmonk | 2021-03-16 20:28:56 -0700 Legalize early rare scrolls. This removes the depth_mod check for scrolls of acquirement, summoning, vuln, silence, brand weapon, torment, and holy word. Scroll weights for those scrolls were decreased slightly (except for vuln, which was increased) to compensate and to make the total scroll weight nicer. I could see dropping weight further if needed, and there is some concern about startscumming with ?acq. Coincidentally, this despoilers scroll id; there is no longer a reason to track the floor you found a scroll on. -------------------------------------------------------------------------------- f8ad8ab245 | hellmonk | 2021-03-16 20:28:56 -0700 Allow shop placement on D:1-3 Let the player see some exciting shop items earlier. This is not as much of a power buff as it seems, since the player won't have enough gold to buy things in most cases (though I could see banning consumable shops or raising prices, perhaps). Shop rate per floor of D is nerfed so that the total number of dungeon shops is slightly lower overall. -------------------------------------------------------------------------------- ca034ae587 | Kate | 2021-03-16 19:15:24 +0000 Fix a crash when trying to enslave a Mara clone -------------------------------------------------------------------------------- 90476cec82 | Kate | 2021-03-16 03:45:04 +0000 Give quicksilver oozes acid immunity As with the majority of high-level slimes. Rockslimes are left without it since they're primarily made from rock. -------------------------------------------------------------------------------- 31e422a34a | Kate | 2021-03-16 03:45:04 +0000 Fix grammar in horn of Geryon description -------------------------------------------------------------------------------- 0a03284674 | Nicholas Feinberg | 2021-03-15 20:37:38 -0700 Remove chilling breath from monster white draconians The knockback isn't particularly needed for their design. The implementation in mons-cast is a bit of a hack, alas... -------------------------------------------------------------------------------- 87aa48b03e | Nicholas Feinberg | 2021-03-15 20:25:06 -0700 s/Leech/Vampire's Tooth/ Too many vamp unrands! -------------------------------------------------------------------------------- b8a12bb016 | Nicholas Feinberg | 2021-03-15 20:23:36 -0700 Make Vaults wizards a bit uglier 2-4 ugly thing bands, instead of 1-3. A single ugly thing pal was just sad. -------------------------------------------------------------------------------- 7c350831d9 | Nicholas Feinberg | 2021-03-15 20:23:04 -0700 Gently nerf Leech to +5 Mega-Vamp is an extremely strong property, and with a high enchantment, Leech isn't just good, it's a bit absurd. Tone down its enchantment by 3 points, from +8 to +5. -------------------------------------------------------------------------------- 5244db0575 | Kate | 2021-03-16 02:05:45 +0000 Adjust some reanimation handling Fix messaging for animating skeleton-only monsters with the sword of Zonguldrok, and remove an obsolete autopickup check with Animate Skeleton. -------------------------------------------------------------------------------- f1ce4671d2 | Kate | 2021-03-16 02:05:45 +0000 Reword a monster description To be a little shorter, rather than duplicating the spell description. -------------------------------------------------------------------------------- 2d5cf1dcd3 | advil | 2021-03-15 11:06:05 -0400 Update an outdated file extension in Makefile -------------------------------------------------------------------------------- f7bc8fed1b | Nikolai Lavsky | 2021-03-15 07:25:10 -0700 Fix ?/m entry for rockslimes Because of a missing delimiter, `?/mrockslime` showed the river rat's description. -------------------------------------------------------------------------------- 8dd3ea4f36 | Nicholas Feinberg | 2021-03-14 21:43:00 -0700 Reduce convoker & preserver frequency It's a bit much. Switch out for various other monsters. Lower overall monster count to compensate for the increased XP. -------------------------------------------------------------------------------- 9c408523ab | Nicholas Feinberg | 2021-03-14 21:31:21 -0700 Give frosthearts sInv To balance out various new monsters added to Vaults without sInv, give a wizardy monster a little better vision. Improve their prescription. You know. -------------------------------------------------------------------------------- a011b72ad2 | Nicholas Feinberg | 2021-03-14 21:29:21 -0700 Animate creeping frost -------------------------------------------------------------------------------- 7c5cdd226b | Nicholas Feinberg | 2021-03-14 21:06:01 -0700 Ogreify thunderhulk weapons again Big monsters need big weapons. Rip and tear! -------------------------------------------------------------------------------- 8141940efc | Nicholas Feinberg | 2021-03-14 20:56:31 -0700 Nerf a few other slow weapon-wielding mons Numbers chosen arbitrarily and unscientifically. Closes #1827. -------------------------------------------------------------------------------- b80fe6c15e | hellmonk | 2021-03-14 20:50:04 -0700 Nerf ogre and Sigmund base damage. This partially compensates for the monster weapon damage changes. I'm hitting these guys since they are notorious early game monsters that always spawn with a high base damage, high delay weapon. Other monsters might need to be adjusted later; in particular, club hobgoblins, goblins, (halberd) gnolls, centaurs, and early 2h ogres are worth monitoring. Some later monsters like yaktaurs may also need compensatory damage changes, but with luck this level of player nerf will be acceptable without too much further adjustment. -------------------------------------------------------------------------------- d9c6a3bf67 | hellmonk | 2021-03-14 20:50:04 -0700 Don't decrease monster weapon damage by 1 + random2(3). -------------------------------------------------------------------------------- 09634a79bb | hellmonk | 2021-03-14 20:50:04 -0700 Fix a > 10 year old monster weapon damage bug. Monsters with positively enchanted weapons now roll slaying properly. -------------------------------------------------------------------------------- 581982f5c1 | hellmonk | 2021-03-14 20:50:04 -0700 Rework monster weapon delay. Previously, monsters had weapon delay equal to the average of their weapon base delay and 1.0. This was fairly esoteric knowledge; it wasn't displayed in xv, for example, and also didn't make a whole lot of sense. Even powerful, high hd monsters attacked much slower with a high delay weapon. Additionally, DCSS has a parameter (attack_energy) that adjusts monster attack speed and is displayed. This commit sets monster attack delay to 10 regardless of base weapon type. In the extreme cases, a monster with a quick blade will attack about 10% slower than before, and a monster with a scythe will attack 50% faster. Overall it's a pretty substantial damage buff for monsters with heavy weapons. Particular outliers can be adjusted later through attack_energy or changes to base damage. -------------------------------------------------------------------------------- aabfd21ae0 | Kate | 2021-03-15 01:12:19 +0000 Identify guaranteed ambrosia in bee special rooms -------------------------------------------------------------------------------- 2cd41d7273 | Kate | 2021-03-15 00:59:20 +0000 Consider corpses as useless items for Jiyva piety -------------------------------------------------------------------------------- 337aa9fb86 | Kate | 2021-03-15 00:52:45 +0000 Let Chilling Breath knock back non-fliers And make Wind Blast knockback the same against fliers and non-fliers, so that flight sources can eventually be made permanent without there being places that the player would want to keep toggling it off. -------------------------------------------------------------------------------- 70b080b6ed | Kate | 2021-03-14 21:34:01 +0000 Update a comment -------------------------------------------------------------------------------- 3a9f0a9c12 | Nicholas Feinberg | 2021-03-13 12:54:53 -0800 Flip thunderhulk tile lightning (lici) Try to avoid confusion with Haste status. -------------------------------------------------------------------------------- 56d34f704d | Nicholas Feinberg | 2021-03-13 08:15:08 -0800 Thunderhulks are ogre I just extremely enjoy the ogrish theme. Expect this to be reverted again soon! -------------------------------------------------------------------------------- 7536a348d8 | Nicholas Feinberg | 2021-03-13 07:13:53 -0800 Preemptively tune quicksilver oozes down Let's try em at somewhat lower HP and see what they do. -------------------------------------------------------------------------------- e79d73bdd1 | Nicholas Feinberg | 2021-03-13 07:10:58 -0800 Simplify -------------------------------------------------------------------------------- c6addc0a40 | Edgar A. Bering IV | 2021-03-13 08:19:38 +0200 Reduce Ash skill boost This was still a bit overtuned. Getting to 2 curses in a category got to the same skill boost as "fully bound" under old Ash; early on this could already get ahead of the power curve. In the long run, since the number of curses is uncapped, a player could potentially reach double the boost of old Ash in a particular curse category. Taking the time to craft focused curses is a strategic tradeoff, and players are enjoying it so I don't want to put a hard cap on the boost. -------------------------------------------------------------------------------- 6becf1495a | Edgar A. Bering IV | 2021-03-13 08:13:21 +0200 Text tweaks for beastmasters -------------------------------------------------------------------------------- 2d681adce0 | Nicholas Feinberg | 2021-03-12 21:29:03 -0800 Impart the importance of friendship Make sure beastmasters always come with company. (Ban unbanded vault beastmasters.) -------------------------------------------------------------------------------- df28dd9bf2 | Edgar A. Bering IV | 2021-03-12 21:27:57 -0800 New monster class flag: M_REQUIRE_BAND Some monsters really don't work well without their bands. This flag prevents vaults from placing a monster with this flag (even via 098 and friends) unless the placement calls for a band. -------------------------------------------------------------------------------- cffcca8328 | Nicholas Feinberg | 2021-03-12 21:14:10 -0800 Reduce Vaults spawns Compensate for the removal of chaff & the new monsters. Total XP is essentially unchanged. -------------------------------------------------------------------------------- 0b001bae98 | Nicholas Feinberg | 2021-03-12 21:14:05 -0800 Vaults monsters reworks! Unify ironheart and ironbrands into ironbounds, per request. Hopefully this won't cause too much confusion. Ironbound Frostheart: Spellcasting monsters with a new Creeping Frost spell, which deals cold damage to and flash-freezes all enemies adjacent to walls. They also have an AF_COLD touch attack. Overall, they're intended to be a mid-tier threat which plays with the terrain of Vaults (where there tend to be a lot of walls around!) and which fills a gap in rC-checking monsters there. Ironbound Thunderhulks: Playing around with new targeting constraints, this imposing Vaults foe tosses smite-targeted lightning at its foes. Just one catch - it can't hit the player if they get within 1-2 tiles of it! Seems like a fun way to play with the mobs and spaces of Vaults. Ironwhip Beastmaster Instead of having beasts spawn in the vaults on their own, let's add on a Vaults thematic strength: bigger fights with synergizing bands. The Ironwhip Beastmasters are the ones who have taken the late, rare Lair monsters to the Vaults. Beastmasters come with a "Goad Beasts" natural ability, which gives all beasts in LOS a bonus to energy equal to one EUT_MOVE. This is less pronounced than haste other or a torpor snail aura for basic combat; however they come with bands of trampling dire elephants or fire breathing lindwurms. Here the goad helps the monsters in the band manouver around one another to better get to the player. For trampling monsters this does have a different mechanical impact than a torpor snail aura: after a successful trample that moves the player the remaining goaded elephants have a better chance at getting a hit. Beastmasters also spawn with nets, because what's a good beast master without a net. Move ugly things to wizard bands in Vaults This is more for Lore than for mechanics. Having plain ugly things appear either with wizards in small bands or with very ugly things in larger bands combined with their description is a subtle storyline of "creation killing creator". -------------------------------------------------------------------------------- c5cd5cfaf1 | Nicholas Feinberg | 2021-03-12 21:09:31 -0800 Add dire elephant bands to Vaults Again recontextualizing a late, rare Lair monster and replacing the trampling dragons that have been removed from Vaults, dire elephants should hopefully be a fun threat. I'm very uncertain about where to categorize them in terms of threat tiers. -------------------------------------------------------------------------------- 08f024a8fe | Nicholas Feinberg | 2021-03-12 21:09:31 -0800 Add lindwurm bands to Vaults Replacing the fire dragons that have soared away from Vaults, lindwurms are a weaker threat that spawn in bands of 2-4. It'll be fun to see them in a different context from their rare appearances in Lair, and they should still be able to do some damage. -------------------------------------------------------------------------------- 29c3982eda | Nicholas Feinberg | 2021-03-12 21:09:31 -0800 Remove chaff orcs from Vaults Orc warlords deserve better friends :) A loyal circle of orc knights only! -------------------------------------------------------------------------------- 262705bbc8 | Nicholas Feinberg | 2021-03-12 21:09:31 -0800 Remove basic centaurs from Vaults Far too weak to be relevant. Centaur warriors only here! -------------------------------------------------------------------------------- 1fe5a257b9 | Nicholas Feinberg | 2021-03-12 21:09:31 -0800 Add peacekeepers to Vaults Peacekeepers (manticores that buff nearby golems' damage) are a fun monster that plays well with Vaults' themes. I don't believe sharing these from Desolation will dilute the latter's uniqueness too much, and it's neat to have a monster re-used in a somewhat different context. -------------------------------------------------------------------------------- 2c6b4450c0 | Nicholas Feinberg | 2021-03-12 21:09:31 -0800 First pass on new V:1-4 spawn tables Cut out chaff and monsters that heavily duplicate D/U/E. Focus on monsters that work well with Vaults' terrain: wide-open spaces with frequent door chokepoints, few corridors. (Great for big mobs and ranged enemies.) -------------------------------------------------------------------------------- 48f24ef436 | Nicholas Feinberg | 2021-03-12 21:09:31 -0800 WIP Vaults:5 re-layout Trying to approximate the status quo pretty closely. XP is slightly higher now, but less than a 2% increase. -------------------------------------------------------------------------------- 9a45c12a61 | Edgar A. Bering IV | 2021-03-12 21:09:09 -0800 Move desolation humans to 'a' For "ancients" since they're ancient cultists; this frees up some space on p for the new vaults monsters. They're still human genus and species -------------------------------------------------------------------------------- e6a60533fa | Nicholas Feinberg | 2021-03-12 19:10:08 -0800 More Donald lines -------------------------------------------------------------------------------- 52eb5d5579 | Nicholas Feinberg | 2021-03-12 19:10:08 -0800 Remove death oozes Death oozes are slimes that aren't a great threat almost anywhere they appeared. They're essentially a midpoint between necrophages and ghouls that's slightly faster than either, which isn't an extremely exciting or distinctive monster design. Their best feature, by far, is their sprite. Undead monsters now just get slimified into normal slimes. It's fine! Once you liquify something, it shouldn't really matter that much whether it was alive or dead when you started. -------------------------------------------------------------------------------- a8652a641c | Nicholas Feinberg | 2021-03-12 19:10:08 -0800 Add new slimes to J wrath -------------------------------------------------------------------------------- 049c24a4b6 | Nicholas Feinberg | 2021-03-12 19:10:08 -0800 Remove Eyes of Draining It's very hard for monsters that do nothing without friends to work well in DCSS. Eyes of Draining not only do nothing alone, they have a pretty hard time doing anything even with friends. It's rare that they manage to really 'get' a spellcaster. Ghost moths cover their 'drain magic' gimmick a bit better, and quicksilver oozes cover 'antimagic ooze' in reasonable fashion, so let's clean up some cruft. The Depths ophan added in this commit is pretty weird; possibly there's a better fit for that slot. -------------------------------------------------------------------------------- eda80042b2 | Nicholas Feinberg | 2021-03-12 19:09:57 -0800 Remove Death Oozes from Slime Just not that threatening or interesting there, sadly. Tentatively not removing them from the game, since they do work well in Gauntlet, but they might get axed from there a little later. Also remove them from TRJ's palset. -------------------------------------------------------------------------------- 2cf77163c2 | Nicholas Feinberg | 2021-03-12 19:09:57 -0800 Remove dead weights from Slime gen Overall monster & xp count is roughly similar. -------------------------------------------------------------------------------- d1418992ea | Nicholas Feinberg | 2021-03-12 19:09:57 -0800 Remove azure jelly rElec It has no obvious thematic basis and, with rockslimes' appearance, it seems unecessarily cruel for multiple Slime monsters to be rElec. (Trivia: the rElec on azure jelly is pre-Stone Soup.) -------------------------------------------------------------------------------- 433ef79eb3 | Nicholas Feinberg | 2021-03-12 19:09:57 -0800 New Slime monster: quicksilver ooze Quicksilver oozes are antimagic oozes. They move fast, hit for AF_ENGULF and AF_ANTIMAGIC, and are totally immune to magic. They're intended to be lower threat than azure jellies but higher than death oozes. -------------------------------------------------------------------------------- b0a88528cb | Nicholas Feinberg | 2021-03-12 19:09:57 -0800 New Slime monster: Rockslime Rockslimes are slimes that trample you, perhaps into the nearest slime wall. They have high AC, rF++ and rElec, since they're made of rock, and wallop for a hefty 50 per hit. They're intended to be on par with azure jellies and a bit lower-threat than acid blobs (they have lower HP than either), and to play with the Slime terrain in a fun way. -------------------------------------------------------------------------------- 81e9af5d04 | advil | 2021-03-12 18:28:15 -0500 unbrace -------------------------------------------------------------------------------- 867ec2bfdb | advil | 2021-03-12 18:14:28 -0500 Show form info on the `A` screen A lot of information about forms is the same kind of thing that would already be shown on the `A` screen (I could even imagine reimplementing a big chunk of this as actual mutations, there's already a fair bit of overlap). Some form-based / non-permanent (but non-tempmut) info was already shown here, including Mf/Vp form info, beastly appendage, and a few random religious properties. This commit generalizes this to always show key pieces of info for forms. I haven't tried to be exhaustive here; many things that are already shown in the `%` screen somehow don't get their own entry. This is implemented basically by extending the fakemut concept to forms; there's a mix of programmatically-generated fakemuts and custom ones. As noted above, for at least some of these properties it might be worth considering how to generalize the beastly appendage approach. -------------------------------------------------------------------------------- 2d96b4cbf3 | advil | 2021-03-12 18:14:28 -0500 Refactor mutation listing Previously this was handled in two separate but parallel places: a function in output.cc used for the `%` screen, and a more developed version in mutation.cc that produces the long list for `A` (with a more interpretable order that doesn't just go by the mutation enum). This commit unifies the two by merging in the short-form listing to the existing code in mutation.cc, leading to more consistency across the two displays and less likelihood of them getting out of sync. The order of display for `A` is now used for `%`. I have further tweaked the order to consistently show temporary effects first, and made a few other small changes mainly to terse mutation description special cases. -------------------------------------------------------------------------------- 1ad3dbde53 | gammafunk | 2021-03-12 12:58:09 -0600 Some tweaks to a vault Adjust the threats and "elven" equipment to more appropriately scale with depth of placement. Check for depth in Dungeon, upgrading things for post D:13. Remove the conditional "the elves died" theme that previously happen in any branch. I'm afraid the theme won't be well communicated with just random monsters and some elven skeletons around. The placement in Crypt covers a similar theme, with the elves becoming spectral, and the vault poses a substantial threat in that branch. In the case of Crypt, also add the elven gear as loot underneath the respective spectral elves and fix up the dead trees. Also add transparent, no_trap_gen, and no_monster_gen tags to this vault. Closes #1811. -------------------------------------------------------------------------------- 0ea1dd9b86 | kippig | 2021-03-12 12:55:28 -0600 Add an elvish explorers vault This vault adds an elvish couple exploring the dungeon with their mounts and their pet dog. Sometimes they have starved to death since they can't find enough rat to skewer. In crypt they have succumbed and been raised. Commiter's Note: Clean up commit message and squashed commits. -------------------------------------------------------------------------------- 702cc3688f | Nicholas Feinberg | 2021-03-12 08:32:46 -0800 Refactor mon generation die size Dataify it! (Some argument for making this an enum instead, as with branch noise?) -------------------------------------------------------------------------------- 29a88b33a7 | Neil Moore | 2021-03-11 15:58:07 -0500 Don't consider shafts untraversable for connectivity Stepping on shaft traps hasn't been a thing for quite some time. -------------------------------------------------------------------------------- 95abfb2b7d | advil | 2021-03-11 15:04:26 -0500 Refactor mertails as a mutation Once again I wasn't sure how worth the effort this would end up being and it turned out to be cleaner to use a mutation: standard form suppression handling can be used in various cases that were special-cased. This commit doesn't mess too much with you.fishtail calculation itself though. This commit also fixes emergency_untransform, which was broken for aquatic species. -------------------------------------------------------------------------------- b7d4903799 | advil | 2021-03-11 11:55:49 -0500 Mark nimble swimmer as inactive for merfolk on land This is entirely cosmetic, as the mutation doesn't do anything when not in water, but makes the `A` display more consistent with the merfolk form change. (Op still show this mutation always.) -------------------------------------------------------------------------------- 73614ed2d8 | advil | 2021-03-11 11:40:36 -0500 A few minor SP_NAGA cleanups -------------------------------------------------------------------------------- 8d3ced5a34 | advil | 2021-03-11 10:02:34 -0500 Remove a food reference -------------------------------------------------------------------------------- 164d68d9e5 | advil | 2021-03-11 09:41:48 -0500 Dataify bonelessness, barding-wearing These are implemented as species flags. SPF_BARDING is actually coextensive with SPF_SMALL_TORSO, not sure if that's an accident? -------------------------------------------------------------------------------- 48756fc93d | advil | 2021-03-11 09:22:36 -0500 Remove SPF_ELVEN, SPF_ORCISH These each uniquely identify a species. Also, convert the species generation script to take species flags directly; this extra layer of indirection just makes it harder to do changes like this. -------------------------------------------------------------------------------- 524d869a0f | advil | 2021-03-10 21:47:11 -0500 Refactor vampirism as a mutation This commit is part of a series that attempts to more cleanly treat species as bundles of traits/behaviors that have their own well-defined semantics, and minimize the use of explicit species checks in the code. This commit refactors vampirism into a two-level mutation; level 1 gives the base set of vampiric abilities that were previously conditioned on species checks, and level 2 gives batform as well. I wasn't sure if this would be worth the effort, but I think in the end it's a much cleaner design than before. There's a few small related cleanups here, including to mutation display and to item annotations. One thing of note is that I marked torment as a good_item when you are torment immune, which may be initially confusing to people, because the only thing that previously got this color is acquirement and they don't exactly form a natural class. (Emergency items are colored yellow, which preempts good_item.) -------------------------------------------------------------------------------- 70eae99092 | advil | 2021-03-10 21:47:10 -0500 Clean up some vampire checks * In some cases is_lifeless_uundead is more appropriate than a direct vampire check. (Minor change: berserkitis will now be suppressed in lichform.) * Formatting * Clean up a json field for the vampire info screen * Comments re the confusing treatment of `temp` for vampires -------------------------------------------------------------------------------- 6a3fe64ed6 | advil | 2021-03-10 21:47:10 -0500 Generalize a ghoul check -------------------------------------------------------------------------------- 2aaa8dbbc2 | kippig | 2021-03-10 17:25:09 +0200 This vault was designed when spiders could cling to walls, updated it so the monsters at the back are more than pincushions -------------------------------------------------------------------------------- 27d45072b4 | Skrybe | 2021-03-10 16:33:43 +0200 Update trove.des Fix a couple of typos on my part. -------------------------------------------------------------------------------- 0306a34022 | Edgar A. Bering IV | 2021-03-10 08:48:01 +0200 Clarify acrobat description Be explicit that stairs don't count as moving. Closes #1816 -------------------------------------------------------------------------------- b9b556f605 | Edgar A. Bering IV | 2021-03-10 08:44:54 +0200 Add transparency/opacity information to poisonous_passages Closes #1818 -------------------------------------------------------------------------------- 94244163b4 | Nicholas Feinberg | 2021-03-09 20:05:48 -0800 Simplify Airstrike damage Remove the effects of empty surrounding spaces on variance. The effects on mean/max damage are unchanged. -------------------------------------------------------------------------------- a811992cb3 | Nicholas Feinberg | 2021-03-09 17:10:29 -0800 Make stealth ego work on any slot Also make it work while flying, heh. Closes #1815. -------------------------------------------------------------------------------- f99593c837 | advil | 2021-03-09 19:23:17 -0500 Swap L/R ring in % display order efe1b44 accidentally changed which finger the first ring goes on. This is actually good, because it resolves 11879 -- the first ring and the sacrifice hand are drawn from a consistent order where they are always different. However, now the order in % with only one ring looks odd. This prints the right ring first. (Sorry lefties..) -------------------------------------------------------------------------------- 3569856083 | advil | 2021-03-09 19:18:52 -0500 Condition a physiology check on bonelessness rather than species This is a minorly substantive change: it prevents formicid from getting thin skeletal structure. (Presumably the mut itself could be reflavored if anyone is bothered by this, it's sort of a weird special case anyways.) -------------------------------------------------------------------------------- 7488d4e55c | advil | 2021-03-09 19:15:00 -0500 Convert octopode tentacles to a real mutation These were a mess of special cases and custom form checks, so it's cleaner to have these as a real mutation. There's a minor loss of info in the % screen as "constrict 8" is replaced by just "tentacles", but this custom status could be readded if it's too missed. This leaves only the Op armour gimmick (restrictions + mantle) as hard-coded for this species. -------------------------------------------------------------------------------- 945025970d | advil | 2021-03-09 16:47:40 -0500 More hand name cleanup This cleans up two issues: * Some @crawlcode-worthy code to get "fist(s)" in some cases for statue form. This gets moved back into core hand name code, similar to how blade hands are done. * Going back on an immediately preceding commit, change again how plurality is handled for octopodes. It turns out that (per the manual) two tentacles are roughly equivalent to one hand, so even "one-handed" attacks with blade hands/statue form up still notionally involve multiple tentacles. -------------------------------------------------------------------------------- 3bd3a8edd8 | advil | 2021-03-09 16:00:22 -0500 Remove some direct conditioning on missing hand For cosmetic cases, use arm_count() instead. This has different behavior for octopodes with sac hand than the direct check, so still don't use it e.g. for form unarmed weapon labeling. Otherwise, MUT_MISSING_HAND is mainly now checked directly only for weapon handedness and shield cases. -------------------------------------------------------------------------------- efe1b44157 | advil | 2021-03-09 15:32:13 -0500 Refactor some eq slot checks This abstracts hard-coded species-based eq slot checks (that don't involve a mutation) to species.cc, and generally tries to clean up various handling of ring/arm counts. There was a lot of special casing around MUT_MISSING_HAND, custom octopus code, etc., that should at least be better now. -------------------------------------------------------------------------------- 4fbd9c9eec | Edgar A. Bering IV | 2021-03-09 10:25:43 +0200 Don't skip inventory items with Ashenzari pack-id Closes #1739 -------------------------------------------------------------------------------- 3872a02503 | Edgar A. Bering IV | 2021-03-09 10:25:43 +0200 Remove the holy word effect from Sanctuary Zin's Sanctuary did two things: 1. blast holy word and 2. create a sanctuary with strict non-agression conduct (even for evil things). Which mean that beyond flavour, the player couldn't take advantage of 1, and in any case this was never mentioned in the description in-game. Sanctuary is a defensive ability, so instead of also doing damage (that if non-lethal can't be followed up on sensibly) just create the sanctuary. As an added benefit, Closes #1703 -------------------------------------------------------------------------------- a093fd074c | Edgar A. Bering IV | 2021-03-09 10:25:43 +0200 Really don't print a resist message when the player casts fridge Closes #1814 -------------------------------------------------------------------------------- 6b246bc234 | Implojin | 2021-03-09 09:33:12 +0200 Document a clua TODO -------------------------------------------------------------------------------- ffa14badcf | Implojin | 2021-03-09 09:33:12 +0200 Replace a magic number in spl-cast.cc -------------------------------------------------------------------------------- e2a43ba0c9 | Edgar A. Bering IV | 2021-03-08 23:36:11 +0200 Adjust some Xom dialog Xom hasn't produced hostile dancing weapons in a very long time now. Closes #1731 -------------------------------------------------------------------------------- e9d3877a2d | Edgar A. Bering IV | 2021-03-08 23:23:39 +0200 Don't aim battlespheres at firewood Closes #1759 -------------------------------------------------------------------------------- 55242dfd9f | Edgar A. Bering IV | 2021-03-08 23:23:39 +0200 Don't leak invisible monster locations with Ignition Closes #1798 -------------------------------------------------------------------------------- ae615a3c3a | Edgar A. Bering IV | 2021-03-08 23:23:39 +0200 Don't prompt for Fedhas protected plants when using IMB Closes #1801 -------------------------------------------------------------------------------- bcb41fda2d | Kate | 2021-03-08 20:23:51 +0000 Adjust some duration short/wizmode names -------------------------------------------------------------------------------- 911d1a7525 | Kate | 2021-03-08 20:23:51 +0000 Add a debug message -------------------------------------------------------------------------------- a35e2b3484 | Kate | 2021-03-08 20:23:29 +0000 Further simplify the Elixir Merge the durations of HP and MP regen so that they expire together. -------------------------------------------------------------------------------- c41e867b77 | Kate | 2021-03-08 19:03:25 +0000 Give black draconians increased breath power in dragon form Other draconian breath weapons already get a breath power boost, and the spell description also claimed that this applied for black draconians too. -------------------------------------------------------------------------------- 328d1db4bd | Implojin | 2021-03-08 19:40:11 +0200 Fix shop purchase potion/scroll stacking This was broken in 83025b5. It turns out that items_stack() has some fairly particular conditions that don't necessarily match ISFLAG_IDENT_MASK, due to a potential lua info leak. For some background on this, see: crawl-dev-20151123.lg If this commit somehow breaks identify again, I apologize in advance. -------------------------------------------------------------------------------- 6f54807a0a | sdynet | 2021-03-08 19:25:44 +0200 Simplify the Elixir Grant both ELIXIR_HEALTH and ELIXIR_MAGIC at each tier, with duration scaling with power_level; no longer heal allies. [ Committer's notes: Closes #1751. Tweaked formulas. Updated card description. Removed ally heal. Edited commit message. ] -------------------------------------------------------------------------------- 36c66b7062 | Edgar A. Bering IV | 2021-03-08 18:47:51 +0200 Clarify Recite's description Recite scales with both piety and Invocations skill, so we should say so in the description. [ Closes #1711. ] -------------------------------------------------------------------------------- dab5b5aff9 | Implojin | 2021-03-08 18:48:07 +0200 Fix a wizmode shop placement crash At present, trying to place a gadget shop or a food shop will cause the game to crash. This commit adds a missing TAG_MAJOR_VERSION == 34 for gadget shops, and adds a guard against placing either gadget or food shops. -------------------------------------------------------------------------------- 089230926e | Nicholas Feinberg | 2021-03-08 08:44:10 -0800 Grant players a bounty of information Explicitly spell out each of Ash's passives. I tested on 80x24 - there's loads of space. Also clear up what exactly a 'cursed item' is and what it does, since that's an Ash-only thing now. -------------------------------------------------------------------------------- 711278a2bf | Nicholas Feinberg | 2021-03-08 08:44:10 -0800 Mark Lear's Hauberk useless for palentongas (Beargit) This was only being cheked with !ignore_temporary set, meaning that players weren't able to wear it (good!) but still showed it marked useful (bad!). -------------------------------------------------------------------------------- 2535176e0c | kippig | 2021-03-08 09:25:36 +0200 New kiku swamp vault Also correct some comments in swamp.des [ Committer's note: Closes #1781. Tweaked some glyphs, dropped some branch guests from the zombie list. Squashed and rebased. ] -------------------------------------------------------------------------------- 0d39f094a4 | gammafunk | 2021-03-07 22:57:41 -0600 Some Swamp decor vaults by nicolae (12518) Changes made by me are mainly to remove DEPTH: Swamp, which isn't necessary due to that being default depth, and to clean up spacing for multiline SHUFFLE. -------------------------------------------------------------------------------- 16b4af076a | gammafunk | 2021-03-07 22:45:25 -0600 Reindent and reglyph some Swamp vaults Reglyph to use undefined glyphs instead of T. -------------------------------------------------------------------------------- 6bc07cd232 | gammafunk | 2021-03-07 22:45:25 -0600 Add some sections to swamp.des -------------------------------------------------------------------------------- 7185523a23 | Kate | 2021-03-08 04:42:17 +0000 Fix fail_severity options The max value was set too low for both, since fail_severity now goes up to 5 for potentially lethal spells. -------------------------------------------------------------------------------- f249a0bc35 | Kate | 2021-03-08 03:33:41 +0000 Update monster for AF_ACID damage Since it was changed just recently in 2553e725d5b8. -------------------------------------------------------------------------------- 132d4964b8 | Kate | 2021-03-08 03:17:54 +0000 Update a default option -------------------------------------------------------------------------------- d03afb0eaa | Kate | 2021-03-08 01:03:00 +0000 Fix typo in a mutation desc -------------------------------------------------------------------------------- 25d98068a6 | Kate | 2021-03-07 23:07:42 +0000 Randomise the duration of scrolls of vulnerability Instead of fixing it at 400 aut for all targets. -------------------------------------------------------------------------------- 6c39d01e8d | Kate | 2021-03-07 23:05:09 +0000 Improve a Zot trap effect Don't allow applying 0 turns of -WL, and change the messaging to match other sources of temporary -WL. -------------------------------------------------------------------------------- e0ab5a2769 | Kate | 2021-03-07 17:41:31 +0000 Adjust some god conduct wording for consistency -------------------------------------------------------------------------------- 843053f431 | MinticePIU | 2021-03-07 18:44:08 +0200 god-conduct.cc trog line doesn't appreciate that you’re training magic -------------------------------------------------------------------------------- 98a349ffca | RojjaCebolla | 2021-03-07 18:43:19 +0200 Remove one of your -------------------------------------------------------------------------------- e92ec0ca06 | Neil Moore | 2021-03-06 22:49:22 -0500 Add a new Jiyva message. Death to Videodrome! -------------------------------------------------------------------------------- 79e8bcd247 | Nicholas Feinberg | 2021-03-06 18:32:57 -0800 Bump Psyche's Willpower Give her a better chance of accomplishing something at the depths she spawns. Her killratio is a piddling 1.3% in recent versions - do better, Psyche! -------------------------------------------------------------------------------- ea54bc4844 | Nicholas Feinberg | 2021-03-06 17:52:57 -0800 Ban quaffing known useless !cancel To save players less familiar with the long and somewhat arbitrary list of which effects are cancellable / not from completely wasting their time. (They can still cancel useful effects while not hitting useless ones, but...) -------------------------------------------------------------------------------- 113d0485ee | Nicholas Feinberg | 2021-03-06 17:45:18 -0800 Don't mark cancel useless Too confusing in the inventory UI. -------------------------------------------------------------------------------- 7bfaeff07b | gammafunk | 2021-03-06 19:26:24 -0600 Some overflow altar vaults by nicolae (12500) Edits on my part are mostly to reindent, simplify syntax, and to remove no_monster_gen and no_item_gen tags when possible. -------------------------------------------------------------------------------- 5ccdf786d2 | gammafunk | 2021-03-06 19:25:44 -0600 Reindent some vaults -------------------------------------------------------------------------------- 0983b4dd01 | gammafunk | 2021-03-06 19:25:28 -0600 Adjust ghost vault allow_dup tagging Previously we marked all ghost vaults as allow_dup, which meant they could all place multiple times. This was mostly a relic of when there were fewer ghost vaults and we didn't want games to be stuck without a ghost vault available. Now we have a wide variety of ghost vaults, including a reasonable set with both wide placement and generic enough theme that we can designate with allow_dup to prevent ghost vault shortages. This commit removes allow_dup as a default ghost vault tag, explicitly giving it to a small number of ghost vaults instead. -------------------------------------------------------------------------------- d81048afd2 | Edgar A. Bering IV | 2021-03-06 19:09:30 +0200 Remove an outdated bribe (dinky) -------------------------------------------------------------------------------- bbbe490cb5 | Nicholas Feinberg | 2021-03-06 09:12:09 -0800 Fix lucy bribe (dilly) It's 2021. Quick blades are on the menu! -------------------------------------------------------------------------------- 8b806e2825 | hellmonk | 2021-03-06 11:52:38 +0200 Allow Chei followers to use quickblades. This was a very silly thematic restriction that eliminated a potentially interesting character choice. The weapon of speed restriction is pretty silly too, but those are at least supposed to be magically fast or something; quickblades are just a weapon type with low attack delay. Chei does not care about the player reducing their attack delay by gaining weapon skill, nor does Chei care about the player taking quick actions like removing a ring or unwielding a weapon, so there is no reason to ban a weapon type merely because it has low delay. -------------------------------------------------------------------------------- de416216be | Edgar A. Bering IV | 2021-03-06 10:54:11 +0200 Dereference the correct pointer -------------------------------------------------------------------------------- 1a53e8493b | Edgar A. Bering IV | 2021-03-06 10:43:05 +0200 Don't shatter nonexistant curses (12534) -------------------------------------------------------------------------------- 15ff5c5295 | Nicholas Feinberg | 2021-03-05 18:14:19 -0800 Quiet husks down Even after raising Swamp ambient noise, they're still very loud. Add a slightly hacky special case for em. -------------------------------------------------------------------------------- 817a5d48fc | Nicholas Feinberg | 2021-03-05 17:53:59 -0800 Make Swamp loud The recent compression of Swamp, along with the addition of noisy bunyips and bloated husks, has meant that fights tend to end up drawing in the entire level at once. That's fun sometimes, but it probably doesn't need to happen all the time. To compensate, increase Swamp's ambient noise. This reduces the distance that noise travels, meaning noise from melee attacks, spells, and the aforementioned noisy enemies won't travel as far. Neither bunyips nor bloated husks were *intended* to call the entire level in on the player. Husks are mostly intended to be a tricky-to-detonate bomb, and bunyips' cry was intended to dilute their actions by making them spend less time rushing towards and pummeling you. So, this should move them closer to their original design purpose. -------------------------------------------------------------------------------- 4bdaa1e8ba | Nicholas Feinberg | 2021-03-05 17:52:58 -0800 Remove a shopless bazaar (beargit) I think that all of these old minmay `? = any shop / T` bazaars should be using NSUBST instead, but I'm too rusty to do the conversion properly. -------------------------------------------------------------------------------- 7eaf864cf9 | advil | 2021-03-05 13:35:29 -0500 Partially revert "Remove some miasma save compat" This commit was too aggressive; restore part of the Vs save compat it removed. This partially reverts commit 1d33414dbe85f26d31a52569107cbe4ec1205d62. -------------------------------------------------------------------------------- 117a7a4151 | advil | 2021-03-05 13:26:56 -0500 Clean up rTorment muts a bit This converts MUT_TORMENT_RESISTANCE to a two-level mutation. Level 1 is 50% damage reduction, previously hard-coded to gargoyles. The Gr fakemut becomes this. Level 2 is previous level 1, and so mummies/ghouls move to level 2. MUT_STOCHASTIC_TORMENT_RESISTANCE independently exists as a somewhat weird and unusual resistance mechanism that on balance seems to me to be a bit worse than just simple level 1 as it now exists, though it allows for getting lucky. I'll leave it alone for now though. -------------------------------------------------------------------------------- 1d33414dbe | advil | 2021-03-05 13:26:56 -0500 Remove some miasma save compat I'm pretty sure all this is unnecessary, and generic removed-mut code should clean up this mutation where it still exists. -------------------------------------------------------------------------------- cc1c95e81f | advil | 2021-03-05 13:26:56 -0500 Clean up miasma immunity * Remove the redundant and now inert (after 7c3aafa790) MUT_MIASMA_IMMUNITY from gargoyles and from the game. * Simplify the way unbreathing interacts with rMiasma, by just moving it straight into that code. (This doesn't affect gargoyles, because they are also non-living, but may affect grey draconians.) The fact that gargoyles are non-living isn't really cued anywhere, but the unbreathing part is shown in `A`, and since this now absolutely entails rMiasma also, it's probably ok to not directly show that effect in `A`. The wording of non-breathing could be tweaked if its cloud immunities aren't clear enough. (It's possible there's not even a need for non-living as such to prevent miasma now?) -------------------------------------------------------------------------------- b72ec1a1b6 | Nikolai Lavsky | 2021-03-04 19:24:15 +0200 Add spell damage info to the `I!` menu and morgues A third of player spells have damage info, but this information is well hidden. This commit adds a quick way to compare spells and to see all the numbers at once. -------------------------------------------------------------------------------- c2e2f7f19a | Nicholas Feinberg | 2021-03-04 09:03:39 -0800 Remove forxfire -------------------------------------------------------------------------------- 46cce82728 | Edgar A. Bering IV | 2021-03-04 18:57:16 +0200 Abort foxfire if it would obviously have no effect (AdamPG) Check if there's a visibly open space and abort the spell if there isn't one. This check happens before spell failure; if foxfire fizzles after this check it reveals an invisible foe, which the player should be charged for. Detected invisible foes currently don't count which is an edge case in a variety of ways in crawl, but a fix out of scope for this small tweak. Closes #1790 -------------------------------------------------------------------------------- 159f12dd07 | Aliscans | 2021-03-04 18:10:57 +0200 Stop explore from reporting a level as explored if there is an object on an excluded square. _explore_find_target_square() now rejects the first pathfind() call if it returns a "hostile" target. check_square_greed() no longer does anything similar. The latter change reverses e99fe26798. This means that an item in/behind an excluded area triggers a "partly explored" message. If an item/space is behind a runed door, explore continues to target it. -------------------------------------------------------------------------------- da5465ab1e | Aliscans | 2021-03-04 18:10:57 +0200 Allow excluded squares in _is_travelsafe_square() if ignore_hostile is set. This means that explore reports the search as being incomplete if an excluded area blocks off the only access to the explore_horizon. -------------------------------------------------------------------------------- 5993a9cae7 | Aliscans | 2021-03-04 18:10:57 +0200 Make _is_reseedable(c, false) return false for walls and trees which are in an exclusion. This stops the game from incorrectly assessing a level as not being completely explored when an excluded area reaches a wall which has an unexplored square beyond. -------------------------------------------------------------------------------- 16523e7f5b | hellmonk | 2021-03-04 17:58:29 +0200 Nerf the dex meta Feedback has made it clear that it's a bit too easy to reach high levels of ev. This commit reduces the dodging*dex factor by 20%. High levels of dex and dodging should remain rewarding, but a little less so, and will be worse until the player gets there. To compensate the very early game, the flat portion of dodge_bonus increases slightly. [ Closes #1784. Committer's note: squashed and rebased. ] -------------------------------------------------------------------------------- 7e0ef7a368 | Skrybe | 2021-03-04 17:12:33 +0200 New Trog-themed weapon trove New trove: an abandoned arena once used by reveling Trog worshipers. Loot is similar to other weapon troves, but some Trog acquirements (lower chance of rare base types, but higher enchantment and increased chance for antimagic) are mixed in with the standard acquirements. The results are distinct from other weapon troves while still providing some solid loot. I took 5 weight from both trove_weapon_1 and 2, to keep the overall weight of weapon-only troves the same. Also noticed that trove_weapons_four_rooms was missing the skill-based veto chance other weapon troves have, which I assumed was an oversight, so I added that as well. -------------------------------------------------------------------------------- 88e10a6b4d | Skrybe | 2021-03-04 17:12:33 +0200 Edit skrybe_vaults_entry_preservation Tweak a Vaults entry of mine to use either stone or metal walls, instead of always metal. Also remove an unused monster definition. -------------------------------------------------------------------------------- 46bbb28828 | advil | 2021-03-03 20:16:20 -0500 Refactor some swimming fakemuts * Standardize printing of an amphibious fakemut based on habitat (each of Ba, Op, and Mf took a different strategy for this). * Add a two-level mutation MUT_NIMBLE_SWIMMER. Level 1 is stealth only (Op), and level 2 is stealth + Mf EV/movespeed bonuses. (This packs a lot into level 2, but I think this design is a bit cleaner than having a distinct mutation for EV/movespeed.) I've removed some fishtail checks here, in way that I'm *pretty* sure is safe. -------------------------------------------------------------------------------- 61e7d874a1 | Neil Moore | 2021-03-03 18:30:31 -0500 Don't make the -Potion light always darkgrey (Yermak) If the inability to drink is temporary, it's because of this duration, so keep the light red in that case. -------------------------------------------------------------------------------- b83adbd1c9 | Edgar A. Bering IV | 2021-03-03 19:43:51 +0200 Add a monster info bit for susceptibility to vampirism Closes #1725 -------------------------------------------------------------------------------- 10c448b48d | Ebonnov | 2021-03-03 19:43:51 +0200 Targeter describes if monster is susceptible to Vampiric Draining Now that susceptibility is determined by rN, the targeter can sanely distinguish if vampiric draining would do nothing to the target or vampiric draining would gain no HP from the target. -------------------------------------------------------------------------------- c0d12b3c5c | Ebonnov | 2021-03-03 19:43:51 +0200 Remove selfench flag from Vampiric Draining This allows the range display to work automatically. _ms_ranged_spell() gains a special case, if monsters gain many more range-1 spells this function will need to check spell range. [ Committer's note: reworded message. ] -------------------------------------------------------------------------------- d5a6684c90 | Ebonnov | 2021-03-03 19:38:43 +0200 Make Vampiric Draining a zap and a beam Creates a zap and an enchantment beam flavor (mimicking Malign Offering among other damage-dealing enchantment beams) for Vampiric Draining, replacing existing separate implementation of player version and monster version. Coming from the technical conversion are the following gameplay changes: - monster version can now deal more damage than caster's missing HP (i.e. getting player version treatment of 4e331d2). - damage formula changed from 2d5+1d(pow/7) to 2d(6+pow/14), with similar expectation and max, and increased chance to roll close to bottom and top ends. And as an immediate gain: - monster version shows damage. - quiver is now enabled only when visible non-susceptible target is in range. One wart: - casting on non-susceptible target no longer aborts the spell. This means that casting with autofight (shift-tab/p) can now fizzle (outside living rN+++ monsters). This is consistent with the behavior for hexes and pain; a solution to this issue would be a wide-reaching improvement to crawl. [ Committer's note: Reworded commit message. Didn't include all of the submitted gameplay changes; the beam only works on vampirism susceptible targets. This specific vulnerability gets revealed to monster_info in a later commit. ] -------------------------------------------------------------------------------- 4ea69e3b24 | advil | 2021-03-03 10:37:40 -0500 Mark steam resistance as suppressed by forms This is for consistency with other draconian types; the breath ability is already suppressed as well. -------------------------------------------------------------------------------- bac44d21f1 | advil | 2021-03-03 10:37:12 -0500 Reduce explicit species checks: gnoll All that was needed for this is to convert distributed training from a fakemut to a real mutation. This was fairly straightforward overall. `_player_is_gnoll` from e00f04a389b562 becomes a direct mutation check; it looks like this helper function was added to make the code overall more readable/systematic (probably to avoid bugs when modifying this code) so I think checking a mutation in a systematic way accomplishes this goal as well. -------------------------------------------------------------------------------- fb3425029c | Edgar A. Bering IV | 2021-03-03 16:05:29 +0200 Mark a vault as transparent -------------------------------------------------------------------------------- 46ec449faf | Aliscans | 2021-03-03 09:17:08 +0200 Don't make a note when the player finds an altar for a god the character can't worship. Add a "temp" parameter to player_can_join_god() and player::undead_or_demonic(). If false, the functions ignore temporary effects from mutations and spells, and only consider permanent barriers such as the player's species and Ru sacrifices. Use this to stop the game from making a note on finding an altar for a god the character will never be able to worship. -------------------------------------------------------------------------------- 57cc695410 | Nicholas Feinberg | 2021-03-02 21:36:03 -0800 Reword Forlorn mut I couldn't resist, sorry. -------------------------------------------------------------------------------- c95325c382 | Nicholas Feinberg | 2021-03-02 21:23:51 -0800 Improve manifold/unrand messaging (dilly) Be clearer about why you can't manifold with singsword right now. -------------------------------------------------------------------------------- 0df57e7cfc | Nicholas Feinberg | 2021-03-02 18:52:03 -0800 Give Wyrmbane a glow up (Wensley) Print a message when a dragon with high enough HD to give Wyrmbane an upgrade comes into view. (This is a semi-despoiler of HD mechanics.) -------------------------------------------------------------------------------- 818f26b0ed | advil | 2021-03-02 20:05:27 -0500 Fix behavior of `species_mutation_level` I had misunderstood how level gains were represented when I first wrote this; fix it to use the total mutation level at an xl rather than the change at an xl. -------------------------------------------------------------------------------- 3920f8e293 | advil | 2021-03-02 19:58:40 -0500 Reduce explicit species checks: naga * MUT_CONSTRICTING_TAIL becomes two level, where the first level is mainly cosmetic and prevents boots. The old boot fakemut is no longer needed. * Some tweaks to how walking verbs are used; Naga is standardized on "slither" (this was hard-coded in one place, but the yaml used "slid"). This will change some lugonu titles. This commit also slightly generalizes species fixup code to handle multiple levels of a mutation. There's some flavor code that I didn't figure out a good way to generalize. -------------------------------------------------------------------------------- 96d86173be | advil | 2021-03-02 19:58:28 -0500 Remove an extraneous function -------------------------------------------------------------------------------- 2188dfaaa0 | advil | 2021-03-02 16:52:43 -0500 Fully unremove forlorn -------------------------------------------------------------------------------- 84b802d940 | advil | 2021-03-02 15:29:46 -0500 Reduce explicit species checks: demigod This commit is part of a series that attempts to more cleanly treat species as bundles of traits/behaviors that have their own well-defined semantics, and minimize the use of explicit species checks in the code. * Repurpose old MUT_FORLORN to indicate Dg's atheist conduct. (I'm not sure if the short-form "forlorn" flavor quite works?) * Abstract/generalize the stat gain stuff into species.cc a bit. I'm sort of torn about whether it makes sense to even bother doing this except for the principle of the thing. I did decide this was good to add to the ability screen, but it's implemented as a programmatic fakemut based on the stat gain multiplier rather than a realmut. -------------------------------------------------------------------------------- 658772aece | advil | 2021-03-02 12:00:13 -0500 Actually add MUT_MULTILIVED to felid ... tested save compat but not actually making a new character... -------------------------------------------------------------------------------- 39af0f7025 | advil | 2021-03-02 11:56:17 -0500 Reduce explicit species checks: felid part 3 This is the change for felids I'm least sure of (in the sense of, is it worth being principled to this degree): convert the hard-coded life-gaining ability to a species mutation. This does get some minor UI gains in that the ability shows up in the mutation list now. -------------------------------------------------------------------------------- 9f681435c2 | advil | 2021-03-02 11:56:17 -0500 Reduce explicit species checks: felid part 2 This commit covers many things: * no weapons/ammo is converted from a fakemut to MUT_NO_GRASPING. * no armour is converted from a fakemut to MUT_NO_ARMOUR (the Ru sac mut is renamed). For these two changes I alternatively considered lumping them into one mutation, or lumping both of them into MUT_PAWS. However, it seemed cleanest / most readable to keep them distinct, even though these three mutations don't ever appear separately. Also: * Refactor skin flavor some more, add code to get the noun forms, add felid to this. I also tweaked a few flavor messages around this. * A few more misc paw-related tweaks that I had missed. * Refactor species scream verbs; these get moved into species.cc with a few tweaks. (e.g. add growling to gnoll directed 0-level shouts.) -------------------------------------------------------------------------------- e23dd17498 | advil | 2021-03-02 09:15:33 -0500 Fix sac drink preconditions Flipped in 9b28f76f3da3. -------------------------------------------------------------------------------- fc1ad161a1 | advil | 2021-03-02 09:15:33 -0500 Reduce explicit species checks: felid part 1 Refactor some remaining paw-related issues (60a0ea410 addressed some of these already). Mainly: Consolidate MUT_PAWS with the stealth fakemut, and finish conditioning various felid stealth-related checks on this mutation instead of the species. This lightly reflavors MUT_PAWS to mention both stealth and pouncing, and leaves the sharp claw stuff to the co-existing MUT_CLAWS. The fakemut is gone altogether, and some form interactions are more standardized, so the mutation screen will more accurately display with the stealth bonus is suppressed. -------------------------------------------------------------------------------- d4c891490c | Edgar Bering | 2021-03-02 07:40:59 -0500 Changelog through 0.27-a0-498 -------------------------------------------------------------------------------- 7ecbb0a48f | hellmonk | 2021-03-01 20:08:35 -0800 Make *slow stack in the same way as *corrode. Instead of being slightly different for no reason. Closes #1785. -------------------------------------------------------------------------------- 5f1ef305e6 | Aliscans | 2021-03-01 19:54:17 -0800 Rename local variables in spectral_weapon_fineff::fire(). The following compiler warning was given by gcc 10.2.0. Renaming def removes the warning. I also renamed atk, but only for consistency. fineff.cc: In member function ?virtual void spectral_weapon_fineff::fire()?: fineff.cc:721:12: warning: declaration of ?def? shadows a member of ?spectral_weapon_fineff? [-Wshadow] 721 | actor *def = defender(); | ^~~ In file included from fineff.cc:9: fineff.h:30:16: note: shadowed declaration is here 30 | mid_t att, def; Closes #1792. -------------------------------------------------------------------------------- 18f1c7c63f | Nicholas Feinberg | 2021-03-01 19:31:16 -0800 Don't make monster refrig affect the caster Symmetry with the player version. -------------------------------------------------------------------------------- 905266d83c | Nikolai Lavsky | 2021-03-01 18:54:45 -0800 Describe Ozocubu's Refrigeration and Drain Life in monster The spells weren't handled by ``mons_spell_beam()``, so the monster utility wasn't showing their damage. Unlike monster, xv can already show the damage for these spells, since it gets the numbers in a different way. (Committer's note: moved this into the nicer struct.) -------------------------------------------------------------------------------- e178da98d6 | Nicholas Feinberg | 2021-03-01 18:44:21 -0800 Cancellation descr improvements (12531, Yermak) - Don't print empty statuses - Don't print (expiring) - Further clarify when it'll have no effect -------------------------------------------------------------------------------- 85c0b4d56b | Kate | 2021-03-02 02:23:34 +0000 Fix a vault randart Randart armour isn't supposed to be given egos, and doing so can generate buggy items (like boots with double rampaging in this case). -------------------------------------------------------------------------------- a4bb394fd4 | Edgar A. Bering IV | 2021-03-01 22:12:40 +0200 Allow Ash boosts to adjust max hp, mp and spell levels Ashenzari boosts are long-lived and intended to be functionally equivalent to having the extra skill levels. Heroism still does not give a boost to maxhp, partly because it seems like a technical headache because of how heroism is implemented. -------------------------------------------------------------------------------- 2427743e6d | Edgar A. Bering IV | 2021-03-01 22:12:40 +0200 Don't grant curse skill boosts for melded equipment (PleasingFungus) Since the curse boost is an equipment property and the rest of those are suppressed by transmutation, let's be consistent and withdraw transformed bonuses. So players can see what has happened this is reflected in the ^ screen. -------------------------------------------------------------------------------- 656fa3bc60 | advil | 2021-03-01 11:43:49 -0500 Reduce explicit species checks: draconian This commit is part of a series that attempts to more cleanly treat species as bundles of traits/behaviors that have their own well-defined semantics, and minimize the use of explicit species checks in the code. Red draconians: fix up a manual zap conversion. Pale draconians: convert steam resistance to a real mut (before it wasn't shown at all, perhaps because it seems not-very-important?) Grey draconians: * There's still a hard-coded ac bonus in player::racial_ac, wasn't obvious to me that there is a clean way to abstract this one. * Their relationship to water was very confused; I have (maybe) cleaned this up a bit. Previously, they had MUT_UNBREATHING, a fakemut about walking through water, can_swim=True, and a hard-coded check in player::extra_balanced. The latter, I'm pretty sure, is currently redundant with swimming (it probably wasn't in the past). I have consolidated these by making MUT_UNBREATHING two levels, where the second level is flavored like the old fakemut. The fakemut is gone, they aren't specified as swimming (though the mut is still checked in swimming code), and extra_balanced has been refactored, including some unrelated cleanups. -------------------------------------------------------------------------------- 24c7b1a3ef | Edgar A. Bering IV | 2021-03-01 08:05:44 +0200 Nerf new Ashenzari skill boost Making it easier to get multiple of the same curse and also doubling the boost formula was effective in making it more powerful. Too powerful. Two curses of the same type still give a multiplier equal to the "fully bound" level of old Ashenzari, so hopefully this lands on a good power level. -------------------------------------------------------------------------------- 88baaf19db | Nicholas Feinberg | 2021-02-28 21:12:16 -0800 Preview !cancel in its description List the effects that will be removed. -------------------------------------------------------------------------------- fad94b14d9 | Nicholas Feinberg | 2021-02-28 21:01:22 -0800 Make duration data short text consistent If my next commit is going to work, all of these have to be in adjective form, not just some! -------------------------------------------------------------------------------- ed9a95061b | Nicholas Feinberg | 2021-02-28 20:23:11 -0800 Mark !cancel useless when appropriate (If neither contaminated nor buffed.) -------------------------------------------------------------------------------- 83795c0764 | Nicholas Feinberg | 2021-02-28 19:40:44 -0800 Deduplicate animals Now that our favourite +8 unrand rings have been renamed. -------------------------------------------------------------------------------- 5fc3b572a5 | Kate | 2021-03-01 02:41:27 +0000 Prevent entering pre-existing piety troves under Ashenzari In the weird edge case where you find a piety trove and then convert to Ashenzari, don't allow entry at all, since reducing piety is tied to shattering cursed items (and causes buggy behaviour if reduced normally). -------------------------------------------------------------------------------- 7290ec1f24 | Nicholas Feinberg | 2021-02-28 17:31:16 -0800 Reduce Ash join spam Don't ID things you've already ID'd! -------------------------------------------------------------------------------- 278a1cfa91 | Nicholas Feinberg | 2021-02-28 17:23:13 -0800 Ban piety troves under New Ash They don't work properly (your piety resets once you reload or curse another item) and it's not very clear what making them work properly would even mean. -------------------------------------------------------------------------------- e66e4f1fd0 | Nicholas Feinberg | 2021-02-28 17:10:44 -0800 Simplify spellforged servitor energy (hellmonk) De-randomize them: instead of taking 10-25 energy to cast a spell, take 18 consistently. This appears on their xv, which is nice. Further context: - 3595075b7f7 - f37f6fb1095 -------------------------------------------------------------------------------- 190982bc61 | advil | 2021-02-28 20:04:06 -0500 Reduce explicit species checks: palentonga This commit is part of a series that attempts to more cleanly treat species as bundles of traits/behaviors that have their own well-defined semantics, and minimize the use of explicit species checks in the code. Only minor things here: * condition MUT_ROLL upgrades on having the mutation innately * refactor/simplify some tail code (no changes to behavior) * move the barding code to species.cc, perhaps for later dataification -------------------------------------------------------------------------------- 11248dd59e | Nicholas Feinberg | 2021-02-28 16:11:00 -0800 Don't trigger spectral weapon on all attacks (particleface) (oops) -------------------------------------------------------------------------------- c496030317 | advil | 2021-02-28 19:00:44 -0500 Reduce explicit species checks: minotaur This commit is part of a series that attempts to more cleanly treat species as bundles of traits/behaviors that have their own well-defined semantics, and minimize the use of explicit species checks in the code. Minotaurs were in reasonable shape, only two tweaks: * Convert retaliatory headbutt to a real mutation. This allows removing some custom mutation suppression code. * Tweak some hints mode tips to talk about horns, rather than species. (Also, one hopefully cosmetic fix for the mutation data structure..) -------------------------------------------------------------------------------- b294f25f7b | Nicholas Feinberg | 2021-02-28 15:44:08 -0800 Trigger spectral weapon on all attacks Including misses & blocked attacks. This should bring it closer to the design goals/tradeoffs described in e6bb7ee78e63. -------------------------------------------------------------------------------- 757c4c4f7f | Nicholas Feinberg | 2021-02-28 15:34:08 -0800 Drop Depths monsters count again XP down 4% from 0.26, which seems a-ok. Goal is to make overall difficulty closer to what it was before the removal of chaff. -------------------------------------------------------------------------------- 4587593e40 | Edgar A. Bering IV | 2021-02-28 21:28:33 +0200 Don't allow shattering melded items (12528) -------------------------------------------------------------------------------- 60b1cd0c92 | Edgar A. Bering IV | 2021-02-28 21:28:33 +0200 Don't offer Ash monks the second curse too fast Give them a chance to apply the first curse, and just set the progress timer to most of the way to the second curse so it will appear quickly. Closes #1782 -------------------------------------------------------------------------------- 585d864186 | advil | 2021-02-28 14:18:04 -0500 Reduce explicit species checks: vinestalker Vinstalkers are in good shape, this is the only obvious change I found. -------------------------------------------------------------------------------- 9b28f76f3d | advil | 2021-02-28 14:18:04 -0500 Reduce explicit species checks: mummy This commit is part of a series that attempts to more cleanly treat species as bundles of traits/behaviors that have their own well-defined semantics, and minimize the use of explicit species checks in the code. For mummies: * convert a hardcoded adjustment to rF + fakemut to use MUT_HEAT_VULNERABILITY. I can't find any reason this wasn't done in the past except that it was very old code. There is a minor flavor difference in the wording of the mutation. * add a real mutation for non-drinking. I also did a bunch of cleanup and refactoring of the drinklessness checks (you_drinklessness -> you.can_drink). * for some flavor stuff, use the skin adjective string added in a previous commit. Not sure if this is ultimately the best way, but it seems to me to still be an improvement in that this flavor logic is better consolidated. * clean up player::can_bleed; should have no behavior changes. * Generalize player::can_smell (which is for flavor only): no lifeless undead can smell after this commit. -------------------------------------------------------------------------------- fef436477a | advil | 2021-02-28 14:15:52 -0500 Rename (internally) two Ru mutations No user-facing changes, but the mut names were somewhat misleading. -------------------------------------------------------------------------------- 07dbac4f64 | advil | 2021-02-28 14:15:52 -0500 Reduce explicit species checks: tengu This commit is part of a series that attempts to more cleanly treat species as bundles of traits/behaviors that have their own well-defined semantics, and minimize the use of explicit species checks in the code. Tengu are easy. A previous commit cleaned up some superficial code, and this one uses the tengu flight mutation for a bunch of cases rather than checking the species directly. -------------------------------------------------------------------------------- 009b781653 | advil | 2021-02-28 14:15:52 -0500 Convert hands to fists for UC forms name Separating this bit out because it is kind of hacky... -------------------------------------------------------------------------------- 60a0ea410a | advil | 2021-02-28 14:15:52 -0500 Consolidate and clean up some body part name code This tries to reduce a bunch of code duplication while making some body part name cases more consistent, and also reduce reliance on species-specific checks. Biggest changes to blade hands code, which is/was fairly involved, but hopefully all changes are improvements. The commit removes the general blade hands name ("scythe-like blade") that was used in various cases, awkwardly, and uses a clean version of the regular hand name. For ice form, we use "Ice paws" (instead of "Ice fists") in the UI -- the form data already used "paws" as the hand name (for e.g. ring wearing), so this improves consistency. For statue form, I used the regular hand name instead of "fists"; maybe this should still be customized for the "hand" case (but it reduces duplication of similar code). This stuff was all complex enough that there may well be corner cases that this commit breaks... -------------------------------------------------------------------------------- b314f132a3 | advil | 2021-02-28 14:15:52 -0500 Reduce explicit species checks: formicid This commit is part of a series that attempts to more cleanly treat species as bundles of traits/behaviors that have their own well-defined semantics, and minimize the use of explicit species checks in the code. For formicids: * use you.stasis() instead of a species check. This might be even better converted from a fakemut to a realmut, but since this call already existed (for actor even) I repurposed it. If anyone ever adds back in non-perma-stasis, that would be a good time to turn this into a mut. * Lump formicid dig in with monster burrowing (since they have the same behavior) and add an actor call. Again, for players this could be turned into a realmut eventually, similar to the monster bit. This ties player self-shaft in with this check too. * Convert four-handedness from a fakemut to a real mutation (MUT_QUADRUMANOUS). * Use innate_sinv() instead of species checks; this may change some semantics for physiology conflicts (but probably in a good way). * For cosmetic reasons add a minor species check for bonelessness (Op and Fo). -------------------------------------------------------------------------------- 171c57d503 | Edgar A. Bering IV | 2021-02-28 20:47:19 +0200 More Ash randnames (nicolae) -------------------------------------------------------------------------------- f192cf5699 | Kate | 2021-02-28 18:01:19 +0000 Reword some Ashenzari curse names -------------------------------------------------------------------------------- f1db142f3a | Kate | 2021-02-28 17:46:43 +0000 Assign Ashenzari abilities to uppercase letters As with Ru sacrifices. They could also potentially just be assigned to 'a' and 'b' like other god invocations, but either way shouldn't use the current assignments of 'f' and 'g' which are for non-invocation abilities. -------------------------------------------------------------------------------- ec7707c53d | Neil Moore | 2021-02-28 01:27:53 -0500 Staticalise a function -------------------------------------------------------------------------------- 2bdad01aa9 | Neil Moore | 2021-02-28 01:25:53 -0500 Refactor into set_artefact_brand() -------------------------------------------------------------------------------- 2a051d674a | Neil Moore | 2021-02-28 01:09:14 -0500 Preserve brands when Ash-cursing items (#12527) -------------------------------------------------------------------------------- 297a19dbdb | Nicholas Feinberg | 2021-02-27 18:15:50 -0800 New Nemelex skill titles (hellmonk) Very cute. -------------------------------------------------------------------------------- 0891b3a2b8 | Nicholas Feinberg | 2021-02-27 17:20:54 -0800 Finish removing Depths chaff As the prelude to Vaults changes, remove some weak monsters present in both Depths and Vaults. Reduce total Depths spawns by roughly 8% to compensate. Total XP remains unchanged. The first part of this commit was inadvertently included in fdd91fc31 . -------------------------------------------------------------------------------- fdd91fc31c | Nicholas Feinberg | 2021-02-27 17:01:21 -0800 Temporarily tweak Tengu Reaver's spells Lightning Spire doesn't quite work yet as a monster spell. I like the idea of it, but don't currently have the time to fix it up. Instead, give reavers a pile of elemental bolt spells to really simulate the classic cj experience. Total spell weight equal to the old MST_TENGU_REAVER_III. -------------------------------------------------------------------------------- ba82baf56e | Edgar A. Bering IV | 2021-02-27 19:39:17 +0200 Fix a crash -------------------------------------------------------------------------------- 8b5a972acc | Edgar A. Bering IV | 2021-02-27 18:42:53 +0200 More Ashenzari artefact names (nicolae) -------------------------------------------------------------------------------- 6169cafb0b | Edgar A. Bering IV | 2021-02-27 18:19:34 +0200 Increase the skill boost contribution of piety Even after consolidating curses into bins, getting three curses of the same type is rare (less than 8% of 10-curse rolls will have any triple at all; less than 1% of 10-curse rolls will have a chosen triple). Over the longer run, if the player is willing to make gear sacrifices or wait for more curse re-rolls these odds can be increased, of course, but at a cost. New skill boosts scale with the number of curses, so it's hard to get the multiplier up to the range of old skill boosts without luck. This commit increases the contribution from piety, which should both make foregoing curses more noticable and the impact of adding "irrelevant" curses. -------------------------------------------------------------------------------- b9714ae4ff | Edgar A. Bering IV | 2021-02-27 17:17:57 +0200 Reforge the Chains VII: Grouped skill bonuses After initial playtesting feedback, completely random skills had some interesting upsides (when the stars aligned and a triply-cursed skill could also be utlized it was a good moment) they were also frustrating and had bad gamefeel: - multiple melee skills when a player is probably only using one (maybe two) - hard to roll relevant magic skills - occasionally taking a "useless" or "not that useful" curse was fun but it was happening too often. This commit changes the skill bonuses to be granted in the following skill groupings, more fine grained than the old ash skill categories but not as broad as totally random skilling: Melee: all melee combat skills Ranged: all ranged combat skills Fortitude: Armour and Shields Cunning: Dodging and Stealth Elements: Air, Earth, Fire, and Ice Magic Alchemy: Transmutations and Poison Magic Beguiling: Conjurations, Hexes, and Translocations Companions: Necromancy and Summonings Self: Fighting and Spellcasting Evocations: Evocations. Each curse offers two out of these ten categories chosen at random and without weight. This will hopefully allieviate some of the bad feelings from totally random skill boosts while retaining the character shaping aspects of the narrower bonus granting. In lieu of save compatibility, since this has only been live on trunk briefly, this commit just switches to a new prop key for the new curses. -------------------------------------------------------------------------------- f5a408906c | Edgar A. Bering IV | 2021-02-27 16:52:52 +0200 Remove a now-unused enum type -------------------------------------------------------------------------------- 9f69345686 | Edgar A. Bering IV | 2021-02-27 11:46:48 +0200 Change weapon abbreviations to match aptitudes.txt -------------------------------------------------------------------------------- c9da168cd4 | Edgar A. Bering IV | 2021-02-27 11:11:24 +0200 Always reset curse progress when shattering Otherwise, the player is incentivized to shatter "just before" the curse timer times out, which means tracking the timer, to minimize the time spent at lower piety. -------------------------------------------------------------------------------- e8ee47db1e | Edgar A. Bering IV | 2021-02-27 11:03:24 +0200 Tweak some Ash god power messaging -------------------------------------------------------------------------------- 68ea36cf6f | Edgar A. Bering IV | 2021-02-27 11:03:07 +0200 Increase curse frequency in various ways This decreases the curse delay from 50 to 20, making curses more plentiful. The curse delay was copied from Ru, but Ru sacrifices offer far more benefit than a single curse. The delay was also re-set upon accepting a curse, this behavior was somewhat opaque; curses now come at the same rate regardless of whether they're accepted or ignored. This commit also arranges for monks to be offered two curses shortly after joining, instead of one. -------------------------------------------------------------------------------- ace5c5693b | Edgar A. Bering IV | 2021-02-27 02:01:24 +0200 Don't offer to shatter the chains uncursed (12524) -------------------------------------------------------------------------------- 443c4d33a9 | Edgar A. Bering IV | 2021-02-27 01:51:14 +0200 Tweak Ash curse randart names (nicolae) -------------------------------------------------------------------------------- 889b946b96 | Edgar A. Bering IV | 2021-02-27 01:50:09 +0200 Fix save compatibility props initialization -------------------------------------------------------------------------------- be96e517c0 | Edgar A. Bering IV | 2021-02-26 23:03:48 +0200 Fix a db lookup regression (PleasingFungus) -------------------------------------------------------------------------------- 40f7080bd1 | Goratrix | 2021-02-26 22:59:20 +0200 Add the AK splash screen to webtiles File was added with 7ddf969 but needs to be added here to appear in webtiles. -------------------------------------------------------------------------------- 85b7f54256 | AdamPG | 2021-02-26 22:58:03 +0200 Fix a typo in geoelf_rooms.lua -------------------------------------------------------------------------------- e386880645 | Nikolai Lavsky | 2021-02-26 22:57:02 +0200 Refactor a conditional in `spell_uselessness_reason` Also, fix a colour tag in `_player_spell_desc`. -------------------------------------------------------------------------------- ed6ad04f2f | Nikolai Lavsky | 2021-02-26 22:57:02 +0200 Don't waste time casting Sublimation of Blood when at max MP After 4502bb1e, the player can cast Sublimation when at max MP. The description still has the "This spell would have no effect right now" warning, and the spell is correctly greyed out on the quiver in this situation, though. Fix this by moving Sublimation's MP check into a function that is called before subtracting the MP cost. This adds a spell-specific check to casting-specific ones, but it's good to have all MP-related checks in one place. Also, it's clearer than temporarily refunding the spell cost, as it was before 4502bb1e. -------------------------------------------------------------------------------- 4d387a3930 | Edgar A. Bering IV | 2021-02-26 22:40:52 +0200 Tweak Ashenzari piety gain Ensure all species get to 1* piety with at most two curses. Save poor little octopus. -------------------------------------------------------------------------------- cc4f045668 | Edgar A. Bering IV | 2021-02-26 22:18:31 +0200 Activate Ash skill boost from 0* (mdonais) The skill boost requires curses to take advantage of; at 0* and only one curse the skill point multiplier is 4. Compared to 24 for one curse at 6* this isn't that noticable. In exchange, the play experience is clearer: all of the messages about curses being tied to skills don't have to have caveats, and a Monk actually gets something immeidate out of using their first curse. -------------------------------------------------------------------------------- 904f624fcb | Edgar A. Bering IV | 2021-02-26 22:17:41 +0200 Mark ?id useless for ash followers (mdonais) -------------------------------------------------------------------------------- edbb297545 | Edgar A. Bering IV | 2021-02-26 22:10:09 +0200 Default force_more for curse offering (mdonais) -------------------------------------------------------------------------------- d758f4ad8f | Edgar A. Bering IV | 2021-02-26 22:01:16 +0200 Describe curse exploration (mdonais) -------------------------------------------------------------------------------- ba0159d6e4 | Nicholas Feinberg | 2021-02-26 08:24:22 -0800 Fix unused variable warning -------------------------------------------------------------------------------- 1c28abb116 | Edgar A. Bering IV | 2021-02-26 17:30:49 +0200 Canonical skill abbreviations for display Currently used for Ru and Ashenzari ability menu display, and Ash curse inscriptions. -------------------------------------------------------------------------------- fcfbbb0451 | Edgar A. Bering IV | 2021-02-26 17:30:49 +0200 Create a new vision_iterator (PleasingFungus) A handful of places in the code performed a radius_iterator iteration over LOS_NONE and then immediately filtered for you.see_cell to respect scrying and wizard xray vision effects. This iterator encapsulates the idiom of iterating over an actor's vision (permitting actor::see_cell to override the considerations of LOS checks). -------------------------------------------------------------------------------- cf6be6ae82 | Edgar A. Bering IV | 2021-02-26 17:29:57 +0200 Reforge the Chains VI: Randartify cursed items To make the curses more permanent, cursed items are made into randarts if possible, locking in their brand and enchantment. No randart props are granted (other than the skill boosts!). Randart names are generated from a special Ashenzari keyword in the database for a thematic name. Thanks to CanOfWorms,hatsuma, Lici_the_Crawler, nicolae, and PleasingFungus for curse name suggestions. -------------------------------------------------------------------------------- 6c61df32c5 | Edgar A. Bering IV | 2021-02-26 17:25:03 +0200 Code cleanup of old curse code -------------------------------------------------------------------------------- b19e37cef9 | Edgar A. Bering IV | 2021-02-26 17:25:03 +0200 Save compatibility for new Ashenzari -------------------------------------------------------------------------------- 6fc834afe4 | Edgar A. Bering IV | 2021-02-26 17:25:03 +0200 Reforge the Chains V: Bind skill knowledge to curses This commit reimagines Ashenzari curses to offer specific knowledge (in exchange for binding the slot). Currently Ash picks two skills and the player can either take the curse and the knowledge, or ignore it. Ash will eventually offer a new curse. This choice can hit the player in a variety of ways: are the skills offered too good to pass up, thus ending up on an otherwise not great item for a long time? Are the skills not ones the player anticipates using but they're desparate for piety so they'll put a not great curse on a great item? Both are good, and occasionally the player will delight in getting the opportunity to put a good curse on a good item they want to keep! With the variety of curses, it remains possible for an Ash character to be a jack of all trades, but also to become highly focused in something that might otherwise be hard for their species! Exciting possibilities abound, that will need some further number tuning. -------------------------------------------------------------------------------- 0b9efa778e | Edgar A. Bering IV | 2021-02-26 17:25:02 +0200 Remove an XXX; startup.cc handles the issue in question -------------------------------------------------------------------------------- da19f9da44 | Edgar A. Bering IV | 2021-02-26 17:24:45 +0200 Reforge the Chains IV: Shatter the Chains To go with the new curse scheme, uncursing becomes available to any cursed Ash worshipper. Uncursing removes and destroys the item (triggering all on remove effects, no secret disto unwield tech). It also forgoes the currently offered curse and re-sets the curse timer (to make sure uncursing is felt). -------------------------------------------------------------------------------- c9f47ef48c | Edgar A. Bering IV | 2021-02-26 17:22:30 +0200 Reforge the Chains III: Curse piety Tying Ashenzari's curses to scrolls was always a bit awkward. With the removal of other curses and the rc scroll this mechanic is untenable. Since Ash's introduction Crawl gained another god: Ru, who periodically offers something which grants piety through an alternate mechanism. As part of an overhaul of Ashenzari, this commit changes Ash piety to scale directly with bondage level: it takes two curses for a Human to reach 1*, and they arrive at 6* when all slots are bound. The exact formula scales with slots, so Felids have a much easier time reaching 6*; the formula is: piety = 2 + ( num_cursed * 160 ) / num_slots This applies to current slots, so if a slot is lost due to mutations the player isn't penalized. Coupled with this: Ashenzari no longer applies curses in exchange for items. Instead, players are occasionally invited to curse an item. Accepting a curse re-starts the curse timer; ignoring it simly lets it sit there. -------------------------------------------------------------------------------- bff98f8d11 | Edgar A. Bering IV | 2021-02-26 17:21:54 +0200 Reforge the Chains II: Adjust Ash passives Grant Ashenzari's passives earlier, with skill boost arriving at 1*, see invisible at 2*, and clarity at 3*. Starting at 4*, also grant perma-scrying with a radius of 2, the radius grows with piety stars until reaching radius 4 at 6*. -------------------------------------------------------------------------------- 0aebcb437f | Edgar A. Bering IV | 2021-02-26 17:21:53 +0200 Reforge the Chains I: Remove old Ash actives Remove Scrying and Skill Transfer, the new Ash will only have passive effects. -------------------------------------------------------------------------------- f312af23e9 | Nicholas Feinberg | 2021-02-25 22:23:13 -0800 Tweak spell descriptions (ShaperMC) Increase clarity, decrease poetry. -------------------------------------------------------------------------------- 642ebbb733 | Nicholas Feinberg | 2021-02-25 22:09:54 -0800 Simplify Make prefer_ranged do something other than 'prefer shooting to attacking with reach weapons' if it's not on a monster with the 'archer' flag. At present, it always *is* on monsters with the archer flag, so this commit does nothing, but it seems like nice future proofing. -------------------------------------------------------------------------------- 7ddf969dea | Nicholas Feinberg | 2021-02-25 17:46:40 -0800 New AK splash screen from E.M. Fields The artist (https://mobile.twitter.com/EMFields_Art) has agreed to license the art under CC0. Many thanks to him for the fantastic piece! The original can be seen here: https://lexiconmegatherium.tumblr.com/image/126515730356 -------------------------------------------------------------------------------- 83025b51d3 | Implojin | 2021-02-25 17:12:23 -0800 Fix equipment identification bb19ded didn't properly identify items that were already in the player's inventory. This commit restores equip identify behavior, to fix this and handle any unforeseen cases of items being placed directly into the player's inventory. Closes #1777. -------------------------------------------------------------------------------- 7a85846853 | Nicholas Feinberg | 2021-02-25 09:23:53 -0800 Fix @player_only@ messages (#9201) When printing monster spell messages, we never checked to see if we they were valid. As a result, unseen ghost moths casting Draining Gaze on other monsters would print the literal string "You feel something watching you. @player_only@". This bug was introduced in e143a0ad5d2 (October 2014) and first reported by johlstei a month later. I managed to reproduce it in March 2015 but was unable to figure out the root cause, because the monster speech code is absolutely insane. But this is it! -------------------------------------------------------------------------------- 5110eb77c4 | Nicholas Feinberg | 2021-02-25 08:34:55 -0800 Fix ID notes (dinky) Broken in bb19ded6d30e696c234aeda7060a468f3fc7a340 . -------------------------------------------------------------------------------- 317cea8a3c | Nicholas Feinberg | 2021-02-24 18:28:27 -0800 Fix more cursed item descs (Nomi) See 52645efa069834ac9ca1066c78a845ef7baba59d . -------------------------------------------------------------------------------- ca2cecf3c0 | Nicholas Feinberg | 2021-02-23 21:56:14 -0800 Tweak animated armour scaling (gammafunk) To avoid confusion between the summoned armour's plus and the worn armour it comes from, buff HD with power instead. -------------------------------------------------------------------------------- e3bbeeb173 | Nicholas Feinberg | 2021-02-23 21:55:35 -0800 Tweak permasummon desc Replace an awkward "and" about stairs. It keeps happening. -------------------------------------------------------------------------------- bb19ded6d3 | Implojin | 2021-02-23 21:43:23 -0800 Turn wear-id into floor-id Following much the same reasoning as in f6d4cf81. Especially now that curses are gone (RIP), there's very little incentive not to wear-ID items. (This was mostly true before too, but it's extra obvious now.) Instead, just identify equippable items when you step on them. This does remove certain categories of surprise from randarts (it's *Contam!), but players will live. No comp for this in terms of ?id drops, since that item was better spent on consumables for the period of the game in which ?id is in finite supply. (So no difference.) Closes #1770. -------------------------------------------------------------------------------- 4a2567b755 | Nicholas Feinberg | 2021-02-23 21:36:06 -0800 Fix monster quiver desc (vt) -------------------------------------------------------------------------------- 8dd771eca2 | Nicholas Feinberg | 2021-02-22 17:55:06 -0800 Simplify ghostly spectral weapon code It was only ever being cast at one power. (dungeon.cc doesn't count, since that code will never be hit.) -------------------------------------------------------------------------------- e6bb7ee78e | Nicholas Feinberg | 2021-02-22 17:29:49 -0800 Simplify spectral weapons Simplify the effect. The weapon pops out when you attack, immediately follows up, and then sticks around until the end of your next turn. If you hit again, everything repeats. Otherwise, it vanishes. The design here is of an ego with great damage but that has some positioning constraints, and that still has the potential drawback of damage sharing. (If the positioning constraints turn out to be enough to make it interesting, we can junk the damage sharing.) I've just removed monster spectral ego for now, but it'd be nice to have it back eventually. -------------------------------------------------------------------------------- 72e693e10d | Nicholas Feinberg | 2021-02-22 17:16:23 -0800 Make spines trigger on manifold assault attacks This is 100% impossible to trigger right now, but it's good to future-proof. -------------------------------------------------------------------------------- d57800a693 | advil | 2021-02-22 17:53:20 -0500 Fix another changelog typo Turns out there were two! -------------------------------------------------------------------------------- d488d78fa8 | Neil Moore | 2021-02-22 16:45:18 -0500 Fix a typo in the changelog skip ci -------------------------------------------------------------------------------- 56c411f157 | Nicholas Feinberg | 2021-02-22 12:04:43 -0800 Manual updates (nicolae) -------------------------------------------------------------------------------- 23f261fbd2 | Nicholas Feinberg | 2021-02-21 16:17:38 -0800 Make zigs grant zot immunity (hellmonk, etc) If you can clear an entire zig, you're well past the point in the game where the zot clock (as it currently exists) is relevant. It's fairly hard to imagine a version of the zot clock that co-exists with ziggurats, really. -------------------------------------------------------------------------------- dc27087bfa | Kate | 2021-02-21 23:01:43 +0000 Fix LRD not hitting monsters standing on open doors (#12515) Caused by reversed logic in e2d8f9cc. -------------------------------------------------------------------------------- 4390dbc5be | Kate | 2021-02-21 19:55:56 +0000 Fix some skill training display interactions (#12514) Make evocations show up as a trainable skill by default with the staff of Wucad Mu carried, make necromancy visible with a pain weapon, and fix evocations being visible with spectral weapons and the salamander hide armour. -------------------------------------------------------------------------------- f2f63bf033 | Kate | 2021-02-21 19:54:39 +0000 Prevent unwielding the obsidian axe while mesmerised To make it more of a real commitment (while still keeping the *Drain penalty to prevent swapping it freely between combats). -------------------------------------------------------------------------------- fadf0348f2 | advil | 2021-02-21 11:40:04 -0500 Fix the build for ancient perl versions? This is breaking CAO (and also PF). -------------------------------------------------------------------------------- ea03ee85fd | Nicholas Feinberg | 2021-02-20 20:10:21 -0800 Revert "Add one more draconian skill title (hellmonk)" This reverts commit d82557afd8e216d667967f927f2beb04dc6b3180. Duplicates a WJC title. -------------------------------------------------------------------------------- d82557afd8 | Nicholas Feinberg | 2021-02-20 19:56:03 -0800 Add one more draconian skill title (hellmonk) Other suggestions I haven't added: - Pearl Dragon (TSO) - Shadow Dragon (Stealth) - Bone Dragon (Necromancy) -------------------------------------------------------------------------------- 57bad1e98f | Nicholas Feinberg | 2021-02-20 19:50:47 -0800 Re-rename KILLED_BY_EXPLOSION It's not just any explosion, it's a death explosion specifically. Fireballs need not apply. Closes #1765. -------------------------------------------------------------------------------- 75c20cf7c0 | Hatsuma | 2021-02-20 19:48:52 -0800 Fix inner flame explosion death messages (Committer's note: Turning death explosions into a fineff broke the messaging for inner flame explosions. This commit should hopefully fix them.) -------------------------------------------------------------------------------- a62f12ae83 | Hatsuma | 2021-02-20 19:48:40 -0800 Rename KILLED_BY_SPORE to KILLED_BY_EXPLOSION -------------------------------------------------------------------------------- 03f4e8edb7 | Aliscans | 2021-02-20 12:45:42 +0200 Make the "1 corona" status message grammatically correct, and other bugfixes. 1. Fix the handling of singulars and plurals in _condition_string(). It had been saying "(1 reflect damage)", where it should have been "reflects". 2. Fix a typo in a flag name in monster_info_flag_names. 3. Fix a copy/paste error in mons_conditions_string() which prevented missile-wielders from being reported correctly in the monster list. -------------------------------------------------------------------------------- 982d447839 | Edgar A. Bering IV | 2021-02-20 12:35:52 +0200 Silence a GCC type warning Closes #1758 -------------------------------------------------------------------------------- 49c82dfaf2 | Kate | 2021-02-20 01:09:42 +0000 Fix monster airstrike messaging (shummie) Closes #1762. -------------------------------------------------------------------------------- ba1aca71f1 | Kate | 2021-02-19 22:18:22 +0000 Fix Ozo's Armour allowing cancellation of dispersal traps Closes #1743. -------------------------------------------------------------------------------- 479c5223a7 | Kate | 2021-02-19 22:18:22 +0000 Rename and staticify a function -------------------------------------------------------------------------------- 8719b9d021 | Kate | 2021-02-19 22:16:16 +0000 Remove Airstrike's bonus damage against fliers Against monsters, it was just another type of elemental vulnerability, but against players, it was almost never tactically interesting and heavily penalised forgetting to toggle permanent sources of flight off. Rather than make it behave inconsistently against monsters, remove the bonus entirely - the increased damage against targets in open space is a more interesting bonus to focus the spell on (although the way it works should probably be adjusted/simplified). -------------------------------------------------------------------------------- c01e420030 | Jeffery Stager | 2021-02-19 17:08:23 -0500 fix typo in crawl_manual.rst -------------------------------------------------------------------------------- 622eac400c | advil | 2021-02-19 16:59:43 -0500 Add a scale to one missed describe call missed in 236002575ef -------------------------------------------------------------------------------- fbcf811447 | advil | 2021-02-19 16:44:35 -0500 Remove a debug call -------------------------------------------------------------------------------- 236002575e | advil | 2021-02-19 16:43:54 -0500 Double-size main tiles in (webtiles) describe popups This is for purely aesthetic reasons, but we'll see if others agree. It gives a nice pixelly look on default settings (though some tiles look better than others). If the ultimate judgment on this is positive, it can be ported to local tiles also. -------------------------------------------------------------------------------- 855979065c | Kate | 2021-02-19 18:32:06 +0000 Adjust wall jump interaction with mesmerise (#12205) Make mesmerise restrict wall jumps based on the landing location instead of the targeted wall, so that jumping away from mesmerising enemies is prevented and jumping towards them is allowed, not the other way around. -------------------------------------------------------------------------------- 3208abaabc | Edgar A. Bering IV | 2021-02-17 22:37:41 +0200 Buff Boris on the orb run Boris has been spawning on the orb run for about a year now and hasn't bagged a player. That simply will not do, so in this commit we give our boy a hand. If Boris sees the player with the orb he gains permanent haste and permanent brilliance aura effect. The former will help him chase players and sling spells at them; the latter will give him Ancient Lich spellcasting HD for greater lethality. -------------------------------------------------------------------------------- 6612197ff9 | Edgar A. Bering IV | 2021-02-17 18:20:57 +0200 Further tweak Lich spell sets By popular demand for more cold threats after the spell overhaul, as well as for liches with OOD and Petrify, this commit splits the Lich/Ancient Lich spell sets. Liches get Bolt of Cold, OOD, Slow, Haste, and Invis. Ancient Liches keep their new spell set but trade Slow for Petrify. -------------------------------------------------------------------------------- 9b90508cd1 | gammafunk | 2021-02-17 09:17:02 -0600 Clean up trove syntax Reorganize statements for consistency with the rest of DES, group ITEM statements, and reindent the veto clause. Closes #1755. -------------------------------------------------------------------------------- 79effa3b09 | Goratrix | 2021-02-17 09:17:02 -0600 Rework evocations-themed trove Since some of the misc evocables have been removed and the remaining six were changed to xp-rechargable, this trove has been often disappointing, placing on average 10 of misc evocables out of the total 14 items, with multiple useless copies of each. This changes the trove to guarantee exactly one of each of the 6 misc evocables, plus 8 wands/staves, weighted as average 6 wands and 2 staves. -------------------------------------------------------------------------------- d70e203ec9 | advil | 2021-02-17 09:00:36 -0500 Fix an ability description typo -------------------------------------------------------------------------------- 150de4c316 | Nikolai Lavsky | 2021-02-16 20:07:03 -0800 Don't assault firewood Also, fix an overlap between ``wont_attack()`` and ``neutral()`` in a condition. The former means ``ATT_FRIENDLY || ATT_GOOD_NEUTRAL || ATT_STRICT_NEUTRAL``, the latter means ``ATT_NEUTRAL || ATT_GOOD_NEUTRAL || ATT_STRICT_NEUTRAL``. -------------------------------------------------------------------------------- 34d631faf5 | advil | 2021-02-16 16:44:23 -0500 Memoize some terrain functions This fixes up a bunch of existing small hotspots by using the built in memoize code; somewhat redundant with the previous commit, which dealt with a stair direction call in a different way already. Really, the consequential change here is the feat_is_altar change, but I've also memoized a few key things that were downstream from this just because it's easy to do. The suppress blood check is heavily called on a webtiles build, so seems to merit converting to a more standard terrain function and memoizing as well (though really it was a hotspot because of the altar check). -------------------------------------------------------------------------------- 3e7e21a061 | advil | 2021-02-16 16:44:23 -0500 Limit stair exclusions to stairs Altars and shops also have stair directions, but stair exclusion semantics doesn't make any sense for them (and regular exclusions should still work if you want that). Also, because this is called a lot in rendering, checking the stair direction of altars was a weird little hotspot because it has to iterate through possible altar features (2% of weight during an early game qw run with a profiler attached, which is comparable to all of console rendering). Is there a use case for stair exclusion semantics acting on transporters? I'm not sure if that even worked but this probably prevents it if it did. If people complain I'll add them back. -------------------------------------------------------------------------------- 184f3a1eb7 | Aliscans | 2021-02-16 21:19:27 +0200 Move some text for some artefacts to art-data.txt. Create DESCRIP and DBRAND fields in art-data.txt. These fields are used in the description of an artefact. DBRAND extends the brand description and should be used for special brands. DESCRIP is used for sundry properties. The staff of Olgreb, Storm Bow, Maxwell's Thermic Engine, salamander hide armour, macabre finger necklace, and the glaive of the Guard are all adjusted to use these new data fields. I've put this in the description below the "excrutiating wounds" description, but this doesn't matter as the spell cannot be used on artefacts. I haven't moved the Warlock's Mirror description, as this field only works if the text to insert is fixed. Add + as a "start of line" character to show that the contents of a line in art-data.txt continues the preceding (string) field. Where, with whitespace, a space is added between the old line and the new one, with +, a newline is added. Add a description of the fields to the top of art-data.txt. [ Committer's note: Squashed and rebased, revised the commit message, tweaked some documentation and moved formatting newlines to describe.cc only (no extra newlines from art-data.pl). Closes #1717 ] -------------------------------------------------------------------------------- accac60908 | Aliscans | 2021-02-16 20:00:27 +0200 Make travel_pathfind::points a local variable. points is only used as the iterator for one loop in travel_pathfind::pathfind(), so it doesn't need a wider scope. -------------------------------------------------------------------------------- b98e92b636 | Aliscans | 2021-02-16 20:00:27 +0200 Delete some unnecessary functions from travel_pathfind. Delete set_annotate_map() and set_distance_grid(), which were never used. Replace travel_move() with travel_move in travel_pathfind. It was only called by pathfind(), which could access both. Move _find_explore_status() into travel_pathfind (now called explore_statu()). As its purpose is to interrogate a travel_pathfind, it seems like a good fit. Replace greedy_square(), unexplored_square() and get_unreachables() with the underlying variables. _find_explore_status() was the only function which read them, and it can now read the variables directly. -------------------------------------------------------------------------------- 5b2ef45498 | Aliscans | 2021-02-16 19:56:53 +0200 Delete the redundant rmode variable from _find_travel_pos(). -------------------------------------------------------------------------------- 76aa1ed959 | Aliscans | 2021-02-16 19:56:53 +0200 Remove a pointless travel_pathfind::pathfind() call. pathfind() always returns (0,0) without a target, so fill_travel_point_distance() no longer checks this. pathfind() clears travel_point_distance as it starts, so fill_travel_point_distance() no longer calls it twice if features hasn't been provided. It changes the order of *features, so I still call it twice if it is set. -------------------------------------------------------------------------------- a84d769ad4 | Aliscans | 2021-02-16 19:56:53 +0200 Split find_travel_pos(). _find_travel_pos() handles the case where move_x and move_y are set. fill_travel_point_distance() handles the cases without them. This change just removes the code which isn't run in each case, and puts _find_travel_pos() above the function which calls it. -------------------------------------------------------------------------------- dae97dfda2 | shummie | 2021-02-16 09:04:31 -0800 Replace running with rampaging in wizlabs Two vaults - Cloud Mages' Chambers and Roulette of Golubria have boots of running as possible rewards. With the removal of boots of running, these were missed. Replace these with boots of rampaging since they still fit the intended theme/reward of the wizlab. -------------------------------------------------------------------------------- 5931744824 | wheals | 2021-02-16 18:36:59 +0200 Fix polearm titles (#12507) -------------------------------------------------------------------------------- 82400c8b53 | advil | 2021-02-16 10:14:12 -0500 Convert traversability memoization to an array a42c0fa56e7 did get noticeable speedups in world_reacts bad cases, but it turns out that lookup time for unordered_map on this scale is still surprisingly bad because (it seems) of weird stdlib implementation constraints that lead to high layers of abstraction surrounding the constant lookup. So, just use an array, like most other member functions for this class. -------------------------------------------------------------------------------- b5b73b6894 | gammafunk | 2021-02-16 05:41:28 -0600 Some fixes for three Swamp vaults cheibrodos_swamp_witchery: Remove the unnecessary downweight, as it's a simple vault that places a single, normal-depth monster. Add some glass to make this not an autoexplore trap, since fenstriders do have paralyse. Make the special loot more appropriate to what the monster is thematically. Also clean up vault syntax. cheibrodos_swamp_pet_leeches: Make the corpse closet have a door; there's no reason for this to be accessible only with dig. Also remove the no_tele_into portions, as it's not necessary. For all three of these vaults, remove unnecessary range restrictions for Swamp:4, as they work just fine on that level. Also remove no_item_gen, as there's no problem with items generating in these. Vault makers tend to use this when they place their own loot, thinking they don't want the layout to place more loot on the level. But this tag doesn't affect the amount of loot generated as level items, just what places are eligible. Likely we'll need to make another pass through swamp.des to fix up other issues related to the Swamp changes. -------------------------------------------------------------------------------- 54d06ca096 | AdamPG | 2021-02-16 09:41:00 +0200 Tweak some Swamp witch vaults to better fit their creators' intentions grunt_witch_cave gets a real witch now that they exist. cheibrodos_swamp_witchery seemingly wanted to place exactly one witch in one of the huts randomly, but actually placed zero to two witches. Replacing SUBST with NSUBST leads to the intended behaviour. -------------------------------------------------------------------------------- 8badd94918 | Edgar A. Bering IV | 2021-02-16 08:54:07 +0200 Update the changelog through 0.27-a0-365 -------------------------------------------------------------------------------- ed15d12607 | Edgar A. Bering IV | 2021-02-16 08:53:32 +0200 Update the changelog for 0.26.1 (cherry picked from commit d7a4d63c155831395aa76a5b27c080510dfb948e) -------------------------------------------------------------------------------- 31b3477d74 | advil | 2021-02-15 22:54:29 -0500 Calm down pathing for lost batty band leaders (12505) When a band leader is inaccessible and far away, what's supposed to happen is that the range check in _band_ok keeps a new path calculation attempt from happening while band members move between random wander targets. However, if the band consists of batty monsters, this logic was being overridden; apparently batty monsters get a new wander target each turn no matter what (??). This was leading to a pretty massive cpu spike when scarab beetles lost their band leader in tomb, as seen in the save in 12505. This commit causes batty band members to use the _band_ok logic rather than blanket recalculating every call. I'm not sure if there will be any weird side effects to this, e.g. they might move around less when wandering. Possibly affects only scarab beetles. -------------------------------------------------------------------------------- a42c0fa56e | advil | 2021-02-15 22:54:29 -0500 Memoize traversability checks in pathfinding In extreme cases, pathfinding with a large range on an open level calls this ~7-8 times per square, so it can be a noticeable speedup to not recalculate traversability constantly. -------------------------------------------------------------------------------- 8331d791d5 | Nikolai Lavsky | 2021-02-15 22:20:20 +0200 Update the des syntax doc This commit updates examples and removes mentions of obsolete/deprecated item types, glyphs, and modifiers. -------------------------------------------------------------------------------- 8f6b0cd894 | advil | 2021-02-15 15:10:51 -0500 Restructure some wizmode help commands I can never find what I'm looking for in this menu, and this commit is an attempt to have slightly easier ordering and sections for level/builder/feature-related commands. -------------------------------------------------------------------------------- aa8612f87b | advil | 2021-02-15 14:25:01 -0500 Improve some divine exegesis menu issues * e12f10fa2d7f24c87a used ' ' as the hotkey for uncastable spells in divine exegesis as a display hack, following code for unmemorizable spells from before that commit. Previously this was the only (maybe even standard?) way to mix hotkeyed and non-hotkeyed MenuEntrys in a menu with reasonable formatting. However, space is a valid hotkey that the menu code will handle as such, and for unrelated reasons dd83002478 changed how this hotkey renders, leading to weird effects for DE in particular. (I'm not actually sure under what conditions the memorise case here gets triggered..) This commit adds a fairly brute-force way of fixing the formatting for actually non-hotkeyed entries. Possibly should be the default on everything, but the way hotkeys are rendered generally needs a bigger refactor. * Fix header spacing in the (Cast) version of the menu. * Show some DE-specific text + current MP in the footer; the fact that the player needed MP for the spell seems to have been tripping people up in combination with the "Space" bug, so showing it explicitly will make clear why some spells are disabled. There's still an issue with this menu when the player has >52 spells memorized. -------------------------------------------------------------------------------- b719701251 | Nicholas Feinberg | 2021-02-15 11:04:24 -0800 Fix tests? -------------------------------------------------------------------------------- 46a10ce11a | Nicholas Feinberg | 2021-02-15 10:51:21 -0800 Let dancing launchers shoot -------------------------------------------------------------------------------- 7e98f454ed | Nicholas Feinberg | 2021-02-15 10:47:17 -0800 Give dancing launchers ammo -------------------------------------------------------------------------------- bf771cdeb5 | Nicholas Feinberg | 2021-02-15 10:23:27 -0800 Make dancing launchers not crash the game -------------------------------------------------------------------------------- 57b6be6a68 | Nicholas Feinberg | 2021-02-15 10:00:12 -0800 New spell: Manifold Assault (L5 Translocations) Manifold Assault launches melee attacks with against 2-4 random enemies in LOS, depending on spellpower. It's themed as warping space so that one attack can, paradoxically, hit many enemies. This spell is intended to give melee-focused characters more reason to consider investing in spellcasting, It's fun to try to skill toward a 'hybrid' build, and a spell that mostly scales off your melee attack, rather than your spellpower, helps encourage that. This being a L5 spell helps avoid it being a truly free 'gimme', and allows it to hit many enemies at once. The lack of targeter should hopefully avoid it being annoying to use, by making it just a single press to cast. It also gives the player more reason to keep normally hitting things in melee sometimes, when it's important to kill a specific target. Cleaving doesn't work with this spell since it seems overly confusing, and since reach and riposte don't work with it either. (Thus, it's 'fair'.) All stabs are also currently banned, though I do wonder if we might want to allow non-sleep stabs. -------------------------------------------------------------------------------- d46515b8de | Nicholas Feinberg | 2021-02-15 09:45:49 -0800 Display monster to-hit percentages in xv Accounting for both EV and SH. These calculations are a bit clunky, but they line up with the underlying rolls and with fsim. -------------------------------------------------------------------------------- b2377c9954 | advil | 2021-02-15 11:58:35 -0500 Partial refactor of throw_item_no_quiver (12488) The end goal is to have this better integrated with quiver code, but this commit only moves a bit towards this. The main target of this commit, convulated though it may seem, is to prevent `F` from updating the global quiver history and avoid the issue in mantis 12488 altogether. This commit does it by using a custom action_cycler for throwing via `F`, which indirectly keeps the history from being updated and minorly improves the interface for `F` targeting (and then most of the commit is restructuring so that this can be done more easily). -------------------------------------------------------------------------------- 3253a67a23 | advil | 2021-02-15 11:58:35 -0500 Rein in some autoswitch logic In particular, don't apply autoswitch logic to ammo gain/loss unless it is an entire stack of ammo. This partially addresses 12488: what is happening there is that because firing changes stack size, the autoswitch code was getting called on any firing event. It's not a complete fix because `F` should still never affect the fire history for autoswitch purposes. -------------------------------------------------------------------------------- 775e467c85 | advil | 2021-02-15 11:58:35 -0500 Update qw copy Possibly this should be removed from the repo, or turned into a submodule, but until that happens, here's a more up-to-date version. -------------------------------------------------------------------------------- db36ff0be9 | Implojin | 2021-02-15 17:15:11 +0200 Add another species title Ashenzari warns you: it is. -------------------------------------------------------------------------------- 77ac2e9d3a | Aliscans | 2021-02-15 09:30:46 +0200 Distinguish between "1 poisoned" and "all poisoned" in the monster list. Previously, if there were 6 sheep, the monster list would show: (poisoned) if 1 had been poisoned; (2 poisoned) if 2 had; and (poisoned) if all had. This changes the first case to (1 poisoned). It displays (poisoned), as now, if only one sheep is left. This makes it easier to see when (in this case) a sheep needs more poison. -------------------------------------------------------------------------------- d820fc0954 | Aliscans | 2021-02-15 09:28:01 +0200 Keep "[Y]es or [N]o only, please" messages out of the log. Move the "[Y]es or [N]o only, please" message from MSGCH_PLAIN to MSGCH_PROMPT in yesno() and yesnoquit(). This has two effects. 1. The message no longer appears in the previous message list. The original yes/no question does not appear here, so this message previously appeared in the log with no context. 2. The message is blue rather than white by default. This could be changed, but it would take more work. -------------------------------------------------------------------------------- 1cc477e9f5 | AdamPG | 2021-02-15 09:25:21 +0200 Make amulets of reflection actually grant monsters SH Currently the SH returned is negative when a monster has an amulet of reflection equipped without a shield. -------------------------------------------------------------------------------- a689d4a613 | Nicholas Feinberg | 2021-02-14 19:41:43 -0800 Restore old Fedhas piety message Purely for flavor, let's appreciate some contributions to the ecosystem. -------------------------------------------------------------------------------- 7370b58738 | advil | 2021-02-14 14:45:45 -0500 Remove an obsolete autopickup exception (12497) Books are now marked as useless if they wouldn't add any spells, so there doesn't need to be a custom autopickup rule for them. In addition, since b8f8a8f698407 and bd089401bb, this rule broke autopickup for ash, because books are all fully ID'd. -------------------------------------------------------------------------------- ae24eb62ac | Kate | 2021-02-14 09:54:31 +0000 Fix some typos Closes #1719 -------------------------------------------------------------------------------- fcad680f63 | Nicholas Feinberg | 2021-02-13 16:24:56 -0800 Partially compensate VS regen Remove their second level of MUT_REGEN, now that each level gives 1 HP/dAut instead of 0.4. This still makes them strictly stronger than before - could perhaps shift the first MUT_REGEN a bit later? Another interesting idea would be to give them another -1 hp, +10% mp, and super regen (hellmonk), but don't feel strongly. -------------------------------------------------------------------------------- 5810d18f4b | Nicholas Feinberg | 2021-02-13 16:20:29 -0800 Make trolls more thin-skinned In compensation for their extra 0.6 hp/turn, turn their tough skin mut down from level 3 to level 1. -------------------------------------------------------------------------------- 40fdf68bc5 | advil | 2021-02-13 17:08:25 -0500 Continue fixing CI -------------------------------------------------------------------------------- 029c345baf | advil | 2021-02-13 16:48:00 -0500 Actually update requirements files for the CI error -------------------------------------------------------------------------------- df26f997a6 | advil | 2021-02-13 16:38:16 -0500 Fix more build issues * one more upgrade issue for the running brand * disable a flake8 package that seems to have stopped working in py27 -------------------------------------------------------------------------------- 9cfa79e74d | advil | 2021-02-13 16:23:24 -0500 Fix an upgrade build issue for running removal -------------------------------------------------------------------------------- c8f691b2cc | Nicholas Feinberg | 2021-02-13 11:15:15 -0800 Buff regen properties (Lici) Items that grant regeneration gave 0.4 HP/turn (0.04/aut), which was not enough to make them a significant tactical factor. Since the vast majority of the game doesn't have enough strategic time pressure to make regen speed outside combat very meaningful, this meant that the regen property was misleadingly weak. Increasing the regen rate by 2.5x to 1 HP/turn (0.1/aut) should give it some chance of being a relevant factor for equipment decisions in a 3-rune game. I don't believe this significantly buffs players overall, since most sources of regeneration still aren't that strong. -------------------------------------------------------------------------------- e8094add7c | Nicholas Feinberg | 2021-02-13 10:52:21 -0800 Remove boots of running Boots of running were extremely strong items, which isn't at all a problem. It's great for the game to have rare and powerful items - it creates exciting variance. However, runboots didn't create fun and exciting gameplay. They drained tension from the game by allowing the wearer to (over ~1-10 turns!) walk away from any normal speed enemy, which is powerful, but not that fun. So, farewell. Lightning scales remain as the last holdout, though maybe they should be restricted for naga only. Maybe we can finally have that scroll of brand armour now...? (: -------------------------------------------------------------------------------- dc303548b9 | Nicholas Feinberg | 2021-02-13 10:52:13 -0800 Rewrite lightning scales' description Be slightly coyer about which species can use them (for aesthetics), and clarify that they improve movement speed, not action speed. -------------------------------------------------------------------------------- 52645efa06 | Nicholas Feinberg | 2021-02-12 14:55:01 -0800 Fix cursed item descriptions (12492) Broken sometime around 8bf7259e65b6b6a6ca . Oops! -------------------------------------------------------------------------------- fa571bf19a | advil | 2021-02-11 15:27:05 -0500 Fix header build -------------------------------------------------------------------------------- d6963574d8 | advil | 2021-02-11 13:16:17 -0500 Explicitly show ally foes This shows ally targeting info: (i) on the ally, (ii) on the target monsters, and (iii) as a mi flag on the short description (without specifics). For simple cases this won't show anything surprising at all to experienced players, but I think it still is useful info to new players. For complex cases, it may be useful to see e.g. that an ally is pathing through a monster that's not what you'd hope it to be targeting. I suspect this hasn't been done before because of information overload issues. And monster descriptions definitely have been accruing information overload for the last few versions! However, I think I have converted to team info, and I do think this specific bit of info is useful for many cases. It also may have not been done before because there are cases where what is shown is weird and confusing. However, this reflects weird and confusing ally *behaviour*, which is still frustrating to players when it is detected. This commit may make it easier to detect, which is perhaps the path towards less confusing ally behavior. I won't be surprised if it turns up some bugs too... It doesn't seem impossible to me that this could turn out to be a bad idea to show after all, but we'll see. -------------------------------------------------------------------------------- 70b395f35d | Nicholas Feinberg | 2021-02-11 09:25:27 -0800 Spelling -------------------------------------------------------------------------------- 75073f8639 | Nicholas Feinberg | 2021-02-11 09:23:55 -0800 Two more titles (hellmonk, ebering) -------------------------------------------------------------------------------- ccc5534d49 | Nicholas Feinberg | 2021-02-11 09:14:21 -0800 Add more per-species titles Seems fun! All of these are intended to be not too annoying to get for folks who like to collect titles, but they're not in general designed as something to steer folks towards a race's strengths - just fun little acknowledgements of something the player's done. I desperately wanted the formicid title to be 'transdimensional tunneler', but it was far too long... -------------------------------------------------------------------------------- 7f782ed93a | Implojin | 2021-02-10 23:31:44 +0200 Update copyright date in LICENSE -------------------------------------------------------------------------------- 433c55acf3 | Nicholas Feinberg | 2021-02-10 12:51:43 -0800 Remove a semicolon -------------------------------------------------------------------------------- 81277dbfc4 | hellmonk | 2021-02-10 12:51:43 -0800 Change demigod stats and exp apt. Lean into the stat gimmick by reducing starting stats by 2 each and doubling stat growth. -------------------------------------------------------------------------------- da14cb0413 | advil | 2021-02-10 15:45:47 -0500 Fix some uselessness grammar (gammafunk) The main point of this commmit is to fix the wording, shown in spell descriptions, "This spell would have no effect right now because you don't have enough magic to cast that spell." It does this by formatting more general casting useless reasons separately from spell-specific uselessness reasons (they are shown in red without any extra text). Along the way: * change "that" to "this" in the low MP uselessness reason -- "this" is used elsewhere and is less awkward in most cases. (Even if it no longer matters here.) * refactor Ru spell bans to all be handled as casting uselessness reasons, not spell-specific uselessness reasons; before they were in multiple places. Hopefully the weird previous ordering didn't cause any side effects that this eliminates. -------------------------------------------------------------------------------- 75ad407e7c | wheals | 2021-02-10 17:40:21 +0200 Remove some extraneous uses of auto_id_inventory Unused since 20b3437a0c1 -------------------------------------------------------------------------------- bd089401bb | advil | 2021-02-10 10:21:36 -0500 Further fix ash id (wheals) cf. b8f8a8f69840 -------------------------------------------------------------------------------- b8f8a8f698 | advil | 2021-02-10 10:01:43 -0500 Quick ash id fix Accommodate the presupposition in fa4e0b4b0e52 that ash identifies all items; otherwise, ash players are a bit out of luck right now. Not well tested for id special cases... Resolves #1735 -------------------------------------------------------------------------------- 42d3f6298c | Edgar A. Bering IV | 2021-02-10 15:58:41 +0200 Weight random effects So that the "bad for the player" effects happen only 15% of the time. -------------------------------------------------------------------------------- 81d27af2d4 | advil | 2021-02-09 22:22:27 -0500 Pre-identify acquirement manuals (12485) This comes up for troves, e.g. trove_library as in the linked save. Regular manual generation has done pre-identification since 2c9a30dacb1b69, but I suspect there was also somewhere a step where an acquired manual was id'd once it was actually picked up. Now that manuals never get picked up, unless the manual is id'd in advance there is an extremely useless message. I've also added (redundant?) id'ing in the new pickup code. This shouldn't be necessary except for games with troves that generated before this fix. -------------------------------------------------------------------------------- b975c0971c | Nicholas Feinberg | 2021-02-09 16:36:09 -0800 Remove a mystifying comment from the last millenium -------------------------------------------------------------------------------- a3e463392d | Nicholas Feinberg | 2021-02-09 16:36:09 -0800 Remove the extra bad weapon randarts Just because. -------------------------------------------------------------------------------- 9fd62742f6 | Nicholas Feinberg | 2021-02-09 16:36:09 -0800 Make jewellery generation more sane -------------------------------------------------------------------------------- 8372c9b158 | Nicholas Feinberg | 2021-02-09 16:36:09 -0800 Reduce jewellery generation a bit To compensate for the removal of 3 rings, 1 amulet, and negative enchantment jewellery. No adjustment to overall item generation, since we overshot a little bit with the compensation for ?rc removal. -------------------------------------------------------------------------------- 6b4f085fcf | Nicholas Feinberg | 2021-02-09 16:36:09 -0800 Teleport rings of teleportation away Tragically, in their current form, they have little to offer in a curseless world. Farewell! -------------------------------------------------------------------------------- 303758149e | Nicholas Feinberg | 2021-02-09 16:36:09 -0800 Re-add useless jewellery -------------------------------------------------------------------------------- d58e3d690f | Nicholas Feinberg | 2021-02-09 16:36:09 -0800 Remove more bad things -------------------------------------------------------------------------------- 68f27ed3b0 | Nicholas Feinberg | 2021-02-09 16:36:09 -0800 Remove very bad weapons (ebering) These were uncommon enough that I don't we need to comp generation further. -------------------------------------------------------------------------------- 0bbf9b5c7d | Nicholas Feinberg | 2021-02-09 16:36:09 -0800 Remove an inaccurate hint -------------------------------------------------------------------------------- bc12fde1e9 | Nicholas Feinberg | 2021-02-09 16:35:56 -0800 Recolour weapon/armour egos As before, un-id'd glowing weapons/armour are blue. Ego weapons/armour: green. Enchanted but non-ego weapons/armour: green. (Previously used for known-uncursed items.) Un-id'd magical staves: blue. ID'd magical staves: green. I suspect we'll want to tweak some of this, but it's a start. -------------------------------------------------------------------------------- d83380fbf1 | Nicholas Feinberg | 2021-02-09 16:35:42 -0800 Update docs for curse removal -------------------------------------------------------------------------------- 3ce31fd4f6 | Nicholas Feinberg | 2021-02-09 16:35:42 -0800 Reduce non-vault item gen by 5% To compensate for ?rc removal and keep overall item count roughly the same as it was before. -------------------------------------------------------------------------------- 880a64342f | Nicholas Feinberg | 2021-02-09 16:35:28 -0800 Remove remove curse Useless now that random curses no longer exist. -------------------------------------------------------------------------------- f16e07f070 | Nicholas Feinberg | 2021-02-09 16:35:28 -0800 Fix a hint -------------------------------------------------------------------------------- c026bc2f57 | Nicholas Feinberg | 2021-02-09 16:35:21 -0800 Uncurse all items Except for those in the inventory of Ash-worshippers. -------------------------------------------------------------------------------- 583d5e20f2 | Nicholas Feinberg | 2021-02-09 16:35:18 -0800 Don't generate items cursed The future approacheth. -------------------------------------------------------------------------------- 8bf7259e65 | Nicholas Feinberg | 2021-02-09 16:35:18 -0800 Make curse status always known Since Ash will soon be the only source of curses. Don't ever describe items as 'uncursed', since that's trivially true if you're not with Ash. -------------------------------------------------------------------------------- 8bc936e012 | Nicholas Feinberg | 2021-02-09 16:35:18 -0800 Don't glow up cursed items Irrelevant soon. -------------------------------------------------------------------------------- e2017fbedb | Nicholas Feinberg | 2021-02-09 16:35:18 -0800 Remove cursed vault items Begone, gammacurses! -------------------------------------------------------------------------------- c22e62d8df | Nicholas Feinberg | 2021-02-09 16:35:18 -0800 Remove negative-plus jewellery Made no sense with curse removal. This increases the number of real (non-negative) jewellery items by very roughly 5%. (6/26 jewellery types could be generated with a negative plus, and those had a 20% chance of being negative.) No comp is provided. -------------------------------------------------------------------------------- e57382988b | Nicholas Feinberg | 2021-02-09 16:35:18 -0800 Uncurse everything when leaving Ash Again, a placeholder. -------------------------------------------------------------------------------- fa4e0b4b0e | Nicholas Feinberg | 2021-02-09 16:34:57 -0800 Make Ash use ?id instead of ?rc Placeholder for a broader rework. It's sort of elegant, IMO - since ID is pretty useless with Ash otherwise (since the god already IDs everything), it's a reasonable resource. -------------------------------------------------------------------------------- 01f12845e7 | Nicholas Feinberg | 2021-02-09 16:34:54 -0800 Remove amulets of inaccuracy Part 1 of the Curse Removal Saga. -------------------------------------------------------------------------------- a3f61025e6 | Nicholas Feinberg | 2021-02-09 16:31:54 -0800 Fix tloc miscast description -------------------------------------------------------------------------------- e1136d6ca4 | advil | 2021-02-09 16:57:43 -0500 Fix some bitwise operators (geekosaur) -------------------------------------------------------------------------------- ead3b1d052 | advil | 2021-02-09 16:08:45 -0500 Double default dump_message_count In more spectacular endings, 20 is often not nearly enough to see what happened. Let's try a bigger default. -------------------------------------------------------------------------------- ff613de66b | sdynet | 2021-02-09 22:02:58 +0200 Hexify of wand of random effects The immediate effect of damaging the enemy is provided by the other wands. The old effect list was at one point the union of wand effects, but that is long gone and far from true, which makes it a bit of a spoiler trap. The new effect list is entirely buffs and debuffs, and listed in the wand description. If the power level isn't right the effects can be weighted and tuned. [ Committer's note: Closes #1310. Revised the effect list, re-worded the commit message. ] -------------------------------------------------------------------------------- 97e392b7e8 | Nikolai Lavsky | 2021-02-09 20:37:17 +0200 Remove some water from mumra_spider_spiderweb The vault has several spiders trapped behind deep water, as they can no longer cling to walls. This commit frees the spiders and reduces the number of water and deep water tiles in the vault. Also, it removes an escape hatch in the inner area, since the vault is not a teleport closet anymore. -------------------------------------------------------------------------------- d9602db6ee | advil | 2021-02-08 15:38:40 -0500 Skip some unique fineff messaging on turn 0 (12346) This is for the case where a delver lands in los of a pikel/kirke, where it doesn't make sense to do the messaging related to freeing the follower band. I haven't tested this case very directly because the seed in mantis 12346 doesn't place pikel any more (and I haven't tried to go back to a version where it does), so it's possible there's more tweaking needed. In principle, the bands should get zapped too (like dowan and duvessa) but I don't *think* this is happening right now. -------------------------------------------------------------------------------- b28db10d6f | advil | 2021-02-08 15:38:40 -0500 Skip elven twin stuff on dismissal/reset On a delver start, if the los zap wipes out one elven twin, the other is supposed to go too. But, the code in elven_twin_died still ran on the first to go and caused the second one to be woken and berserked etc; depending on the timing this could lead to messaging as in mantis 12480. I'm pretty sure that there's no natural way for these kill types to apply, so this should affect only the delver start case. -------------------------------------------------------------------------------- 715ed11b31 | advil | 2021-02-08 15:38:40 -0500 Don't allow delver-zapped uniques to regenerate Doing this will lead to potential seed differences between delver starts and regular starts on the same seed number. (An alternative option would be to force los uniques somewhere else in the level, after the level has fully generated.) -------------------------------------------------------------------------------- daa8bd6ff3 | Edgar A. Bering IV | 2021-02-08 22:08:00 +0200 Quiet down storm clouds Storm clouds are loud (lightning bolt loud!) because Grunt made them that way in February 2014 and there wasn't much other commentary about it at the time. They're the only cloud that makes noise, and appear in five places: - Around Bai in second form in her cloud ring - Random panlord cloud rings - Robe of Clouds clouds - Condenser vane clouds - Qazlal clouds For monsters, r-i indicated that the loudness of Bai was mildly desired but not a primary part of the design; with randlords the cloud rings are very much a "don't melee me" effect and not for noise. For the two evoked player sources of clouds, the condenser vane has skill training and xp gating to balance it. The Robe of Clouds probably needs another re-work, it does rely on storm cloud noise for balance somewhat. Finally, Qazlal stormclouds have made Q much louder than designed, even very early on, making the noise conduct much harsher than it should be. Q's rumble is min ( piety / 10, 16 ) noise, lightning bolt is 25. 1* Q followers weren't supposed to be so loud. Making all clouds quiet will make it easier to attach appropriate noise (or other cost or drawback) to their source according to mechanical niche, instead of this one cloud type being SO LOUD. -------------------------------------------------------------------------------- d4424db430 | advil | 2021-02-07 19:29:05 -0500 Mark willpower/magical power rings as stackable (12484) 12484 reports this as a recent change, but as far as I can tell MR/willpower has never been marked as stackable in any way; I also noticed that magical power is not marked this way. Any other rings missing here? -------------------------------------------------------------------------------- 37e0bc138e | advil | 2021-02-07 17:31:18 -0500 Fix a bitwise operator used for fire order (12481) This is supposed to keep classes from being added to the vector multiple times, but with & it obviously wouldn't do this correctly, leading to somewhat unpredictable results for custom fire orders. (This whole use of bitmasks for the fire order is one of the last vestiges of oldquivers and could use a complete refactor.) -------------------------------------------------------------------------------- f42357c144 | Kate | 2021-02-07 21:31:54 +0000 Update skill training docs -------------------------------------------------------------------------------- 240d7df7c7 | gammafunk | 2021-02-07 11:09:23 -0600 Some vault adjustments for kobold brigands For vaults that give kobold brigands custom equipment, also give them darts in line with their new "underhanded tactics" theme, unless doing so was counter to the vault's theme somehow. All changes below give brigands darts with a 2/3 chance for poison and 1/3 chance for curare: due_exit_kobolds: An Abyss exit vault. Characters exiting the abyss can handle a dart or two. blue_anna_alchemist: An alchemist would be good at crafting poison! Also pre-identify the guaranteed degeneration and ambrosia potions. cheibrodos_thug_alley: There's only 1-2 brigand "bosses" at the end of this vault, so it won't be anything too nasty. Also clean up NSUBST statements. minmay_goblin_kobold_castle: Perhaps the most significant change, since this vault is pretty iconic. Remove the brigand's custom equipment definition, thus allowing it to have darts, but also mix in gnolls to down-weight brigand placement. This vault describes itself as a castle of kobolds and goblins, but it's actually a castle of kobolds *or* goblins, since you either get a kobold set or a goblin set. The goblin set has (non-throwing) gnolls mixed in, but the kobold set did not. The switch from big kobolds to kobold brigands adds dart throwing jerks, so we upweight ordinary kobolds and add non-throwing gnolls to thin out dart throwers a bit. We now get 2 brigands on-average per map placement for the kobold set, which is reasonable for large, challenging vault on D:3-6. Closes #1709. -------------------------------------------------------------------------------- 7af2214585 | gammafunk | 2021-02-07 08:51:12 -0600 Kobold fixes for a ghost vault Adapt the vault gammafunk_ghost_nasty_kobolds for the change of big kobolds to kobold brigands. Give all brigands darts, simplify weapon setup, remove a definition no longer necessary, since brigands always have darts, and reglyph. Composition-wise, don't mix in special dart-throwing kobolds after we've switch from ordinary kobolds to brigands (post D:5). This vault presents a lot of darts offensively and as loot post D:5, but not to any point that's a concern. -------------------------------------------------------------------------------- 50fcd4f5b3 | Nicholas Feinberg | 2021-02-07 06:20:59 -0600 Turn big kobolds into kobold brigands Big kobolds didn't really have a defined role or any particular threat, and non-big kobolds spawning with curare created some pretty unecessarily vicious difficulty spikes. Remove curare darts from normal kobolds and move them onto big kobolds, which are renamed to 'kobold brigands'. Some vaults are tweaked somewhat; no other changes. This increases the average amount of curare generated in D from about 4 to about 5.5 per game. -------------------------------------------------------------------------------- d22cd1d61d | Edgar A. Bering IV | 2021-02-07 09:48:56 +0200 Apply Gell's gravitas in near-to-far order To the extent that crawl has a coherent physics, players expect gravity to pull everything towards the attraction point, without sorting a further away monster can get pulled first, followed by a closer monster, which is optically a bit weird. The unsorted pull did have an order: internal monster array order, which made the spell hard to reason about and also possibly introduced some weird biases or information leaks. -------------------------------------------------------------------------------- e33754e197 | Hatsuma | 2021-02-07 09:48:03 +0200 Sort potion of attraction pulls [ Committer's note: Closes #1724. Squashed, rebased, tweaked commit message and comments. ] -------------------------------------------------------------------------------- dfb9265905 | advil | 2021-02-06 22:20:13 -0500 Use `catpath` instead of string + for some path combination This should fix 12489, where the use of string concatenation was leading to part of the path without an unterminated directory turning into part of the filename. -------------------------------------------------------------------------------- 7d165411bc | Nicholas Feinberg | 2021-02-06 16:00:09 -0800 Remove a secret accuracy malus (sentei) Added in 7d9c2931b71, 14 years ago (DCSS 0.3). Was not properly displayed in targeters and, also, had no real reason to exist. Clouds do plenty without a secret accuracy penalty! -------------------------------------------------------------------------------- 024f7ef292 | Edgar A. Bering IV | 2021-02-04 23:29:02 +0200 Remove gadget shops In 0.26, all misc evokers became XP gated, so the player only needs one. With wand stacking changes, players still amass a great many wand charges (themselves exacerbated by the reduction in the number of wand types with scattershot and clouds replaced by misc items!). An easy to find and remove source of this heaping pile of riches are gadget shops, which made a lot more sense when gadgets were more consumable (but even then were quite nice shops). Currently wands and evokers can still appear in general stores, perhaps that could also change, there are still a lot of them spawning. Certainly, misc evokers could stand to see further drop reductions. This commit sticks to gadget shops for now. Some specific numbers from a 3-rune 100 iteration objectstat run, compared to the same run for 0.26. Wand | Avg-26 | Avg-new | Min-0.26 | Min-new | Max-0.26 | Max-new ---- | ------ | ------- | -------- | ------- | -------- | ------- flam | 10 | 7.8 | 3 | 3 | 17 | 19 para | 7.7 | 6 | 2 | 2 | 18 | 14 dig | 6.5 | 4 | 1 | 1 | 14 | 13 iceb | 10.5 | 8.3 | 4 | 2 | 22 | 15 poly | 7.8 | 6.1 | 2 | 0 | 15 | 13 char | 4.9 | 3.8 | 1 | 0 | 12 | 10 acid | 8 | 5.9 | 2 | 1 | 18 | 14 rand | 7.8 | 5.9 | 2 | 1 | 20 | 16 mind | 5.7 | 4.6 | 1 | 1 | 13 | 11 Misc | Avg-26 | Avg-new | Min-0.26 | Min-new | Max-0.26 | Max-new ---- | ------ | ------- | -------- | ------- | -------- | ------- box | 7.4 | 4.9 | 1 | 1 | 19 | 12 rod | 7 | 4.6 | 2 | 0 | 14 | 12 phia | 8 | 4.5 | 1 | 0 | 18 | 11 mirr | 7 | 4.4 | 1 | 0 | 17 | 12 tin | 8 | 4.9 | 2 | 0 | 14 | 12 vane | 8 | 4.6 | 1 | 0 | 20 | 11 -------------------------------------------------------------------------------- 67906b0434 | Aliscans | 2021-02-04 20:17:31 +0200 Make _ability_quiver_range_check() static. The following compiler warning was given by gcc 10.2.0. Making _ability_quiver_range_check() static removes the warning. The function is only used in quiver.cc. quiver.cc:1231:10: warning: no previous declaration for ‘bool quiver::_ability_quiver_range_check(ability_type, bool)’ [-Wmissing-declarations] 1231 | bool _ability_quiver_range_check(ability_type abil, bool quiet=true) | ^~~~~~~~~~~~~~~~~~~~~~~~~~~ -------------------------------------------------------------------------------- fa7a5ec6c4 | Aliscans | 2021-02-04 20:17:31 +0200 Rename lua_persist::string as lua_persist::text. The following compiler warning was given by gcc 10.2.0. Renaming lua_persist::string removes the warning. The name used is immaterial, and the enum is only used in two functions. l-file.cc:93:5: warning: declaration of ‘string’ shadows a global declaration [-Wshadow] 93 | string, | ^~~~~~ In file included from /usr/include/c++/10/iosfwd:39, from /usr/include/c++/10/memory:74, from externs.h:16, from AppHdr.h:315, from l-file.cc:1: /usr/include/c++/10/bits/stringfwd.h:79:33: note: shadowed declaration is here 79 | typedef basic_string string; | -------------------------------------------------------------------------------- b5755f8d7c | advil | 2021-02-04 12:33:56 -0500 lint -------------------------------------------------------------------------------- dc19187ef5 | advil | 2021-02-04 12:31:39 -0500 One more ring of stealth (fix CI) -------------------------------------------------------------------------------- 40f84a5caa | advil | 2021-02-04 12:27:38 -0500 Update some 13 year old docs with current build info (12482) This text was written probably around 0.3 so isn't very applicable to the way things are currently set up; the implementation of DEBUG_MONSPEAK has drifted quite a bit. If there's actually demand for a monspeak-only build (which was possible before bc841a2a9115e3), then the dprfs in mon-speak.cc should be switched back to mprfs. I made one small change so that DEBUG_MONSPEAK isn't completely inert if defined on its own. Also, remove an obsolete DEBUG def. -------------------------------------------------------------------------------- 03888ab0b0 | wheals | 2021-02-04 19:14:30 +0200 Rule of three fix -------------------------------------------------------------------------------- a82526b2db | Nicholas Feinberg | 2021-02-04 09:13:37 -0800 Enable stealth hats and gloves To compensate for the loss of our late, lamented stealthy rings. -------------------------------------------------------------------------------- ccae488368 | Nicholas Feinberg | 2021-02-04 09:05:25 -0800 Mostly remove rings of stealth (various) Rings' mechanical niche is as a swappable slot: items that provide you with tactical decisions to make about gear loadout within a given combat. Do you want rF or Slaying while fighting the lindwurm? Is it worth the extra half a turn to swap? There's some argument over how often ring swapping creates interesting decisions vs busywork, but if rings should exist, that's why. There's no combat where you want to be wearing =Stealth, You want to wear =stealth *outside* of combat, and something else inside. Essentially, if you care about optimizing, you'd want to swap away from =stealth at the start of each combat, which is... not very exciting! So, rings of stealth will no longer generate. They're still around as a base type for the Ring of Shadows, but should probably be refactored into a 'ring of nothingness' at some point. Octopus King now gets +flight instead, for all those pesky lava moments. -------------------------------------------------------------------------------- fa1d4835b4 | Nicholas Feinberg | 2021-02-04 08:58:18 -0800 Pay more attention to removing rings ??doh -------------------------------------------------------------------------------- 0e4e36e7b5 | Nicholas Feinberg | 2021-02-04 08:37:58 -0800 Remove rings of attention These were added to replace rings of hunger, but like their predecessors, they never really had much impact on the game. The potential downside isn't nearly large enough to discourage players from wear-IDing rings, and if it were larger, the resulting cautious gameplay wouldn't be especially fun in a game of Crawl's scale. -------------------------------------------------------------------------------- e61c0dba20 | Nicholas Feinberg | 2021-02-04 08:11:56 -0800 Remove food and chunks - redux! (from objstat) -------------------------------------------------------------------------------- 4b4afb4849 | Nicholas Feinberg | 2021-02-04 08:07:18 -0800 Reduce husk bloat Don't spawn a vast army of bloated husks in swamp_pestilence. -------------------------------------------------------------------------------- 0178f6a2e2 | Nicholas Feinberg | 2021-02-03 23:15:58 -0800 Remove *Curse Random curses on equip existed on exactly three unrands (and no randarts). It was on Scythe of Curses purely for theme, on Obsidian Axe to make it not a complete no-brainer to swap off the weapon when mesmerized, and on the Necklace of Bloodlust to discourage swaps when you'd rather not be randomly berserked. *Curse wasn't an extremely great mechanism for limiting the latter two. The randomness of how many scrolls of remove curse were generated meant that the restriction was sometimes tight and sometimes irrelevant, and there wasn't any real tactical element to the cost. So, let's remove it. Amulets are now slow to swap, so the Necklace of Bloodlust no longer has a *Drain downside at all. The Scythe of Curses is now {drain, *Drain}, which seems very thematic if not mechanically necessary, and the obsidian axe likewise gets *Drain. (It could be fun to have a 'Compel' or 'Sticky' property that makes these weapons slow to swap, compelling the user like the One Ring... but not right now.) This should hopefully provide a more interesting set of tactical choices. Curses! -------------------------------------------------------------------------------- c8dee61f84 | Nicholas Feinberg | 2021-02-03 22:50:47 -0800 Show melee accuracy on v (vt) Matching the xv EV display. (Is this enough cryptic letters..?) -------------------------------------------------------------------------------- c50aac273e | Edgar A. Bering IV | 2021-02-03 21:15:41 +0200 Defang bunyips (hatsuma) Closes #1705; fixing history with binary files made git rebase angry. -------------------------------------------------------------------------------- b9655bc238 | gammafunk | 2021-02-03 12:41:33 -0600 Rework monster placement in a minivault The vault called simply "pond" places over D:10- and all of Lair, but has pretty unambitious monster placement. Except for the fact that its insubstantial wisps got replaced with will-o-the-wisps! Aside from this unfortunate wisp storm, the monster list didn't scale well with placement. This commit reworks the placement, conditioning it on depth and refining the two Lair and Swamp themes it has. Lair and Swamp monster sets are used for D:10-12 and Lair, but only the Swamp set is used for D:13-, since the amphibious Lair monsters aren't an interesting enough set by that point. The Lair set starts from D:10 mostly easier Lair spawns, but ramps this up through Lair and throws torpor snails into the mix by Lair:4. The Swamp set starts as just vampire mosquitoes with light swamp drakeage on D:10, but as depth increases adds swamp dragons, hydra, and eventually will-o-the-wisps. -------------------------------------------------------------------------------- 2393aa7757 | Edgar A. Bering IV | 2021-02-03 20:03:27 +0200 Revert "Increase broad axe delay" This reverts commit 81720017eba9a398c36b19f0d9c4cbe01de8cb61. In the commit message for 81720017eb, its pointed out that broad axes are too cheap relative to battle axes for their rarity. Part of the issue on later analysis of skill points required, is that *shields* were too cheap to add on in a penalty-free way. Commit 0b64aa26 increased the shield penalty. To swing a 20 skill broad axe at min-delay with a kite shield now takes 21,000 skill points on a human; compared to the 13,950 of a battle axe. For an 18 skill broad axe the cost is 17,850; still more than the battle axe (since the trade is for -2 base damage in exchange for the defenses of a shield, it should cost more), but not 1.5 times more expensive. To repeat some of the discussion from 0b64aa26, prior to that commit the cost to swing an 18 skill borad axe at min-delay was 12,200, cheaper than the broad axe. Addressing the disparity via broad axe delay was one solution, but made broad axes a non-use nobrainer for small species (the same base damage is available 1-handed at 16 skill from a morning star for them!); broad axes are still pretty expensive for a small species, but should be more attractive at 18 delay when the shield changes are also considered. -------------------------------------------------------------------------------- bbe54867f3 | hellmonk | 2021-02-03 20:03:27 +0200 Gently nerf spriggans Since they're the most likely to get out of control with stepdown removals, they lose 1 base dex and 1 dodging apt. [ Comitter's note: Closes #1715. Reformatted commit messages ] -------------------------------------------------------------------------------- 24d3c0a44a | hellmonk | 2021-02-03 20:03:27 +0200 Remove the EV stepdown This was an extremely hidden mechanic and I suspect that most players didn't know about it. No change for "natural" evasion 30 or less, which is everything except high dodging high dex characters and spriggans in practice. -------------------------------------------------------------------------------- 6fe205ebb7 | hellmonk | 2021-02-03 20:03:27 +0200 Remove the dex stepdown This commit removes the hidden stepdown to bonus EV from dodging. No change for characters with 18 dex or less, but high dex characters will receive better returns on dodging skill. -------------------------------------------------------------------------------- cd1b0857f5 | Alex Jurkiewicz | 2021-02-03 20:03:27 +0200 Simplify strength damage modifier Previously, the strength damage modifier had three forms depending on your strength, from 0-9, 10, and 11+. The formulas were almost but not quite the same, damage growth was fastest in the 0-9 range with +7.6% per str compared to +5.12% per str in the 11+ range. (Note: these +% figures are the max increase, since the algorithm includes random2 the average increase is about half the quoted numbers.) The way this formula changes based on strength isn't great because either: 1) If it should affect attribute increase choices, it's a non-continuous breakpoint and therefore spoilery. 2) If it's too subtle to change attribute increase choices it's probably pointless. Change the damage modifier calculation to use a single continuous formula for all strength values. Rather than bothering with randomising the multiplier each attack, use a non-random formula suggested by advil. Strength modification is 100% at 10 strength, with +2.5% for each additional point of strength (-2.5% for each point below). Derandomizing the formula reduces the variance of melee combat slightly (there are plenty of other factors that keep the rolls high variance), and reduces the maximum possible damage at high strength values. The new formula increases damage delt at very low strength slightly in absolute terms, since at low strength the damage for most typical weapons is low enough that percentage changes aren't very noticable. At very high strength the new formula doesn't exactly approximate the average benefit of the old formula (the extra .06 of a percentage point of bonus per strength point over 10 becomes noticable in absolute terms at around 40 strength). For typical strength values the average damage tracks to within the measurement error of fsim, and the reduction in maximum damage (used as a proxy for variance) is small (for example at most 1 point of damage for a war axe at each of 10, 15, 20, and 25 str). In exchange for this slight number shift, derandomization should make the effect of high strength easier to "feel" for players (at least those using high base damage weapons). [ Committer's note: Closes #581. Squashed and rebased, added commentary from fsim analysis. ] -------------------------------------------------------------------------------- 0525f28e48 | advil | 2021-02-03 13:01:41 -0500 Don't let tabbing throw nets with autofight_throw/nomove I'm not sure it's the best path to go down to keep adding small hard-coded exceptions like this, but this change brings nets in line with other quiver actions affected by 006ef2cfcc4; they won't be triggered by autofight commands that may fire the quiver. The biggest case where this matters is on a Gl start with one of the relevant options set. In a very small poll of players it seems like most people have been using autoinscriptions for this and don't want these commands to ever auto-shoot nets anyways. As with that previous commit, CMD_AUTOFIRE itself will still work. It's less clear what to do with other ammo starts where players may not want to tab-fire, e.g. poison darts, dispersal boomerangs. Autoinscribing `!Q` or `!f` is currently an option but that's very fiddly and more for advanced rc file users. -------------------------------------------------------------------------------- 7b68f31d6f | Nicholas Feinberg | 2021-02-03 09:25:33 -0800 Spawn OODs in swamp These were accidentally disabled (by default). Objstat suggests this will increase Swamp XP on average by about 5% (82k -> 86k), and will result in weaker monsters being replaced by an average of: - 0.6 tmons - 0.5 ghouls - 0.5 fenstrider witch - 0.4 spriggan air mage - 0.3 thorn hunter - 0.2 spriggan zerker This seems OK. If players die too much, we can do something else. -------------------------------------------------------------------------------- 486a53e333 | advil | 2021-02-03 09:25:29 -0500 Fix some locale issues with skill targets This commit (i) lets players enter numbers using the locale decimal separator in the skill menu (since atof needs this for parsing unless we were to override the numeric locale), and (ii) uses this separator instead of a hardcoded `.` in skill targets -- this is for consistency with the rest of the menu, which already does this. -------------------------------------------------------------------------------- 2708c90bdf | Nikolai Lavsky | 2021-02-03 13:40:43 +0200 Correct a change log entry The player is notified about the Zot clock when there are 1000 turns left. The notification schedule is in `_bezotting_level_in()`. -------------------------------------------------------------------------------- d447f0f5e7 | Edgar A. Bering IV | 2021-02-03 13:34:37 +0200 Checkwhite -------------------------------------------------------------------------------- a34dcf4e91 | Aliscans | 2021-02-03 13:09:30 +0200 Stop art-data.pl from rewriting files which haven't changed. Before writing to an output file, art-data.pl now reads the file, and only writes it if the new version is different. This should reduce the number of files make rebuilds when art-data.txt is changed. In particular, many files depend on art-enum.h, but this only stores the names and ID numbers of artefacts. -------------------------------------------------------------------------------- 74f53ef629 | advil | 2021-02-02 22:24:48 -0500 Update lightning scale description for Pa (u/tom_yum_soup) This is not a very flavorful description, but at least it's accurate. -------------------------------------------------------------------------------- 4e57ec5eb2 | Nicholas Feinberg | 2021-02-02 18:58:48 -0800 No treeporting into summoned trees (vt) This caused crashes, actually! -------------------------------------------------------------------------------- dc854216a7 | Nicholas Feinberg | 2021-02-02 18:22:45 -0800 Fix eleio tree-a-port (12478, gammafunk, Yermak) Don't let them go through glass. -------------------------------------------------------------------------------- 41607c7541 | Nicholas Feinberg | 2021-02-02 18:14:40 -0800 Fix manual display bug (12476) The relevant skill wouldn't be marked visible in your skills list until you reloaded the game. -------------------------------------------------------------------------------- 075faa5519 | advil | 2021-02-02 15:27:42 -0500 `channel` -> `*channel` on wucad mu to indicate that it is a passive effect. -------------------------------------------------------------------------------- b07c51db7e | advil | 2021-02-02 13:03:36 -0500 Reorder checkwhite and unbrace in CI Also, fix a checkwhite error that was showing up as an unbrace error in CI because of the order. -------------------------------------------------------------------------------- 0dd03a7ff8 | advil | 2021-02-02 12:41:32 -0500 Refactor targeting to minimize console redraws 38af612a8a cleaned up the direction chooser code-wise quite a bit, but it had unintended side-effects for console. In particular, after this commit, the entire window was fully cleared and redrawn on every keypress. This isn't very noticeable on local builds, but it is extremely heavy over ssh and can (especially with lower ping) cause bad flicker when targeting while playing online. (It also is going to have a non-trivial impact, in aggregate, on ttyrec size.) This commit refactors the widget wrapping so that most of the time a full screen redraw is not needed; only the parts of the view that need to be redrawn get redrawn, the message window is only redrawn if there are messages, and the sidebar is only redrawn when a full screen redraw is triggered (e.g. initially, or by opening and closing the help window). This code may or may not be a bit hacky relative to more normal Widget classes. This should involve no change for local tiles. However, as far as I can tell the new OverlayWidget class works fine in local tiles, if doing all this redrawing were to be a problem there. Should also not impact webtiles targeting. -------------------------------------------------------------------------------- e0fc76b88b | Nicholas Feinberg | 2021-02-01 17:37:22 -0800 Don't let phantoms blink away from formicids You can't dance without a partner. -------------------------------------------------------------------------------- ee7b36d103 | Nicholas Feinberg | 2021-02-01 17:34:09 -0800 Display meph chance on targeter Some code duplication here, but whaddya gonna do. -------------------------------------------------------------------------------- 0dbb1cdb06 | Nicholas Feinberg | 2021-02-01 17:18:40 -0800 Refactor targeter desc code -------------------------------------------------------------------------------- d744f4be51 | Nicholas Feinberg | 2021-02-01 17:10:45 -0800 Rename mr to wl In a single variable name. -------------------------------------------------------------------------------- 48b565bfe2 | Nicholas Feinberg | 2021-02-01 17:08:50 -0800 Refactor dazzle chance To avoid drift between the targeter and the effect. -------------------------------------------------------------------------------- 52650a7530 | Edgar A. Bering IV | 2021-02-01 23:51:49 +0200 Correctly describe stair behavior of durable summons These have always been able to use stairs, but at some point describe.cc lost the memo. Closes #1618 -------------------------------------------------------------------------------- 54cb51f372 | Edgar A. Bering IV | 2021-02-01 23:51:49 +0200 Mark monster equipment as "SEEN" after we id it This affects note-taking only, as set_ident_flags doesn't care about seen for item knwoledge. Closes #1580. -------------------------------------------------------------------------------- 3ba7187429 | Edgar A. Bering IV | 2021-02-01 23:51:49 +0200 Defer a terrain check for rampage Only check for passable terrain for cells that don't contain our rampage target, so that monsters in impassible terrain can still be rampaged at if they're adjacent to a safe square for the player. Closes #1632 -------------------------------------------------------------------------------- 56efc2da1b | Edgar A. Bering IV | 2021-02-01 23:51:49 +0200 Restore a bit of smarts to autoexplore (Aliscans) Since possibly a long time (I didn't archaeology) autoexplore has had a non-executing guard against moving adjacent to unknown territory when it doesn't have to. This commit restores the check. Closes #1595 -------------------------------------------------------------------------------- b03138de70 | Edgar A. Bering IV | 2021-02-01 23:51:49 +0200 Properly initialize configurable dirs Options.shared_dir is the storage location for a build-condfigured SHARED_DIR_PATH option, and otherwise is a synonym for Options.save_dir (which has sane defaults and is forced to the configured global default in DGAMELAUNCH builds); However, it only gets correctly set to Options.save_dir after the call to Options.reset_options for the second load of the user's rc file after game start. Consequently, the High Scores display doesn't respect Options.save_dir, even though the main menu otherwise does. This commit implements some custom handling for save_dir to behave correctly on builds without customization. Closes #1694 -------------------------------------------------------------------------------- 9234712022 | Edgar A. Bering IV | 2021-02-01 23:51:49 +0200 Remove ball lightning from arena sprint Closes #1713 -------------------------------------------------------------------------------- 9b2ddefb56 | advil | 2021-02-01 13:57:52 -0500 Restore 0.24 console map scrolling behavior In 2fe5a39f5e4 code that was only used to initialize the map view, prior to the commit, was converted to set the region and cursor position on every render. The result was a change in behavior, where previously scrolling only moved the viewport when it hit the edges of the map, after this commit it effectively scrolled the viewpoint on any movement on big enough maps, keeping the cursor in the center. It's possible this was even intentional, not sure, because the new behavior resembled what happens in local tiles and webtiles in the map view (this would at least make it easy to miss relative to non-console map view). However, this behavior is not a good fit for the console map view; The map changing on any movement of the cursor is (IMO) much harder for the user to process than just changing the cursor position, and the required full-screen redraw every step is slower over ssh. (To be clear, I actually think this first point applies to the other two UIs as well, but one step at a time.) This commit restores the 0.24 behavior with (what I think is) a small improvement: scrolling within a few squares of the edge rather than at the edge will trigger movement of the viewport on the map, always keeping a 3 tile margin. (0.24 and earlier scrolled at the edge.) -------------------------------------------------------------------------------- b15c29f0ac | Nicholas Feinberg | 2021-02-01 08:48:23 -0800 Goldify manuals Move manuals from the inventory to being automatically applied to skills after pickup, somewhat similarly to spellbooks. (There weren't any interesting decisions about holding manuals vs consumables.) This also makes them useful for gnolls again, because the UI hassle is gone and because getting different skill titles is fun. -------------------------------------------------------------------------------- 6b030e5e4e | Nicholas Feinberg | 2021-02-01 07:55:01 -0800 Don't auto-exclude summoned spires -------------------------------------------------------------------------------- 4d1656c070 | Alex Jurkiewicz | 2021-02-01 10:04:33 +0200 Migrate to actions/cache v2 (was v1) No breaking changes. Several minor improvements to performance. Will hopefully reduce incidence of spurious errors. -------------------------------------------------------------------------------- 3bf7917939 | wheals | 2021-02-01 09:18:47 +0200 Fix the prompts on the Q/Q* menus -------------------------------------------------------------------------------- 47d50fa972 | wheals | 2021-02-01 09:18:47 +0200 Don't print the menu prompt in the message port This applies to all auto_list menus (i.e., all of them but the second part of the adjust items prompt). This is more consistent with the q, r, etc. menus which already didn't print a prompt outside the menu itself. -------------------------------------------------------------------------------- 7d305d30b1 | wheals | 2021-02-01 09:18:47 +0200 Add a missing space -------------------------------------------------------------------------------- 95f23adaf7 | wheals | 2021-02-01 09:18:47 +0200 "throw a tremorstone" -> "release a tremorstone" "Throw" seems like an odd term both flavor-wise and mechanically. It made sense when the evokable was targeted, but now is inconsistent with throwing any other item, which lets you target. -------------------------------------------------------------------------------- e082b6e869 | advil | 2021-01-31 12:41:52 -0500 Adjust some empty quiver cycle messaging This gets rid of the vestiges of oldquiver error messages, and rewrites things to use the newquiver code in a more straightforward way. This removes some of the hints that the old errors gave about inscriptions etc, but I think the simplification her targets everything that will be likely to apply to newer players who need the hints in the first place. -------------------------------------------------------------------------------- 967dceb2f5 | Nicholas Feinberg | 2021-01-31 09:05:59 -0800 Fix monster magic 2ee872d4bda only fixed one of the two cases where the magic resistance (now willpower) string appears in monster. -------------------------------------------------------------------------------- 39035a7bb1 | Nicholas Feinberg | 2021-01-31 09:03:24 -0800 Rejigger phantoms Phantoms are well known for being notorious time-wasters. They blink frequently, which makes it very easy to escape them, but very hard to kill them. They're not very fun! This commit removes their Blink spell and replaces their AF_BLINK melee attack with AF_BLINK_WITH, which transports the target along with the victim. Since this interacts very badly with Haunt, phantoms have been removed from that summon set. Along with the recent removal of hungry ghosts, Haunt's monster set has gotten significantly more consistent - someone should probably take a look at that and see if any compensating changes are needed to weaken it. This commit also drops phantom HP by about 30%, to bring their defenses more in line with other threats in the same area like iguanas and ogres. -------------------------------------------------------------------------------- 290af4607b | Nicholas Feinberg | 2021-01-31 09:03:24 -0800 Fix attack flavour descriptions Fix a compiler warning in util/monster and remove support for removed flavours. -------------------------------------------------------------------------------- e4214ee863 | advil | 2021-01-31 10:03:10 -0500 Fix =f,=F,!Q inscriptions The behavior of =f/=F was unintentionally flipped, and also broken for ammo items in another way I think. !Q hasn't been working for a while; I think this was broken by moving quiver selection away from an inventory menu. Here I have slightly changed the behavior, by making !Q entail =f and =F, and therefore be a quick shortcut for "really don't ever quiver this thing". -------------------------------------------------------------------------------- 29c5ad5b46 | advil | 2021-01-31 10:03:10 -0500 Don't use fire_order for Q menu inclusion This affected only ammo, and was more confusing than helpful. A better candidate for the menu itself (tbd) might be something more like the spell library hide/show feature. -------------------------------------------------------------------------------- cee7053d2b | Josh Gelbard | 2021-01-31 11:19:22 +0200 Don't try to spawn spiny frogs in arena sprint -------------------------------------------------------------------------------- 1fbed8a51c | advil | 2021-01-30 22:05:34 -0500 Improve some comments re ability ranges when quivered -------------------------------------------------------------------------------- 68775813e2 | wheals | 2021-01-30 23:56:06 +0200 Remove armour corpses Fixes the mon-data test -------------------------------------------------------------------------------- 539a43b7bd | advil | 2021-01-30 16:10:01 -0500 Add a better UI range check for minor destruction (12451) Minor destruction did not have a range check except on activation, leading to bad behavior with autofight_throw=true when quivered. This commit follows the same strategy in 0579ed41f9 for rolling charge. The background problem is that the ability API is still somewhat impoverished, and we don't want to fully disable the ability with no enemy in range (because there is no way to force-activate it equivalent to casting `Z`). However, for quiver and autofight purposes the quivered ability needs to be marked as disabled in this scenario. Eventually it would be nice if spells and abilities had a more uniform interface for these issues. -------------------------------------------------------------------------------- 610fdbd41d | Nicholas Feinberg | 2021-01-30 12:27:24 -0800 Remove unused params (geekosaur) -------------------------------------------------------------------------------- 7a72b21653 | Nicholas Feinberg | 2021-01-30 12:19:49 -0800 Re-remove hyperactive ballistomycetes (lici) Removed in 7da3b9efa77 the first time. -------------------------------------------------------------------------------- 989026e53a | Nicholas Feinberg | 2021-01-30 12:15:11 -0800 New spell: Animate Armour L4 Earth/Summoning. Call forth the spirit of your armour, bringing forth a slow-moving ally that hits harder the heavier your armour is. Casting this in robes creates a 40 HP, 4 AC ally that hits twice for 4 damage. In plate armour, you get a 40 HP, 20 AC ally that hits twice for 60 damage. Wham, pow! (Summon limit is 1, as with CCF.) The design goal here is to help provide some incentives for heavier armour characters to delve into spellcasting. Historically, spells like Haste and Phase Shift tempted players in this direction. Those spells had their own problems, but the 'hybrid' skilling they encouraged was fun. This spell will still be inappropriate for many characters, but if it brings a few 'melee' characters to dabble in spellcasting or 'caster' characters to put on heavier armour, I think that'll be great. Numbers are very much a first draft. I can easily imagine that the damage should scale differently or that HP should vary by armour type, for example. Many thanks to everyone who helped with this. Special thanks to hellmonk for balance suggestions, ebering for code and balance suggestions, mesh and rojja for German advice, and canine for the final name. -------------------------------------------------------------------------------- 22a811f1fd | Edgar A. Bering IV | 2021-01-30 21:02:08 +0200 Adjust a check for hazardous statuary Closes #1670. The want_move parameter would treat statues as one tile closer in i_feel_safe for travel purposes, even if there was a wall in the way. This resulted in an edge-case where the player would feel unsafe even though no hazard existed, see the related issue for an example. -------------------------------------------------------------------------------- 1a8b9f50bf | Edgar A. Bering IV | 2021-01-30 16:45:58 +0200 A bit more /charming renaming -------------------------------------------------------------------------------- 7879cab74d | Edgar A. Bering IV | 2021-01-30 16:29:03 +0200 Quote and description database cleanup Removing old and oudated translations -------------------------------------------------------------------------------- 2f42aecd5e | Edgar A. Bering IV | 2021-01-30 16:17:50 +0200 Further /charming rename (randomMesh) -------------------------------------------------------------------------------- 7ee54fca44 | Nicholas Feinberg | 2021-01-30 10:35:37 +0200 Remove harpies from Monstrous Menagerie Harpies caused several issues for Menagerie: - They weakened the mechanical identity of the spell. Menagerie stands out among other Summoning spells of a similar level for summoning primarily ranged allies, but harpies, of course, are melee fighters. - They confused players. The summon cap applies per-harpy-band, not per-harpy, but that's not at all obvious from the description or in-game. Plus, the number of harpies per band varies randomly, so how close are you to your summon limit at any given time? It takes some tracking! - They exacerbated weird spellpower behaviours. Harpies were generally the strongest result you could get from the spell, better than the notionally-higher-level sphinxes, so it wasn't really much of a plus to increase your spellpower as you'd hope. Not great incentives! This change should, hopefully, preserve the distinctiveness and power of this lovely classic spell. -------------------------------------------------------------------------------- d326f4184a | Edgar A. Bering IV | 2021-01-30 10:30:17 +0200 Silence a warning -------------------------------------------------------------------------------- 0e2341561c | Nicholas Feinberg | 2021-01-30 09:45:27 +0200 Rename wands of enslavement to charming Now that the charms school is no more, we can re-use that pleasant and classic name (of D&D fame) for this classic wand. -------------------------------------------------------------------------------- d48b2df3c9 | Kate | 2021-01-30 00:37:40 +0000 Reword DS magic regen mutation The old message no longer made sense with it being the first mutation of the facet. -------------------------------------------------------------------------------- dcb3803577 | advil | 2021-01-29 16:39:40 -0500 Halve the impact of map scaling on glyph mode Because the base value (e.g. the text size at 100) is so much smaller than regular tiles, zooming out from 100 has an outsized impact. An alternative to this commit would have been to change the default map mode scale value to something less zoomed out, but doing things this way also correctly handles the case where a glyph mode player is spectating a tiles player at the regular zoom levels. -------------------------------------------------------------------------------- d047dbe480 | Edgar A. Bering IV | 2021-01-29 14:26:02 +0200 Don't crash on randbook Wn start (12470) -------------------------------------------------------------------------------- 8ba017916c | advil | 2021-01-28 19:02:17 -0500 Limit printable keycodes in webtiles to ASCII This was (I think) impacting non-US keyboards, where keycodes corresponding to invalid UTF-8 were causing the webserver to choke, and the macro menu not to get forwarded to the client (keycode 169, which *may* result from a closing paren on AZERTY, is one example). It possibly also affects some unusual keys on certain keyboards. There must be a more elegant solution but for now this will just show the keycode directly in the macro menu. Better would be to somehow figure what keys are involved, and print their names, but this seems a bit of a hopeless task for webtiles. It's possible that console needs a similar fix as well, but there (at least in my testing) the result is not that the menu fails altogether -- though it's not very usable. But this would be better tested by someone with a different locale / keyboard layout. SDL should be handled by SDL code, so if it fails on this stuff, it's at least not a crawl bug. -------------------------------------------------------------------------------- dd83002478 | advil | 2021-01-28 19:02:17 -0500 Use a name for ' ' when a name is called for This is a printable char, but isn't apparent in most circumstances when it would be printed directly, so ' ' is not useful as the character description. Therefore, use "Space". Impacts only menu hotkeys, and probably only in the macro menu. -------------------------------------------------------------------------------- 1307ea1511 | AdamPG | 2021-01-28 23:15:45 +0200 Add prompts to various types of movement This commit adds a prompt to several forms of movement that previously did not end Ozocubu's armour or frozen ramparts. This commit also adds barb damage and a prompt to several physically-flavoured forms of movement (such as barachian hop) that previously did not trigger barb damage, and removes braces that were made unnecessary by a previous commit. -------------------------------------------------------------------------------- 88da7fdab6 | AdamPG | 2021-01-28 23:15:45 +0200 Change the colour of the message displayed when frozen ramparts ends Currently, Ozocubu's armour uses the MSGCH_DURATION colour (blue) and frozen ramparts uses the default colour (white) upon ending. This commit makes these messages consistent. -------------------------------------------------------------------------------- 8403051451 | AdamPG | 2021-01-28 23:15:45 +0200 Make icy spells end whenever the player's position changes Currently, many forms of movement (such as barachian's hop, Uskayaw's line pass and all forms of blinking) do not break frozen ramparts or Ozocubu's armour. Since the location of frozen ramparts is tied to the player's position at the time of casting, any change to the player's position should break the spell. Arguably Ozocubu's armour should break only for voluntary movement, as the effect is not tied to the player's initial position, but for consistency we make it break under the same conditions as frozen ramparts. -------------------------------------------------------------------------------- f34d913ce3 | Kate | 2021-01-28 20:35:44 +0000 Remove unused code -------------------------------------------------------------------------------- da3435bf36 | Kate | 2021-01-28 19:59:30 +0000 Upgrade the sceptre of Asmodeus Considering that it requires killing Asmodeus to get hold of (and the summons always turn hostile with no easy abjuration), it seems fine to just give it a straight upgrade to match Asmodeus's new summon list. -------------------------------------------------------------------------------- ac52ab2824 | Kate | 2021-01-28 19:38:36 +0000 Reword a Wyrmbane message The joke on-equip message for draconians wasn't a very good one. -------------------------------------------------------------------------------- cd1702ac4d | Edgar A. Bering IV | 2021-01-28 21:23:15 +0200 Downweight a Lugonu altar vault This altar vault has a very large place range, and so was appearing quite frequently (I didn't run mapstat, but it was in 1/3rd of my tournament games!). Lower the weight so it doesn't get old. -------------------------------------------------------------------------------- fb5ce4e607 | Edgar A. Bering IV | 2021-01-28 20:02:56 +0200 A tile for dread liches A recolour of ancient liches to give them spiffy magenta robes instead of blue. -------------------------------------------------------------------------------- 3b45c41056 | Edgar A. Bering IV | 2021-01-28 20:02:56 +0200 Tiles for Deep Elf Zephyrmancers and Pyromancers Zephyrmancers just use the mage tile (which already had a blue robe), and Pyromancers are a red robe recolour. -------------------------------------------------------------------------------- 3d1ca0d2d8 | Edgar A. Bering IV | 2021-01-28 20:02:56 +0200 Simplify monster spellbook description code Now that monsters only have one spell book, we no longer need to infer their book from seen spells, which really simplifies a lot of the display. -------------------------------------------------------------------------------- 97bf95f3a4 | Edgar A. Bering IV | 2021-01-28 20:02:56 +0200 Split Deep Elf Mages into two monsters Deep Elf magi had 6 (!) spellbooks, intending to represent the four elemental schools, conjurations, and summonings. The most impactful of these books were the lightning bolt book and the fire book; the other elemental schools are represented in various ways by other elf monsters. This commit creates two new monsters: deep elf pyromancer and deep elf zephyrmancer, to carry the fire and air books repsectively. Both have the same stats. Additionally, this moves the console glyphs around (since 'e') is a bit crowded; knights move to blue (matching naga warriors and Duvessa), pyromancers go on red (matching their elemental colour and Dowan), and zephyrmancers go on cyan (again an elemental colour match). The Dowan/Duvessa collision is a bit unfortunate, but they occur at different depths and with this convention they roughly mimic the behavior of their glyphmates. As with the lich split, I've split up the usage in various vaults, mostly balancing the weight. In the spawn tables I did similarly, except for dungeon, where pyromancers come earlier than zephyrmancers, and for abyss, where these lower elves are removed (they were very rare anyhow). -------------------------------------------------------------------------------- a69ff2a406 | Edgar A. Bering IV | 2021-01-28 20:02:55 +0200 New Monster: Dread Lich (Name is TBD) To keep some more iconic Lich spells around in this single book world, the Dread Lich is the lich of demon summoning, with a book consisting of Haste, Summon Greater Demon, Paralyze, and Invisibility. Dread liches have the same stats as ancient liches, and appear in the same places. In vaults they either increased the total lich weight (where the vault seemed weak), or split weight with ancient liches, except in those cases when the vault designer seemd to specifically be using ancient liches in their summoner or their conjuror role. -------------------------------------------------------------------------------- 4c84cb8321 | Edgar A. Bering IV | 2021-01-28 20:02:55 +0200 New Lich spellbook Liches and Ancient Liches have several iconic spells, conjurations, hexes, and summon greater demon (espeically notable on ancient liches who are tough enough to keep their demons around!). So many that making a single book that covers all of the roles leaves a book that steps on its own toes. This commit creates a conjurations focused spellbook for Liches and Ancient Liches consisting of Corrosive Bolt, LCS, Slow, Haste, and Invisibility; this is basically the old LCS book, but with Slow and Invis instead of Petrify. A subsequent commit will introduce a new 'L' monster to take up the summoning Lich role. -------------------------------------------------------------------------------- ff29be1aa7 | Edgar A. Bering IV | 2021-01-28 20:02:55 +0200 Replace Dispater's Summon Greater Demon With Summon Hell Sentinel. For the same reasons that Ereshkigal was changed to summon a specific demon, Dispater's call now goes only to the Hell Sentinels. -------------------------------------------------------------------------------- f4ffc1b5e2 | Edgar A. Bering IV | 2021-01-28 20:02:55 +0200 Replace Ereshkigal's Summon Greater Demon With Summon Tzitzimitl. SGD is a generic spell, and while it's maybe ok for a Pandemonium lord to call up whichever demons, the Hell lords should really only be calling flavorful demons, if any, since they're not lords of all demons! -------------------------------------------------------------------------------- ae91e92f12 | Edgar A. Bering IV | 2021-01-28 20:02:55 +0200 Change Cerbov's summon Summon Greater Demon is of course something a lord of Pandemonium should be able to do, but it seems a bit silly flavour-wise for the firey lord of Pandemonium to summon a blizzard demon. This replaces Cerebov's SGD with the buffed Fire Summon spell of Asmodeus, so he now only calls Balrugs, Hellions, and Brimstone Fiends. It's not completely clear that Cerebov even needs summons, since he's the Fire Storm monster, but summons do prevent a player from isolating the boss monster completely and Cerebov seems to work well with them, so let's try it. -------------------------------------------------------------------------------- 03f7137ab2 | Edgar A. Bering IV | 2021-01-28 20:02:55 +0200 Buff Asmodeus' Fire Summon Effreets and Sun demons aren't good threats at his depth, they're removed from the spawn table for the spell fire summon. -------------------------------------------------------------------------------- 61ce20c919 | Edgar A. Bering IV | 2021-01-28 20:02:55 +0200 Remove some demon summoning Demon summoning is overused on many monsters. Some could still use a summon, but a more flavorful specific summon. For neqoxecs and shadow demons, the summoning spell wasn't that notable. Shadow demons already mostly appear in places with demonic spawn lists, where shadow creatures will fetch plenty of demons; neqoxes demon summoning got in the way of their other line of fire spells and didn't enhance them much. -------------------------------------------------------------------------------- c6c22aa4fb | Edgar A. Bering IV | 2021-01-28 20:02:55 +0200 Remove Bolt of Cold from tzitzimitls While there is a certain ammount of cold/undead theming, as a "fiend" type monster it'd be better if their spells didn't overlap with Ice Fiends. They still have plenty of tools to threaten a living rN+++ player character, and dispel undead for undead players. -------------------------------------------------------------------------------- fd204b979a | Edgar A. Bering IV | 2021-01-28 20:02:55 +0200 Remove some Level 1 spells from high level monster books They don't do much other than add to cognitive load. Casting frequencies are a better way to adjust this sort of thing. -------------------------------------------------------------------------------- b39fecbb77 | Edgar A. Bering IV | 2021-01-28 20:02:55 +0200 Remove Twisted Resurrection This spell lived on in a rather meager twilight existence on some high tier elves. However, like other monster necromancy spells, it was rarely impactful: even when there were a large number of corpses they rarely could amalgamate together to make enough large abominations to threaten the player. -------------------------------------------------------------------------------- 760eeed2df | Edgar A. Bering IV | 2021-01-28 20:02:55 +0200 Give Khufu Scarabs instead of Undead In line with the other Royal Mummy changes. -------------------------------------------------------------------------------- bc7614a589 | Edgar A. Bering IV | 2021-01-28 20:02:55 +0200 Make most monsters single spellbook Monster spellbook variation was used for a mix of two reasons: flavour and threat variance akin to monster item use. Unlike monster items, which are easy to display in the UI, spell books are potentially long, so tracking which ogre mage on screen is the one with Paralysis was a serious UI screw which can't be quickly addressed by adding a HUD indicator. This UI screw plus cognitive load is not worth it: for most multi-book monsters the book variations lack enough focus to build flavour and are rather balanced in their threat levels. This commit changes every multi-book monster except deep elf mages and (ancient) liches to have a single book. Specific monsters and the reasoning behind their new books follow. The general guiding principle I've followed when assembling the new book is to try to follow the "feel" of the old book sets that a player would get if they weren't checking each monster's book carefully. Faun ---- The old Faun spellbooks were corona + another hex. There are a mix of Will checking threats in shoals, but often players arrive with lots of Will gear stacked up. Fauns show up in packs and their Corona+Hex book was designed to make them amplify other ambient ranged threats. The new book gives them Strip Willpower in place, for helping one another and other ambient monsters hex the player. New Faun book: - Corona - Strip Willpower Deep Elf Knight --------------- Deep Elf Knights had one book with Icicle, Haste, and Invisibility, and a second which had Stone Arrow, Force Lance, and Invisibility. The positional implications of Force Lance are great to keep around, so it's added to the rest of the first book. New Deep Elf Knight book: - Throw Icicle - Force Lance - Haste - Invisibility Orc Wizard ---------- Orc Wizards had three(!) distinct books, but their most iconic behavior was confusing the player and going invisible. This is book II, shared with Sigmund, and this is made into the single Orc Wizard book. New Orc Wizard book: - Magic Dart - Throw Flame - Confuse - Invisibility Blork ----- Blork the Orc used Orc Wizard book III, this is basiclly preserved but emergency invisibility is removed from the book since it was quite long. New Blork book: - Cantrip - Magic Dart - Throw Flame - Throw Frost - Haste Necromancer ----------- Necromancers had two books which differed only in the choice of bolt spell. In a large fight where Bind Souls has produced many simulacra, the player could hide from either bolt by using the simulacra to block LOF. The new book gives Necromancers Bolt of Draining, which works better with their mechanic. New Necromancer book: - Bolt of Draining - Agony Range - Bind Souls - Invisibility Wizard ------ Wizards' book assortment conveyed a mix of magics, to imply a mastery. Based on the D&D class as far as I can tell. To keep that flavor I picked a range of spells from their books that produced the same "mixed magic" feel. They share depth with Ogre Magi but don't come in packs, so I went with fireball and banishment here to differentiate the two spell sets. New Wizard book: - Fireball - Banishment - Blink - Invisibility Hell Knight ----------- Hell Knights are one of a couple of late game monsters that cast Pain, which at their depth isn't much of a threat even when it can beat the player's Will. Bolt of Fire is good for them, they can just use that. Perhaps blink should be made non-emergency, but because Hell Knights come in packs an injured HK blinking away to let a fresh one attack the player is a nice touch. New Hell Knight book: - Bolt of Fire - Blink (emergency) - Haste Ancient Champion ---------------- Another late game monster with Pain. Since they often come in bands with undead, retaining Bolt of Draining might be good but for now I went with short and sweet. New Ancient Champion book: - Iron Shot - Haste Royal Mummy ----------- Each of the four Royal Mummy books had Smite and Torment, the remaining mixed Summon Demon, Summon Undead, Summon Mana Viper, Summon Emperor Scorpions, and Summon Death Scarabs in some combination. Plain Summon Demon doesn't do much for RMs, Vipers are also quite fragile at the time Royal Mummies appear and vulnerable to torment, and Mummy Priests already summon undead. Scorpions are vulnerable to torment, so they're not the best here, but the flavour is good. Perhaps we could give emperor scorps rTorm. This is the old Book IV, which has the strongest Mummy flavour. New Royal Mummy book: - Smite - Symbol of Torment - Summon Emperor Scorpions - Summon Death Scarabs Ogre Mage --------- Ogre Mages typically come in packs with other Ogres and are notable for hasting them. Beyond that they have a sort of wizard flavour to their book set; this consolodation picks Bolt of Magma and Parlayse to round out the set to differentiate them from Wizards which appear at overlapping depth. New Ogre Mage book: - Bolt of Magma - Haste Other - Paralyse - Invisibility Tengu Conjurer -------------- The different Tengu spellcasters have a hodgepodge of "battlemage" spells. Flavour wise Tengu are supposed to be good at Conjurations and Air magic, so I settled on the air book from the four book choices. New Tengu Conjurer book: - Lightning Bolt - Battlesphere - Blink Tengu Reaver ------------ In keeping with the air theme (though less so conjurations), the new Tengu reaver book attempts to give them a pair of spells that force a player trying to melee them to reposition. The monster AI change when it comes to blocking ranged allies means that the reaver won't block its lightning spire if it can step aside, so this should interact well. It might need spell logic to prevent the reaver from summoning 10000 spires since monsters don't have summon caps, let's see how it plays. New Tengu Reaver book: - Freezing Cloud - Summon Lightning Spire -------------------------------------------------------------------------------- e00c81aa3c | Edgar A. Bering IV | 2021-01-28 20:02:55 +0200 Revamp Psyche's spellbook The Orc Wizard III book isn't that exciting. Psyche's defining characteristics as a unique are her dagger brand and chaos theme, so I've leaned into that. The new book is: Cantrip, Polymorph, Chain of Chaos, Invisibility. At Psyche's depth Chain of Chaos is rather scary, but can be mitigated by having other monsters around. Since she arrives at a depth where many characters won't have a ready source of allies, this puts pressure to engage Psyche with other hostiles around. Polymorph is also in the mix, partly to thin out the CoC terror with something chaotic in the casting weight, and partly because polymorph aimed at the player is a rather rare effect and a good "signature spell" for a chaos unique. -------------------------------------------------------------------------------- de412597e9 | Neil Moore | 2021-01-28 12:57:45 -0500 Slightly improve a citation. [skip ci] -------------------------------------------------------------------------------- d2cd6250da | Edgar A. Bering IV | 2021-01-28 11:39:54 +0200 Consistently indent quotes in quotes.txt Closes #1700 -------------------------------------------------------------------------------- 5b54ba61a2 | Edgar A. Bering IV | 2021-01-28 11:05:17 +0200 Fix some KJV citations -------------------------------------------------------------------------------- 8fd39cdef8 | Edgar A. Bering IV | 2021-01-28 10:57:32 +0200 Don't mark unkown books useless for gnolls Closes #1707 -------------------------------------------------------------------------------- 607d9e9d85 | Nicholas Feinberg | 2021-01-27 18:57:25 -0800 Mention diggability on xv (hellmonk) -------------------------------------------------------------------------------- d3d0dda1a4 | AdamPG | 2021-01-28 00:15:29 +0200 Prevent Ozocubu's Armour from breaking when equipping heavier armour -------------------------------------------------------------------------------- a1f732d4ef | Goratrix | 2021-01-28 00:11:00 +0200 Replace travis build badge with github badge in README.md -------------------------------------------------------------------------------- 36043c2b5f | Edgar A. Bering IV | 2021-01-27 23:28:57 +0200 Adjust a misleading description (12374) -------------------------------------------------------------------------------- 13c09b7e0e | Edgar A. Bering IV | 2021-01-27 22:38:39 +0200 Remove an extra space (Yermak) -------------------------------------------------------------------------------- 1f8c70d38d | Edgar A. Bering IV | 2021-01-27 22:37:04 +0200 Remove an unused parameter and simplify -------------------------------------------------------------------------------- f9d094ba99 | Edgar A. Bering IV | 2021-01-27 22:03:50 +0200 Don't leak stash info with Gozag gold detection (12413) This makes gold detection work more like item detection, in that the detected gold does not appear in stash search as it did previously. This is a bit unfortunate, but this is the lone edge-case remaining where a stash pile is revealed partially. It shows that the detected thing is gold versus an item for a gnoll on the map, which suffices. -------------------------------------------------------------------------------- e9b1cf51b5 | Edgar A. Bering IV | 2021-01-27 21:21:54 +0200 Don't hide Bows for one hand-paired ants -------------------------------------------------------------------------------- 78287705fb | Edgar A. Bering IV | 2021-01-27 20:59:54 +0200 Hide Bows when a hand is sacrificed (12398) -------------------------------------------------------------------------------- bd0f0ea6ff | Edgar A. Bering IV | 2021-01-27 20:22:48 +0200 Make manuals useless for gnolls Gnolls inability to focus skills makes manuals last an inordinate amount of time, and also create weird incentives around manipulating acquirement results versus getting technical advantages. The lore says they can't focus, so let's extend that to focusing on whats on the page in a manual and make them useless. -------------------------------------------------------------------------------- 66c4918636 | Edgar A. Bering IV | 2021-01-27 20:03:31 +0200 Remove an inappropriate sanctuary check -------------------------------------------------------------------------------- 0faeb86a01 | Edgar A. Bering IV | 2021-01-27 19:50:05 +0200 Don't look for clouds in the wrong places (12459) -------------------------------------------------------------------------------- 36630e8e57 | Nicholas Feinberg | 2021-01-27 07:42:46 -0800 Partially restore monster ranged AI Due to a misreading, 4e0205b1fca8 removed the chance for monsters with ranged weapons to do something with their turn other than shoot their target. Oops! The new logic is: - Master archers (e.g. deep elf master archers, merfolk javelineers) have a 90% chance to shoot. - Non-master-archers with ranged weapons have an 80% chance to shoot. - Non-master-archers with throwing weapons have a 33% chance to shoot. This should get us back roughly where we were before, but with less throwing than after the infinite ammo change. -------------------------------------------------------------------------------- 832131d6ac | Edgar A. Bering IV | 2021-01-27 09:43:04 +0200 Make trove entries transparent -------------------------------------------------------------------------------- bcd94eb011 | Nicholas Feinberg | 2021-01-26 22:07:12 -0800 Remove banana bunyips (hatsuma) The end of an era... -------------------------------------------------------------------------------- 177a798329 | Nicholas Feinberg | 2021-01-26 21:52:33 -0800 Make monsters less throw-happy Similar to wand logic, make monsters with throwing weapons only use them some of the time. Instead of throwing every single turn while not in melee, now they'll only throw their held item at you 1/3 turns. Master archers (e.g. merfolk javelineers) and enemies with actual launchers (e.g. centaurs) are exempted. -------------------------------------------------------------------------------- 4e0205b1fc | Nicholas Feinberg | 2021-01-26 21:45:30 -0800 Simplify monster throwing/launcher AI Remove very complex and fairly pointless interactions with Leda's Liquefication. That spell is not nearly powerful enough to require making the AI play around it intelligently! The player should be allowed to feel smart and to take advantage of dumb monsters with their expensive situational spell! -------------------------------------------------------------------------------- cb3516073f | Nicholas Feinberg | 2021-01-26 21:37:48 -0800 Don't summon demonic guardians from poison Placeholder until/unless a cleverer approach is found. -------------------------------------------------------------------------------- 6fc33f2424 | advil | 2021-01-26 20:15:49 -0500 Don't do zone filling in the abyss Unlike normal builder scenarios, connectivity checks are only rarely triggered in the abyss, by the placement of a minivault it seems. (I'm surprised they happen at all, and wonder what they accomplish.) In this case, it seems wrong to do any fills, as the abyss is supposed to allow temporarily disconnected zones. In mantis 12442, 12416, as well as #1680, it was reported that this scenario could lead to errors, because the fill code assumed that no items had been placed yet. As far as I know this is mostly true, just not for the abyss, which does most of its building before minivaults have the chance to place. I've also added a guard against filling over items, even though the main fix in this commit prevents the specific case from coming up. Interfering items just get nuked, to prevent vetos. Resolves #1680. -------------------------------------------------------------------------------- 9286b66fa0 | Edgar A. Bering IV | 2021-01-26 22:43:02 +0200 Sort the book of Ice -------------------------------------------------------------------------------- 4a2642d2bd | Edgar A. Bering IV | 2021-01-26 22:25:08 +0200 Don't print resist messages when casting Ozocubu's refridgeration Closes #1693 -------------------------------------------------------------------------------- 562fce5957 | Edgar A. Bering IV | 2021-01-26 22:21:24 +0200 Increase the level of Ozo's fridge to 7 The changes to remove self-damage and the damage formula for Ozo's led to a very strong spell. While nerfing the spell damage is also a possible route here, Ice magic currently has no level 7 or 8 spells, so let's try the level bump as a balance knob. -------------------------------------------------------------------------------- 9515ab555c | Nicholas Feinberg | 2021-01-25 22:25:20 -0800 Fix the build? This code is extremely bad! -------------------------------------------------------------------------------- da0e56a6ef | Nicholas Feinberg | 2021-01-25 20:39:53 -0800 Bring Hellbinding back By popular demand, make evil god-following summoners use the old titles. -------------------------------------------------------------------------------- d3d65450af | Nicholas Feinberg | 2021-01-25 19:15:24 -0800 Integrate palentonga sprites And add new palentonga lichform and 8form sprites. Cloaks look sort of awful here, but not sure what can be done! -------------------------------------------------------------------------------- 2a9d61b3d9 | Hatsuma | 2021-01-25 19:15:22 -0800 donger sprites -------------------------------------------------------------------------------- b7e3dba119 | Nicholas Feinberg | 2021-01-25 17:20:47 -0800 Remove item destruction (minmay) Don't make fleeing enemies use scrolls of teleportation or blinking. It doesn't create interesting tactical situations or decisions, and it does cause annoyances and strange incentives for spoilered players. -------------------------------------------------------------------------------- 7528ca199a | Nicholas Feinberg | 2021-01-25 17:12:58 -0800 Mostly remove stone giants from Orc:2 Way, way, way too nasty compared to literally everything else. Orcs should be the star of the show in Orc, imo, not some silly giants! They can still spawn as OODs or in vaults. It looks like empirically they'll show up about 40% as often as before. At some point I should go over these spawn tables more thoroughly... -------------------------------------------------------------------------------- 6522fa7714 | Nicholas Feinberg | 2021-01-25 17:07:21 -0800 Revert "Add a trunk reminder for the 0.26 tournament" This reverts commit 4bfc8a49e17f9a62c58050e8347afbcd08fc21f7. So long, t0.26! -------------------------------------------------------------------------------- 0b64aa269c | Edgar A. Bering IV | 2021-01-26 00:44:09 +0200 Adjust and derandomize shield delay penalty The old formula was approximately an extra min(1d adjusted shield penalty, 1d adjusted shield penalty) delay. However, this was calculated at a scale of 20 to allow die with penalty less than 1, since for a human-sized player the adjusted shield penalty of a buckler at 0 skill is 1. With scaling, the formula was: min ( 1 d (20 * penalty), 1 d (20 * penalty) ) / 20 randomly rounded. As a result, at 0 skill a buckler did not have a delay penalty of 0.1, but in practice was something that was 0 with a pretty high probability. To get a very good chance of a delay penalty of 0, 7 skill was sufficient for a kite shield, and 12 for a tower shield. 7 skill costs a human 1,400 skill points; 12 skill costs a human 4,200 skill points. 2 hand maces (excluding dire flails), pole arms, and swords, all require 20 skill (or more) for min-delay; at the probability of penalty achieved for the above shield skill values, this is a better comparison point than the skill required for min+0.1 delay. 20 weapon skill costs 13,950 skill points, compared to 9,600 for 16 skill and the 7 shield skill; the difference in base damage is not sufficient compensation for enough skill points to raise a 0-apt skill to 10! This commit changes the formula to something less random and stiffer, namely: random_round(penalty) At 0 skill, a buckler has a flat constant delay penalty of 0.1, eliminated at 4 skill. At 10 skill a kite shield gives a delay penalty of exactly 0.1, and the old probability is achieved at a skill level between 14 and 15. To get a delay penalty of 0.1 with a tower shield, 20 skill is required. With these skill training targets, achieving a delay of min+0.1 for a 16 skill 1-hander while using a kite shield costs 11,000 skill points, compared to the 10,800 skill points for 18 skill to get the same swing speed with a 20 skill 2-hander. For min-delay, the 16 skill 1-hander + kite costs 15,250, compared to 13,950 for a 20 skill 2-hander. This is a better alignment of strategic costs, which will hopefully make the "1h vs 2h" a more interesting strategic decision based on game context. The increase to broad axe delay in 81720017eb when combined with this change might make broad axes too expensive; that is easily fixed if it turns out to be the case. -------------------------------------------------------------------------------- aa1b0a69e5 | wheals | 2021-01-25 12:16:27 +0200 Fix the build (doh) -------------------------------------------------------------------------------- 8898b9ca26 | wheals | 2021-01-25 11:51:24 +0200 Clarify a parameter name -------------------------------------------------------------------------------- a59c3b2a1c | wheals | 2021-01-25 11:51:24 +0200 Clarify that malevolent magic applies only to wands (kate-) -------------------------------------------------------------------------------- ef21787582 | hellmonk | 2021-01-25 11:51:24 +0200 Properly handle elemental and cloud producing facets. These mutations are meant to exclude each other so that the player gets at most one elemental and at most one cloud facet. Formerly, this took advantage of mutations with a single mutlevel to handle the check, but that doesn't work anymore. This is as quick and dirty a fix as I could manage, since I plan on looking at this again for the tier 3 mut pr. -------------------------------------------------------------------------------- b44e02ef28 | hellmonk | 2021-01-25 11:51:24 +0200 New tier 2 demonspawn facet, malevolent magic. When a demonspawn with this facet casts a spell, they also try to paralyze enemies in a radius equal to the mutation level around them. The effect's power increases with spell level and checks magic resistance, and evocables will also trigger the effect once the player reaches the final rank of the facet. With luck, this should encourage some interesting spell positioning and use (without encouraging players to use very low level spells exclusively for the proc chance too much). Rank 3 includes evocables so it isn't a completely worthless facet for berserkers. I think it probably feels too bad to lose an entire T2 facet for a choice made at game start. Aside from that, there are lots of balance knobs that can be tweaked. I'm very unsure of how good the effect ends up being across a full game, but it's very simple to adjust the paralysis power or duration, or the effect radius, if necessary. The flavor's kind of thin, too, so feel free to change that. -------------------------------------------------------------------------------- afa7a0f0fe | hellmonk | 2021-01-25 11:51:24 +0200 Adjust the icemail facet. While the icemail itself was very cool and powerful, the previous two ranks of the facet were relatively boring, and freezing cloud immunity was an especially odd choice given that the facet did not create clouds. This rework splits icemail in half across ranks 2 and 3 of the facet and reduces the total AC to 8. A new mutation, Condensation Shield, is added for the first rank, providing 4 SH that dissipates under the same conditions as icemail. This should keep the facet's role relatively intact without buffing it too much lategame; total defenses provided are 4 SH and 8 AC at rank 3. Because the monster enchantment for icemail also uses ICEMAIL_MAX, I buffed gelid demonspawn base AC by 2 to compensate for their reduced icemail AC. -------------------------------------------------------------------------------- 5cca49f90c | hellmonk | 2021-01-25 11:51:24 +0200 Remove convection. Don't melt icemail or ozocubu's armour when flying over lava. This incredibly niche interaction was, as far as I can tell, the only non-damage source that melted icy enchantments. There's not really a compelling gameplay reason for it to do that. -------------------------------------------------------------------------------- eb50e5d1e3 | hellmonk | 2021-01-25 11:51:24 +0200 Revisit the spiny damage formula. It's not worth making the formula that much more complicated. Here is a simpler one that should still be acceptable earlygame and is slightly worse at high experience levels. -------------------------------------------------------------------------------- 5fc36510a5 | hellmonk | 2021-01-25 11:51:24 +0200 Rework Demonic Guardian. Previously, this facet used an extremely bad tension formula to determine whether or not to summon a guardian. It also had a unique time schedule that practically guaranteed the first rank of the mutation very early and usually pushed the second and third ranks very late. The result was an easily gamed mutation that turbo stomped early dungeon and then kept summoning imps until vaults or later. This rework ignores tension altogether; instead, the mutation has a chance to activate whenever the player takes damage (guaranteed if the damage is greater than half max hp or if the player's health is critically low) and summons a demon whose tier is partially based on experience level. The variety of potential guardians is expanded a bit as well. Finally, the time schedule is brought into line with every other tier two facet in the game. -------------------------------------------------------------------------------- 9e10844823 | hellmonk | 2021-01-25 11:51:24 +0200 Rework Ignite Blood. The third rank of the ignite blood facet is very cool, but the first two ranks are boring. Split the power of the actual blood igniting part over all three ranks of the facet - an increasing chance to ignite blood and longer duration flame clouds with each rank. Any rank of ignite blood also confers flame cloud immunity, since that's kind of necessary to use the mutation. -------------------------------------------------------------------------------- 93b95dc60d | hellmonk | 2021-01-25 11:51:24 +0200 Rework Spiny. The previous spiny rework scaled its damage heavily with xl to reduce earlygame damage. While that change was well-intentioned, it made spiny 2 and 3 feel underwhelming. This commit puts a little power back into the upper mutation levels and reduces the level scaling somewhat, at the expense of making the formula messier. -------------------------------------------------------------------------------- 7c3aafa790 | hellmonk | 2021-01-25 11:49:40 +0200 Rework the foul stench facet. This facet had a notoriously useless-on-receipt rank 1 mutation and some very strange mechanics under the hood. This commit takes the rrot mutation out of the facet. The facet will now provide foul stench at every rank, with activation chances rescaled accordingly. Since the player needs to be immune to their own clouds, any rank of foul stench confers rot immunity. The facet no longer makes attackers sick and can now place miasma on any attack that deals damage, not just ones that hit for more than 4 dam. [committer's note: rrot was removed in the meantime anyway, so substitute "miasma immunity" for "rot immunity/rrot".] -------------------------------------------------------------------------------- 2d7ca500d8 | hellmonk | 2021-01-25 11:43:15 +0200 Reorder the mana link facet. Provide boosted mp regeneration first, when it's most likely to matter, then give spirit shield second. Mp regen earlier might make it more useful as mp regen rather than as pseudo hp-regen, though overall the change should be and is intended to be a nerf. The third rank of this facet still leaves something to be desired and has a bad interaction with posion damage (specifically, can kill the player at "safe" levels of poison by redirecting their hp regen), but cannot be moved before spirit shield for obvious reasons. I hesitate to replace it with either additional mp regen or a mana vamp effect because that gives this facet even more overlap with other regen boosting facets. Someone should make gspirit work on poison damage, but that is out of scope for this rework. -------------------------------------------------------------------------------- 8aa0e2c87f | wheals | 2021-01-25 11:42:59 +0200 The future -------------------------------------------------------------------------------- 405e40da7a | ukdong99 | 2021-01-25 11:09:43 +0200 Mark an assuary enterance as transparet 2 Resolves another vault which has the same issue in #1639 -------------------------------------------------------------------------------- 37ff1ca61a | Nicholas Feinberg | 2021-01-25 09:59:57 +0200 Remove Evocation scaling from Spectral Currently, the spectral brand is the most complex weapon ego in the game. It has two significant drawbacks: 1. It can significantly increase the damage the wielder takes, since the spectral weapon shares damage with the player. 2. It requires Evocations training to use. Both due to the overall complexity and the perceived weakness of this brand, I'm inclined to simplify by removing one of these effects. Pain sharing makes the brand a bit harder to evaluate, since most brands have no downside at all vs an unbranded weapon (chaos being the notable exception). Evocations scaling has several other problems, though: - It confuses players on a regular basis. People miss the subtle messages about 'ineptitude' and fail to understand why the spectral weapon isn't triggering - 'is it broken?' Some of them ask other players and get the confusion sorted out but others, presumably, just continue thinking it's bugged! - It's the only effect where Evocations training gives benefit to a passive effect, rather than an evocable item or ability. This isn't the end of the world, but it is an odd exception. - Evocations skill is currently very useful for most characters even without this - most games present a large number of powerful, Evocations-scaling items that strongly incentivize Evocations training. It's somewhere between unuseful and counterproductive to add one more. It's possible that the damage sharing effect should also go away or be reduced in magnitude - the downsides of "need to mess with positioning" and "don't have another brand" might be enough to balance spectral. We'll see! -------------------------------------------------------------------------------- 19cb506db8 | Nicholas Feinberg | 2021-01-24 18:19:12 -0800 Tweak summoning titles Now that the high-level demon summoning spells are gone, get rid of the summoning titles that referenced them in favor of the agnostic alternatives. -------------------------------------------------------------------------------- eb620a3345 | Nicholas Feinberg | 2021-01-24 18:19:12 -0800 Remove Summon Demon As with Summon Greater Demon (see previous commit, true believers!), there are quite a lot of summoning spells around level 5, and this is the only one that duplicates a Makhleb invocation. For the sake of fun choices and variety between games, let's send this one straight to Hell. -------------------------------------------------------------------------------- 58b3cc3132 | Nicholas Feinberg | 2021-01-24 14:00:43 -0800 Checkwhite -------------------------------------------------------------------------------- ed86a5fd00 | Nicholas Feinberg | 2021-01-24 13:54:03 -0800 Make nets finite again Too brutal to give gnolls infinite nets, probably. -------------------------------------------------------------------------------- d7dd4bcd53 | Nicholas Feinberg | 2021-01-24 13:53:23 -0800 Give monsters infinite ammo Don't allow running monsters out of ammo, and make their projectiles always mulch. Remove extremely spammy 'returning' boomerang animations from monsters. This is a buff to cyclopes and stone giants; we can nerf them again in various ways if it proves to be too much. -------------------------------------------------------------------------------- 68f98bdfd7 | Nicholas Feinberg | 2021-01-24 13:47:09 -0800 Retheme /disintegrate -> /mindburst Disintegration is a fun effect (everyone loves things blowing up), but it's always been a weird exception in certain ways. MR (now Will) was always the stat that resisted debilitating effects "plus Disintegrate", and there was never any real flavour justification for that. Why could you resist Disintegrate but not, say, Energy Bolt? It makes it hard for players to develop intuitions about what affects what. So let's retheme. Instead of an abstract Disintegration, Mindburst specifically launches a psychic attack on the target's brain, attempting to blow them apart from the inside. It should be a bit more intuitive why this is affected by Willpower (since it's a mental attack), and it still preserves all the explosive fun of the original. For the sake of intuition, the new Mindburst does *not* affect mindless creatures. This mostly shouldn't matter - there aren't that many mindless creatures that you wouldn't want to disintegrate anyway. (It might be a bit rough if you're up against an early centaur skeleton, maybe.) Great Orb of Eyes' Disintegrate spell has been changed to use Mindburst as well. -------------------------------------------------------------------------------- b3a650cb6a | Nicholas Feinberg | 2021-01-24 13:44:20 -0800 Increase Stone Arrow damage by 2 Stone Arrow's damage compares very poorly to other spells of the same level or below. Even compared to Sandblast, Stone Arrow (a level 3 spell) does similar or less damage against most monsters. Rocks aren't that high a cost! -------------------------------------------------------------------------------- ab96107f46 | Nicholas Feinberg | 2021-01-24 13:41:49 -0800 Reduce gnolls attributes to human The first several attempts at creating a gnoll species ended up making something that was both weak and unfun. When the modern gnoll was created (see d2df3b7b5 / 8a4a258fa7 ), they were pushed to be significantly stronger - and it worked! A bit too well, in fact. Gnolls are currently powerhouses from D:1 to Z:5. Let's pull them back a bit, reducing their strength, intelligence and dexterity to human baseline. I expect they'll still be quite strong, but perhaps just a notch less ridiculous. I'm not averse to weakening them further in future, but this seems like a simple way to start. -------------------------------------------------------------------------------- 19610a9a0c | Nicholas Feinberg | 2021-01-24 13:40:43 -0800 Un-de-enhance Scarf of Shadows spells Per the original commit (bf280b6766): This gives 1 spell de-enhancer, since reduced LOS is very strong and allows more spells to be in range at the edge of LOS. If that makes this item too weak it can be removed. The scarf of shadows effect is as strong or stronger for non-casting characters as for casters, which made it odd that only the latter were penalized for using it. Overall, after the scarf was changed to only reduce LOS by 1 instead of 2, the effect was usually not strong enough to justify both the loss of several AC (vs an enchanted cloak) *and* a spell de-enhancer. Removing the latter should help make this a more viable equipment choice. -------------------------------------------------------------------------------- ee1497a637 | Nicholas Feinberg | 2021-01-24 13:39:10 -0800 Show cloud damage for player spells This is experimental. It's weird in that it's sort of asymmetric with the monster versions (e.g. fire crab's flaming cloud), since those show the impact damage instead. Maybe it's helpful, though? -------------------------------------------------------------------------------- 3644e03777 | Nicholas Feinberg | 2021-01-24 13:38:18 -0800 Display accuracy on ranged targeters This was an oversight. Oops! -------------------------------------------------------------------------------- d412354acc | Nicholas Feinberg | 2021-01-24 13:37:37 -0800 Reduce net trap trigger chance Since making net traps not run out of ammo, they've become more vicious than was intended. To mitigate this, give them a 2/3 chance of *not* triggering when a monster enters them. It'd be interesting to make them require LoF to hit the player, but that's an experiment for another day. -------------------------------------------------------------------------------- f16e6d0322 | Nicholas Feinberg | 2021-01-24 13:34:21 -0800 Remove Summon Greater Demon There are 6 different level 7 Summoning spells: Summon Hydra, Monstrous Menagerie, Malign Gateway, Haunt, Spellforged Servitor, and Summon Greater Demon. As one might expect, there's considerable overlap between those. In the interest of providing players with meaningful, distinct choices, we generally prefer to limit overlap between spells. Summon Greater Demon closely duplicates a Makhleb invocation, reducing the distinctiveness of both effects. That puts it high on the chop list. In combination with the removal of the old aura of abjuration -> SGD synergy minigame, SGD seems like the best spell to cut. To keep book balance, Haunt moves from the Necronomicon to the Grand Grimoire. Now every high level book has 4 spells, which seems nice. -------------------------------------------------------------------------------- b6a8d6b5b3 | Nicholas Feinberg | 2021-01-24 13:31:28 -0800 Refactor further -------------------------------------------------------------------------------- e2d8f9ccf3 | Nicholas Feinberg | 2021-01-24 13:30:51 -0800 Rewrite LRD setup I believe the only functional change here should be that monsters won't directly LRD non-player enemies they can't see (which they probably couldn't anyway?), but there's lots of room for bugs in a change this big. -------------------------------------------------------------------------------- 416527ed24 | Nicholas Feinberg | 2021-01-23 11:51:41 -0800 No Marshlight out-of-sight messages (Yermak) -------------------------------------------------------------------------------- 4d92ddfd83 | Nicholas Feinberg | 2021-01-23 08:57:48 -0800 Display Glaciate damage on xv And remove support for player-cast Glaciate, since that's long-gone! -------------------------------------------------------------------------------- 2451fdf569 | Nicholas Feinberg | 2021-01-23 08:11:47 -0800 Make fenstriders evil (Snakku) Oversight - I was used to this being auto-set from spells! -------------------------------------------------------------------------------- 0bfbe0ea93 | Nicholas Feinberg | 2021-01-23 08:10:49 -0800 Add missing roll icon (hatsuma) -------------------------------------------------------------------------------- 96f8838c2c | Nicholas Feinberg | 2021-01-23 08:05:21 -0800 Fix death explosion messages Broken by 3dd439832fe0f5fe295caad1a2fe3e479a757cda - we'd claim that players were 'hit from afar by a bloated husk' instead of 'killed by an exploding bloated husk'. Oops! From that commit's final line: > Overall, this code is very bad and probably buggy. I'm sorry. -------------------------------------------------------------------------------- e71ae6e9b5 | gammafunk | 2021-01-23 07:43:00 -0600 Fix the depth of a ghost vault (Mantis 12464) In Dungeon it was only ever placing on D:8, instead of on its intended depth of D:8-D:$. -------------------------------------------------------------------------------- 6cd7b45605 | advil | 2021-01-21 12:41:38 -0500 Fix some error handling for lobby save info This info was collected asynchronously, but the code didn't do anything to handle the case where the socket closed before the save info was fully collected, leading to uncaught exceptions in the logs. -------------------------------------------------------------------------------- 12357ec85a | advil | 2021-01-21 11:29:45 -0500 Remove item_info This type was just a typedef to item_def. It was added in 8f49829c0752, apparently with the idea that item_info would be used for item_defs that represented id info, and item_def otherwise. However, this convention wasn't even documented, let alone enforced by an actual type distinction (and c++ never added a strict typedef), so it has undergone drift and largely now exists to confuse people. I could imagine redoing this so that the type checker will do something, but the id system is also much less important now than it was at the time of the original commit, so it seems cleaner just to simplify. -------------------------------------------------------------------------------- 3cb999cee2 | Andrew O'Neill | 2021-01-20 23:52:11 -0600 remove CMD_EAT from colemak This is no longer needed since eating is out. -------------------------------------------------------------------------------- f312352147 | advil | 2021-01-20 15:40:21 -0500 A bit of 288a49279187 that got lost in editing oops -------------------------------------------------------------------------------- a89a457576 | advil | 2021-01-20 15:26:35 -0500 Clean up logging for full socket buffer When holding down a key in webtiles for something that takes a long enough time to outpace the key repeat (either because it is cpu-intensive or just because it imposes a delay), the buffer used to communicate with the crawl instance can fill up, which triggers an exception (and drops the key). When this happens, it is quite spammy in logs on live servers. Ideally this could be prevented from happening in the first place (e.g. any time this can happen on autofight/autofire is a case that should be better optimized), but it will inevitably happen from time to time, and doesn't need to fill up the logs quite so much when it does; the stack trace is not informative. For future reference, the full stack trace for a single case of this will look something like (with minor differences between OSs): 2021-01-20 14:05:25,059 WARN: #0 Error while handling JSON message (''{"msg":"key","keycode":9}'')! Traceback (most recent call last): File "/Users/advil/repos/crawl/crawl-ref/source/webserver/ws_handler.py", line 869, in on_message self.process.handle_input(message) File "/Users/advil/repos/crawl/crawl-ref/source/webserver/process_handler.py", line 897, in handle_input self.conn.send_message(utf8(msg)) File "/Users/advil/repos/crawl/crawl-ref/source/webserver/connection.py", line 109, in send_message self.socket.sendto(utf8(data), self.crawl_socketpath) OSError: [Errno 55] No buffer space available -------------------------------------------------------------------------------- 288a492791 | advil | 2021-01-20 12:38:37 -0500 Reduce webtiles redraws per key input by 2 The previous behavior stems for a fairly old (729eb1357d24d1d5) decision to send a redraw on each input mode change. Since every keypress swaps between MOUSE_MODE_NORMAL and MOUSE_MODE_COMMAND, holding down a key could trigger a lot of unnecessary redraws, and for example with no ammo could max out the process's cpu usage (at least on a `make profile` build). I'm not actually sure why a webtiles redraw (which mainly send the map and the player) is needed on any case of changing input mode, but for now I'll be conservative -- and this is the case that shows up in profiling. As it happens, there's still at least one webtiles redraw per key input, in getch_ck. But, the profiling with just this one doesn't seem like a problem by itself. It's possible that redraw() itself has some issues that could be addressed -- sending both the player and the map equally eat up a lot of cpu with repeated calls. -------------------------------------------------------------------------------- 66375cd4da | advil | 2021-01-19 16:41:12 -0500 Refactor write_dgl_status_file Just a code cleanup. -------------------------------------------------------------------------------- b51a1d6fd6 | Nicholas Feinberg | 2021-01-18 09:36:51 -0800 Don't auto-drop ?tele in Gauntlet (Yermak) For purposes of auto-selecting items for drop with `d,`, ignore temp conditions such as 'being in Gauntlet'. This should discourage accidents. -------------------------------------------------------------------------------- 5a9077b8ae | Kate | 2021-01-17 03:39:46 +0000 Adjust timing for evoked unrand HP/MP costs As with the Majin-Bo in 0fe236c, reduce HP and MP as a cost before activating the ability, and refund it if the ability is aborted. -------------------------------------------------------------------------------- 65cebae1ba | Nicholas Feinberg | 2021-01-16 16:08:25 -0800 Don't show Fridge accuracy (lici) Since it always hits! -------------------------------------------------------------------------------- 19769c27d7 | Edgar A. Bering IV | 2021-01-15 17:44:33 +0200 Add a missing of (Aliscans) -------------------------------------------------------------------------------- 39ad13b146 | Edgar A. Bering IV | 2021-01-15 07:43:18 +0200 Don't remain curled while delayed (12443) -------------------------------------------------------------------------------- 4f573a835d | Edgar A. Bering IV | 2021-01-14 20:37:32 +0200 Fix a teleport closet (MakMorn) -------------------------------------------------------------------------------- 33242fe616 | Edgar A. Bering IV | 2021-01-14 20:07:06 +0200 Prevent trampling a constricted actor (12432) The other option would be to have constriction broken on trampling. However, I went with this resolution because either: - the player is being trampled and constricted, don't make their life easier - or the player has allies and is trying to do both things to a target, creating an ally-micromanagement encouraging edge case -------------------------------------------------------------------------------- 897d3da516 | Edgar A. Bering IV | 2021-01-14 19:44:25 +0200 Don't update constriction when testing door seals The vault warden AI check to see if it should seal a door was using move_to_pos to evaluate the tension of actor moves, but move_to_pos handles updating constriction information of the constrictor. The result was that if the check needed to test if pushing something through a door in a way that would break constriction was a good idea, the constriction would actually break, even if the monster ultimately decided to not close the door! Closes #1566 -------------------------------------------------------------------------------- ea5d59904d | Edgar A. Bering IV | 2021-01-14 19:22:03 +0200 Fix a tension check for runic seals (8085, 10542) The previous tension check for closing doors had an incorrect conditional, so that if tension were *increased* by the closure, the warden would not decide to close the door! Additionally, this check returned true in situations where the tension was 0 before and after the closure. The result of the latter behavior was often locking the player in with their allies away from the warden. Closes #1534 -------------------------------------------------------------------------------- 0fe236cf81 | Edgar A. Bering IV | 2021-01-14 18:55:36 +0200 Adjust the charging of Majin-Bo's hp cost Don't send it through ouch, it should be treated like an ability hp cost, not damage (so no harm scaling!). Also, dec the hp at the same place as the mp cost of the spell, for appropriate sequencing of the effect and to give the player a preview of the cost while targeting. Closes #1578 -------------------------------------------------------------------------------- f40771be7f | Edgar A. Bering IV | 2021-01-14 17:52:12 +0200 Remove an obsolte comment -------------------------------------------------------------------------------- 28f6fc2273 | Edgar A. Bering IV | 2021-01-14 17:26:14 +0200 Anger monsters who block player attacks Consistent with dodged attacks that the monster is awake to notice. Closes #1612 -------------------------------------------------------------------------------- b0dbf93ca2 | Edgar A. Bering IV | 2021-01-14 17:12:25 +0200 Simplify Tornado interactions with distance movement Prior to this commit, if the player moved by translocating (or Ba hop) multiple tiles while under the effects of tornado, the tornado was cancelled, without requiring cooldown, UNLESS the translocation landed the player in a tornado cloud, in which case the tornado duration was decremented by a translocational penalty. No change to duration was incurred on taking a passage of golubria or transporter. On taking stairs the tornado was cancelled with no cooldown. This commit changes the behavior to: blinknado is ok, but all other long distance changes end tornado and give the cooldown. Closes #1611 -------------------------------------------------------------------------------- 80642e47cc | Edgar A. Bering IV | 2021-01-14 14:40:54 +0200 Don't offer conjured things god blessings Closes #1648 -------------------------------------------------------------------------------- 0c344bb9d3 | Edgar A. Bering IV | 2021-01-14 14:18:25 +0200 Restore Zyme sickness Incorrectly changed an undead state check when rot changes were made in 4cbea82fa3. US_ALIVE is tragically false. Closes #1677 -------------------------------------------------------------------------------- 768c70b9d4 | Edgar A. Bering IV | 2021-01-14 13:57:41 +0200 Fix a teleport closet Closes #1681 -------------------------------------------------------------------------------- 58ad9d9fa3 | wheals | 2021-01-14 10:22:07 +0200 Quiet down Irradiate (#12446) I'm guessing, based on loudness being set to 0, that it was never expected to have the explosion noise. However, explode() reset the loudness anyway, so setting it manually had no effect. -------------------------------------------------------------------------------- caaa221d37 | advil | 2021-01-13 20:36:46 -0500 Fix webtiles rendering of ctrl keys I honestly have no idea how these were displaying in console, but they were, so I assumed they would work in webtiles as well. But something low-level that I haven't found must have been doing the actual rendering in a way that didn't convert them to readable strings in webtiles. This is a quick patch to render them correctly in the macro menus. -------------------------------------------------------------------------------- 75406f0b48 | advil | 2021-01-13 14:10:38 -0500 Suppress DGL clrscr escape code during targeting On a USE_DGAMELAUNCH=yes build, clrscr calls send an escape code that is interpreted by dgamelaunch as a clrscr command, and is also apparently used to synchronize ttyrecs (??). This happens at the same time as regular ncurses clrscr, but it seems that it is likely sent and processed immediately, whereas clrscr has no effect until a refresh(). Since 38af612a8a6b923, while targeting, the entire console display is fully cleared and redrawn on every key (via the call chain UIDirectionChooserView::_render() -> redraw_screen -> draw_border -> clrscr). I have not been able to fully understand either why this does happen or why it needs to happen (the screen is actually cleared by a call to ui.cc::clear_text_region that wipes out everything during the ui render chain, making a full redraw necessary), but the net effect is that this causes a lot of blinking when playing in console through dgamelaunch, especially with a low ping. As an interim solution, in this commit I've simply suppressed all dgl clear codes during targeting. They happen often enough otherwise that hopefully this wouldn't cause any synchronization problems, if anything is even using these codes any more. -------------------------------------------------------------------------------- d04b7445b5 | advil | 2021-01-12 20:03:02 -0500 Remove some console blinkiness in map view As far as I can tell, this update_screen call is guaranteed to force an update on a blank screen, and since it is triggered on every refresh in map view, it is making map view extra blinky (especially over ssh). I can't find any negative consequences of just removing it. -------------------------------------------------------------------------------- a51d4ba9de | Nicholas Feinberg | 2021-01-12 08:24:42 -0800 Fix more net trap bugs Don't allow players to collect infinite nets by either (a) being in dragon/tree form or (b) just being already in a net when another net drops. -------------------------------------------------------------------------------- 9f9dfd16e9 | advil | 2021-01-11 17:25:53 -0500 Fix a console hud issue at high turncounts (gressup) This code used a constant number of spaces to clear the rest of the turncount line, but didn't factor in the fact that cprintf wraps; at high turncounts (6+ digits) on long autoexplore/autotravel spans (>10.0 auts) it could therefore overwrite 1-2 letters of the weapon display. Recent changes reduce how often the weapon redraws, so this has probably become more visible lately. Despite that, this is a vintage bug, originating from ce229f1793ccd. -------------------------------------------------------------------------------- ebd156f8b4 | Edgar A. Bering IV | 2021-01-11 00:00:49 +0200 Fix monster tracers for Call Down Damnation The tracer behavior was inadvertently changed in 2f2a4d8ed992e13 which refactored CALL_DOWN_DAMNATION into a zap. In doing so no longer failed to set the explosion size for the tracer. Closes #1678 -------------------------------------------------------------------------------- da163c7f71 | gammafunk | 2021-01-10 10:02:22 -0600 More insubstantial wisp removal Remove descriptions and quotes in various languages. -------------------------------------------------------------------------------- 3544c24705 | advil | 2021-01-09 22:39:14 -0500 Update keybind.txt for 0.26 changes ...missed this. -------------------------------------------------------------------------------- 838eb4c31e | advil | 2021-01-09 18:35:37 -0500 Fix confused ctrl-attacks The code that handles this case got elided in 6b3f3ad2d24f (possibly I was assuming it was handled elsewhere, but it isn't, because of treeform). -------------------------------------------------------------------------------- 58928b186a | Kate | 2021-01-09 22:41:30 +0000 Update monster disintegrate description -------------------------------------------------------------------------------- f4412e357a | Kate | 2021-01-09 22:41:30 +0000 Fix grammar in miscast descriptions -------------------------------------------------------------------------------- def486af7f | Nicholas Feinberg | 2021-01-09 12:37:37 -0800 Fix various will-o-the-wisp vaults Replacing insubstantial wisps with the much more threatening will-o-the-wisps 1:1 produced some unintententionally deadly results. -------------------------------------------------------------------------------- 4bfc8a49e1 | Edgar A. Bering IV | 2021-01-08 21:31:42 +0200 Add a trunk reminder for the 0.26 tournament -------------------------------------------------------------------------------- 3fd14906f5 | Edgar A. Bering IV | 2021-01-08 18:44:07 +0200 Final credit roll for 0.26 -------------------------------------------------------------------------------- fb268537a3 | gammafunk | 2021-01-08 10:06:50 -0600 Final changelog update for 0.26.0 Oops! Forgot to do this before tagging. -------------------------------------------------------------------------------- e07e2c7cd4 | gammafunk | 2021-01-08 09:45:41 -0600 Update the Debian changelog for 0.26 -------------------------------------------------------------------------------- ee53873d45 | advil | 2021-01-08 10:38:27 -0500 Better handle a webtiles error case I think this probably results from something being misconfigured with socket paths; it's being triggered on CBR2 currently by connecting via ssh. -------------------------------------------------------------------------------- 2af701fde4 | Edgar A. Bering IV | 2021-01-08 11:51:34 +0200 Tweak lua documentation and get it to build The internal ldoc error was not, as had been suspected by me, a version problem, but a lack of good error messages from ldoc! After some tweaks, `make api` now runs again under ldoc 1.4.6-2 in lua5.3 (I'm not going to figure out how to make this work with contribs becuase that would surely require vendorizing ldoc...). Some typos and type-os (misuses of tparam) are also corrected. -------------------------------------------------------------------------------- 21144fbd99 | Nicholas Feinberg | 2021-01-07 22:29:36 -0800 New Fenstrider Witch tile (canofworms) -------------------------------------------------------------------------------- 238fa4abc0 | Nicholas Feinberg | 2021-01-07 22:29:16 -0800 Replace Bloated Husk tile Look familiar? (It's a recolour of the very old Plague Shambler tile.) -------------------------------------------------------------------------------- fbafd837a3 | advil | 2021-01-07 21:14:45 -0500 Attempt to handle WebSocketClosedError in Tornado 6 Under high load conditions (I think, I haven't replicated this) in current versions of Tornado, write_message can return non-trivial Futures. Our code has assumed that these are always trivial, and therefore, did not do any exception handling; a timeout under these conditions causes a *lot* of annoying log messages, coinciding with server lag/thrashing, though I'm not sure of the causal direction. We've been seeing this specifically on CBR2. This commit adds an exception handler for the async part of write_message, using a callback (in a kind of ugly fashion). I haven't locally replicated the exact issue, but I have tested this callback by modifying Tornado. Some day, maybe this code can all be made to use async directly. At worst, this fix will make the log messages a lot cleaner; I do suspect it won't do more than that for the deeper problem, but it will also hopefully provide some clues as to what is going on. -------------------------------------------------------------------------------- 0ec5f8ab93 | advil | 2021-01-07 16:59:46 -0500 Fix some oddnesses with fire order from invalid quivers This isn't a very general fix, and will lead to odd behavior if launchers are not first in the player's fire order, but I don't want to mess with this too deeply given the release timing. -------------------------------------------------------------------------------- 216b6189a3 | advil | 2021-01-07 16:59:46 -0500 Prioritize sandblast over throwing stones for EE start (ardl) This is extremely special-case-y, but EE players will almost certainly want to do this right away anyways, and it better matches other elemental starts. I at least made it check fire order first. -------------------------------------------------------------------------------- e4986e83c0 | advil | 2021-01-07 16:59:46 -0500 Missed hailstorm animations from 64bdb92e382d -------------------------------------------------------------------------------- e8fdfcfcf6 | gammafunk | 2021-01-07 11:25:18 -0600 Remove references to Charms magic (split) In the manual and in the aptitude list templates. -------------------------------------------------------------------------------- 64bdb92e38 | advil | 2021-01-06 17:21:00 -0500 Improve coverage of disabling beam animations (12356) This gets lightning rod, tremorstones, glaciate, ignition, hailstorm, and static discharge. -------------------------------------------------------------------------------- 054287de91 | advil | 2021-01-06 16:07:57 -0500 Don't process click_to_travel minimap clicks in map mode If you left-clicked the minimap while in map (`X`) mode, this would start autotravel, and then "continue" it when exiting map mode in any way including escape. In #1508 it was also reported that this sequence of actions caused a crash on windows; it isn't surprising to me that activating click_to_travel without leaving map mode would crash, though I didn't get it to crash on mac. In any case, this behavior doesn't make sense (escape should abort), so remove it, and hopefully fix the crash on windows as well. -------------------------------------------------------------------------------- 1c918b713c | advil | 2021-01-06 15:28:28 -0500 Don't crash with extreme game_scale values These can lead to bad memory corruption and crashes if they result in regions having size 0. Instead of crashing, print an error message to the player and abort. -------------------------------------------------------------------------------- 23abb52f8e | advil | 2021-01-06 14:02:04 -0500 Fix a glyph size issue (powerbf) I *think* what was happening here is an off-by-one error; if the glyph size is exactly the max advance the stored version was failing to be doubled, and was short one column; this column was getting overwritten by an adjacent glyph. Huge thanks to powerbf in #1482 for doing the bisection + debugging to figure out the source of the problem. I wont' auto-close that PR as I'd like to get this tested on other OSs. -------------------------------------------------------------------------------- 72ac391492 | advil | 2021-01-06 09:47:53 -0500 Revert "Explicitly set window opacity" This commit probably didn't do anything (or so I was convinced by discussion in #1562), and will prevent building against xenial, which we are currently targeting for debs. This reverts commit 613af4b37b82d0001911d91b8d37d4153b36e1ad. -------------------------------------------------------------------------------- 8be3b22871 | Goratrix | 2021-01-06 09:40:03 -0500 Update changelog for 0.25.1 This changelog entry was only commited in 0.25 branch when 0.25.1 was released, not to master, so it's missing now from 0.26 and master changelog file. -------------------------------------------------------------------------------- 54a7bdf380 | advil | 2021-01-06 09:38:56 -0500 Remove travis -------------------------------------------------------------------------------- bd5e5ef833 | advil | 2021-01-06 09:35:25 -0500 Tweak autofire description in key help ... to make clear that untargeted actions are activated. -------------------------------------------------------------------------------- 34d46f0a3f | advil | 2021-01-05 14:27:49 -0500 Changelog updates * More on newquivers * add a bunch of smaller options/lua/ui features mostly from outside contributors * Put all key combos for this version in `` (I realize this isn't md but it's still easier to read that way.) -------------------------------------------------------------------------------- 1ca9eea3f7 | advil | 2021-01-05 10:53:26 -0500 Fix quiver redraw issues on delay interrupt Depending on the exact timing, a stat redraw sometimes wouldn't happen immediately after a delay interrupt, leading to incorrectly showing a quiver as disabled. This commit adds some delay-related checkpoints to ensure that the quiver info is up-to-date, and forces a stat redraw on runrest delay end. (This could come up for other interrupted delays?) This is somewhat delicate to debug/replicate because messaging can force a stat redraw itself. -------------------------------------------------------------------------------- 753e386513 | advil | 2021-01-05 10:28:05 -0500 Fix target check for LRD This spell is LOS range so there's no impact wrt the spell's effect, but this fixes quiver status and messaging. I think the manual special-casing in the range check originates from when this spell could destroy walls. -------------------------------------------------------------------------------- d6d4955b76 | advil | 2021-01-05 10:23:04 -0500 Fix autofight messaging for spells with no target in range Not sure exactly when this got broken, but this commit cleans up a few issues with how this was previously implemented. -------------------------------------------------------------------------------- 021c985bc4 | advil | 2021-01-05 09:07:47 -0500 Remove some debug code -------------------------------------------------------------------------------- bdec46a1ea | nikheizen | 2021-01-05 04:25:14 -0600 Fix nzn_winding_woodlands_15x15_boxy_spiral This subvault was only 14 cells wide instead of 15. This commit fixes it and makes the central vault slightly more resilient to vault burning. -------------------------------------------------------------------------------- 5f2be0e231 | advil | 2021-01-04 16:36:37 -0500 Disallow throwing stones while wielding a sling There's nothing wrong with this per se, but it doesn't have much in the way of benefits that I can come up with and is fairly confusing to the player. This was disallowed before e42c0a68 anyways. -------------------------------------------------------------------------------- bd55b0887b | advil | 2021-01-04 16:26:48 -0500 Restore switch-on-autopickup behavior from pre-0.26 When you ran out of one type of ammo, autoswitched to another, and then picked up the first type, oldquivers would switch you back. It got removed in the quiver rewrite because the code was kind of messy. This commit restores that behavior, by popular demand. I'm not super happy with the implementation (which unfortunately relies on a bunch of weird legacy code) but after thinking about this for a while, I'm not sure there's a clean way to implement this behavior. -------------------------------------------------------------------------------- 1d1f4c8ba3 | advil | 2021-01-04 12:04:26 -0500 Add a note about sub-ordering for fire_order -------------------------------------------------------------------------------- 08524f53dc | advil | 2021-01-04 10:44:11 -0500 Tweak targeting help Make it clearer that the quiver commands are mode-specific, also use correct mapping for `()`. -------------------------------------------------------------------------------- 6ed78dee3f | advil | 2021-01-04 10:36:28 -0500 Add a fallback targeter heading for firing This mostly impacts targeted abilities that don't have any labeling in targeter mode at all (mainly old ones). It would be a good idea to do something more comprehensive / consistent, but ability targeters are implemented in a fairly piecemeal way (unlike e.g. spell_direction). -------------------------------------------------------------------------------- 405e3faaac | advil | 2021-01-04 10:21:34 -0500 Simplify quiver verbs for misc evokables I tried a few times to make these flavorful + non-confusing, but never really got the second part down. Just use "Evoke". -------------------------------------------------------------------------------- c18c9092ac | advil | 2021-01-03 20:40:11 -0500 Clean up + simplify "Powers" tab Invocations info The original form of this message ("piety instead of invoc") was already kind of confusing, because most invoc gods are affected by *both* piety and invoc (and this is described for specific powers on the Overview tab too). In addition, it just left out gods where the "piety" part wasn't appropriate or was too involved. This commit simplifies the skill message to only describe the non-impact of Invocations, and shows this message for all gods that aren't affected by invoc. Contra the now-removed comment, there would be space to describe any additional effects that this doesn't cover, but it's not actually that obvious to me what this comment was talking about that is missing. (For Gozag, the effect of gold is well-described, and the comment about WJC seems outdated?) Resolves #1662 -------------------------------------------------------------------------------- 7ddcfd5ad1 | advil | 2021-01-03 20:18:06 -0500 Set default startup name from -name at command line This lets a name set at the command line persist to the main menu if the player hits esc at character selection. Resolves #1510 -------------------------------------------------------------------------------- 443bf2d2ca | advil | 2021-01-03 15:58:42 -0500 Don't double !f warning for `F` Resolves #1669 -------------------------------------------------------------------------------- 353b9ea00c | advil | 2021-01-03 15:41:42 -0500 Fix launcher autoswitch issues (ardl) launcher_action_cycler autoswitch was broken in some cases (most obviously when picking up a launcher for the first time with none of its ammo in inventory) because its default initialization was with an ammo_action, not a launcher_ammo_action. While debugging this I found a bunch of related issues and cleaned up some of the code slightly. -------------------------------------------------------------------------------- 2edb794d0a | gammafunk | 2021-01-03 11:14:02 -0600 Make player drain fully proportional and buff it I originally made max HP drain split power into two components, one used for a randomized cost and one for a proportional cost. This was to balance the effect between low HP characters and high HP characters. Low HP characters get penalized more an effect based on a fixed value compared to one that's based on a percentage of max HP. Making it fully percentage-based hurts high HP characters more, but elliptic pointed out that this is how other max HP reduction effects like frail work. Based on play-testing, the current drain effect is a bit weak for both monster attacks and ability drain costs, and we'd like to buff it. Making the effect fully proportional will let us do this without harming low HP characters quite so much. Yes, we actually care about the poor felids (no we don't). This commit makes the effect fully based on the player's current max HP and increases its strength by 33%. Now the final HP drained is simply: 1 + div_rand_round(power * max_hp, 750) with the division being randomly rounded in the usual way. Hence we always drain 1 MHP if our power was non-zero. Drain power is still 1 + damage for monster attacks or a fixed cost value for abilities, as before, Some quick play testing has shown early wight packs to be a bit more effective at getting the player into lightred drain and e.g. Ru Apocalypse to be a bit nastier. If this proves to be not enough, it's easy to adjust that 750 divisor. -------------------------------------------------------------------------------- 2d0a2396b0 | advil | 2021-01-02 20:43:43 -0500 Improve tremorstone + summons warning checks (12409) This is a fairly minimal approach, in contrast to the potential for refactoring: there's a lot of related code that could be consolidated here, and it looks to me like shoot_through_monster does a bunch of checks that doesn't need the full beam. Various other cases have the same code duplication issue, see e.g. b68aede. However, I don't want to mess with this stuff in a general way during feature freeze. Partial revert of 105bc0f7bc0538ce0380fe774c2a35860f9f7c17. -------------------------------------------------------------------------------- 0579ed41f9 | advil | 2021-01-02 20:43:29 -0500 Fix a butterfly+charge+quiver interaction (12410) Palentonga charge can target butterflies, but autofight code has its own check that ignores butterflies. With autofight_throw=true, when a butterfly was in charge range the quivered ability would therefore be enabled, but autofight would select movement towards the distant target. However, autofight relies on a quivered ability to be disabled to know when to trigger movement; the net result was that it passed a distant target through to activate the ability and gave an error. On the assumption that players won't usually want to roll towards a butterfly, this commit disables charge with non-threatening monsters in range. However, charge can still be triggered towards a non-threatening monster by using the `a` menu. As noted in the comments this is a somewhat hacky solution, and a more general solution along the lines of spells + non-threatening monsters would be less hacky. -------------------------------------------------------------------------------- 105bc0f7bc | advil | 2021-01-02 18:26:21 -0500 Revert "Improve tremorstone + summons warning checks (12409)" This reverts commit 91735a3152ac1321536d30bc7ca0037caf38fc6b. -------------------------------------------------------------------------------- 91735a3152 | advil | 2021-01-02 18:19:29 -0500 Improve tremorstone + summons warning checks (12409) This is a fairly minimal approach, in contrast to the potential for refactoring: there's a lot of related code that could be consolidated here, and it looks to me like shoot_through_monster does a bunch of checks that doesn't need the full beam. Various other cases have the same code duplication issue, see e.g. b68aede. However, I don't want to mess with this stuff in a general way during feature freeze. -------------------------------------------------------------------------------- 087482e4d5 | Edgar A. Bering IV | 2021-01-02 16:26:37 +0200 Don't perform a range check for Noxious Bog -------------------------------------------------------------------------------- 086eb55de8 | Edgar A. Bering IV | 2021-01-02 15:57:39 +0200 Tone down Ignite Poison's effect on bog The previous interaction was bugged, since place_cloud takes a number of turns, not a number of auts, so a duration 10x as long was being used for the flame clouds created when igniting bogs. Additionally, igniting every tile was left-over from the trail-style bog. New Noxious bog places many more bog tiles instantly, which even with the originally intended cloud duration allows the player to surround themselves with flame-cloud covered bog (and keep the flame clouds for a while after the bog ends at high power). This commit reduces the flame cloud duration to a reasonable length (2-5 dAuts at max power) and only places flame clouds over a bog cell with a one in three chance. -------------------------------------------------------------------------------- 63decd6869 | Edgar A. Bering IV | 2021-01-02 15:15:31 +0200 Clarify a prompt message -------------------------------------------------------------------------------- c91146610e | Edgar A. Bering IV | 2021-01-02 15:15:07 +0200 Describe dazzle chance in the Dazzling Flash targeter -------------------------------------------------------------------------------- 7e5a9cbe55 | Edgar A. Bering IV | 2021-01-02 14:59:06 +0200 Add a static targeter for ignite poison -------------------------------------------------------------------------------- c93d6a9b7e | Edgar A. Bering IV | 2021-01-02 13:44:33 +0200 Re-refactor targeter_multiposition Commit 464169c878 fixed some of the monster checking that targeter_multiposition does, and subsequent commits used targeter_multiposition as a base class for static targeters for various LOS-enchantment effects. The implementation of 0242afd26b had some order-of-execution finesse to ensure that a virtual method called by the targeter_multiposition constructor was correctly initialized. In that commit and the comments in it I remarked there was probably a better way. Indeed, the design smell of the constructor pointed out the following: multiposition and multimonster targeting, while appearing similar in the ui, are semantically different. This commit splits up users of the class: targeter_multiposition is used when the targeted cells depend non-locally on the monster occupying the cell, and a new targeter class targeter_multimonster is introduced for targeting monsters in los on a monster-by-monster basis. The result simplifies targeter_multiposition nicely. -------------------------------------------------------------------------------- 3d81cda750 | Edgar A. Bering IV | 2021-01-02 11:05:32 +0200 Allow static-targeter preview of Confusing Touch By enabling these two spell flags the recently implemented static targeter interface Just Works to allow a preview of Confusing Touch success chances. The highlighting intentionally highlights only the player, which might make this behavior a bit hard to discover, but it feels less misleading than "targeting" all visible monsters. The wording could be improved, but currently the success chance display does not allow verb customization. Because this targeter is a bit of a kludge, I haven't made it a default force targeter. -------------------------------------------------------------------------------- 0242afd26b | Edgar A. Bering IV | 2021-01-02 11:05:31 +0200 Add detailed static targeters for LOS enchantments To round out the new quiver and collection of static targeters, this commit adds detail to the static targeters for: Cause Fear, Discord, Alistair's Intoxication, and Metabolic Englaciation; also added is a static targeter for the pseudo-spell Drain Life. Each now highlights the monsters that will be affected (or at least not outright immune). Additionally, success chance displays have been added, so that the chance of affecting each target is available. In an ideal world these spells would be further re-factored so that the targeter behavior is unified with the casting behavior, the affect logic encapsulated in beam or zap data, and the different targeting classes unified in a single targeter_multiposition_enchantment. For now, I am content with the UI clarity. -------------------------------------------------------------------------------- cc8eda8a42 | Edgar A. Bering IV | 2021-01-02 11:05:31 +0200 Adjust Metabolic Englaciation Simplify the formula slightly to only randomize on power and not also on monster HD. The change uses the midpoint of the previous roll so the power level should stay about the same, with aa slightly narrower distribution of durations. -------------------------------------------------------------------------------- 1589ab1335 | Edgar A. Bering IV | 2021-01-02 11:05:31 +0200 Fix a targeting information leak in Absolute Zero (12415) -------------------------------------------------------------------------------- 464169c878 | Edgar A. Bering IV | 2021-01-02 11:05:31 +0200 Refactor targeter_multiposition Clarify the usage of can_affect_unseen, improve visibility checks, re-name a parameter, and support child class overrides of affects_monster. -------------------------------------------------------------------------------- 0db6f627e1 | Edgar A. Bering IV | 2021-01-02 11:05:31 +0200 Rename a function for clarity desc_success_chance -> desc_wl_success_chance -------------------------------------------------------------------------------- 87abb2d9eb | Neil Moore | 2021-01-02 00:10:24 -0500 Add a quote (that will rarely be seen) Same as it ever was. [skip ci] -------------------------------------------------------------------------------- 5dcdf963e0 | Nicholas Feinberg | 2021-01-01 14:52:07 -0800 Don't spawn 8 will-o-the-wisps in Lair (Goratrix) One will-o-the-wisp is a significant threat in Lair. 8 is death. -------------------------------------------------------------------------------- c4307f12cd | advil | 2021-01-01 16:17:45 -0500 Fix `F`+pproj logic (10804) This was inverted, and I think it also shouldn't ever set MB_TRUE for this code path. -------------------------------------------------------------------------------- fb19f2a25f | advil | 2021-01-01 16:02:23 -0500 Add lua support for targeted CMD_THROW_ITEM_NO_QUIVER This is a partial revert of d0772dbefd; this parameter was waiting for a case to be added in l-crawl.cc. -------------------------------------------------------------------------------- 92626205c4 | advil | 2021-01-01 15:55:01 -0500 Simplify throw_it (PleasingFungus) This code path has become progressively refactored so that it is only ever called from one place, and a quiver::action object provides the full context needed to do throwing/launching; so, use that. -------------------------------------------------------------------------------- 18013ae1f5 | Nicholas Feinberg | 2021-01-01 11:27:32 -0800 Remove unused variable (Mesh) -------------------------------------------------------------------------------- 2922b9e743 | Nicholas Feinberg | 2021-01-01 09:50:02 -0800 More throwing code cleanup Remove a very long-unused return variable and some other unused cases. This whole use of `dist target` is much more complex than it needs to be (we never pass a meaningful target in), but... -------------------------------------------------------------------------------- e5df516c99 | Nicholas Feinberg | 2021-01-01 09:42:40 -0800 Ban shift-dir pproj (12422) Recent quiver changes caused shift-direction aiming (which fires projectiles in a cardinal direction) to crash the game, but it never worked correctly. In older versions, it would aim at the map border, causing fun messages in e.g Shoals of "There is a water there". There's really no situation in which shift-aiming with pproj makes sense, unless some more complex behaviour of 'aiming at the nearest enemy in that direction' was added. Barring that, let's ban it. -------------------------------------------------------------------------------- f342683475 | Nicholas Feinberg | 2021-01-01 09:03:58 -0800 Rename a mysterious 15-year-old variable -------------------------------------------------------------------------------- d0772dbefd | Nicholas Feinberg | 2021-01-01 08:58:02 -0800 Remove an unused parameter -------------------------------------------------------------------------------- cf006a40f5 | Nicholas Feinberg | 2020-12-31 10:17:33 -0800 Don't make Hurl Sludge also cast Blinkbolt (vt) Why are C-style switch/case statements so bad. -------------------------------------------------------------------------------- 135aecce3f | gammafunk | 2020-12-31 11:36:06 -0600 Have Vehumet support Eringya's Toxic Bog (Lici) A direct damage spell, just not one using conjurations, so add it to the special list. -------------------------------------------------------------------------------- 6edc4d6507 | Alan Malloy | 2020-12-31 03:56:09 -0800 Record origin of clouds that petrify the player (Tungsten) -------------------------------------------------------------------------------- b6e4b569e3 | wheals | 2020-12-31 12:44:09 +0200 Remove an unused spellbook -------------------------------------------------------------------------------- 930a39183f | Edgar A. Bering IV | 2020-12-31 12:10:59 +0200 Remove insubstantial wisps Insubstantial wisps aren't great monsters. Mechanically annoying, rarely threatening in their vault usage, and not loreful enough to keep as a rare vault decorating monster (compare toenail golems, which aren't annoying and are very loreful). After the Swamp overhaul these continued to appear in: - assorted vaults (where they were generic electric/translocations theme or a now incorrect Swamp monster) - the Foxfire card's effect list - in the Abyss spawn list (as a Swamp guest) None of these usages were particularly inspiring as the monster is not great, so wisps are finally dissapated by this commit. The tile and glyph info are retained to use as a dummy for player Wisp form. For vaults: - in Swamp and where they are a Swamp guest, they are replaced with will-o-the-wisps, - in places where they are a generic electric threat, they are either removed or replaced with ball lightning (as appropriate), - in places where they are a translocation theme piece, they are removed. The Foxfire card no longer summons wisps, and just has a shorter list. The Abyss spawn has been replaced with will-o-the-wisps. -------------------------------------------------------------------------------- 14533b3512 | Edgar A. Bering IV | 2020-12-30 20:34:31 +0200 Fix some zap glyphs Commits 2f2a4d8, f75564e, and 17de90a zapified more monster spells and abilities, but in moving them to zap data didn't preserve the default DCHAR_FIRED_ZAP beam glyph from mons_spell_beam. This resulted in console animations for the affected abilities using null as the glyph, hiding the beam. -------------------------------------------------------------------------------- 7079f50010 | Goratrix | 2020-12-30 20:10:21 +0200 Clarify annotations in Ctrl+O and in the manual After commit 8436896, any level can be annotated. Update instructions in Ctrl+O and in the manual accordingly. -------------------------------------------------------------------------------- 56d4af09c2 | wheals | 2020-12-30 20:06:53 +0200 Fix the build With the rename, the flavor connection to the vault is more tenuous than ever, but I'll allow it. -------------------------------------------------------------------------------- d7b2425749 | Nicholas Feinberg | 2020-12-30 09:54:36 -0800 Remove Robustness (; -------------------------------------------------------------------------------- adef21051d | Edgar A. Bering IV | 2020-12-30 19:44:13 +0200 Rename two unrand rings (CanOfWorms, hellmonk, PleasingFungus) Robustness -> the Tortoise Phasing -> the Hare 1. Robustness has the same name as the mutation, but a completely different effect. 2. Tortoise / Hare pairing is good Lore that links the two rings. 3. I got to the bikeshed with the paint colour I like before PF did (alternate suggestion was Robustness -> Invincibility). -------------------------------------------------------------------------------- 05fc5f520a | Nicholas Feinberg | 2020-12-30 09:05:55 -0800 Fix gargoyle statue form LRD damage See 25521206441 for reasoning. -------------------------------------------------------------------------------- f2e91f3db1 | Nicholas Feinberg | 2020-12-30 08:55:48 -0800 Warn before entering a bezotted branch To help players notice when they're short on time? -------------------------------------------------------------------------------- 35eea5b30a | Nicholas Feinberg | 2020-12-30 08:44:34 -0800 Refactor stair warnings -------------------------------------------------------------------------------- 220361c043 | Goratrix | 2020-12-30 10:24:53 +0200 Small update in options guide Eringya's Noxious Bog has a default force_targeter now, so update options guide accordingly. Also fix two stray rows which were longer than 80 characters. -------------------------------------------------------------------------------- d52f5182fe | Nicholas Feinberg | 2020-12-29 08:24:35 -0800 Rename art-data MAGIC->WILL MAGIC was always an extremely confusing property name. -------------------------------------------------------------------------------- 0de2e1c0f6 | gammafunk | 2020-12-29 06:58:43 -0600 Fix a changelog entry (ebering) -------------------------------------------------------------------------------- 66cac9c236 | gammafunk | 2020-12-29 06:14:40 -0600 Update the changelog Through 0.26-a0-1210-gada54dbd18. -------------------------------------------------------------------------------- ada54dbd18 | gammafunk | 2020-12-29 06:06:41 -0600 Restore the Glaive of the Guard's enchantment (curatorofearth) Make it +8 again, since its spectral weapon ego is good, but not good enough to also have bad enchantment. This was an apparently unintentional change made when ebering was testing a version with multiple spectral weapons (!!). -------------------------------------------------------------------------------- 49d2223b27 | gammafunk | 2020-12-29 05:11:49 -0600 Tweak boulder beetle rolling AI Boulder beetles currently continue rolling even if they don't have a viable move, which leads to them rolling in-place behind monsters or damaging clouds. This does confer a benefit to the monster should a viable path open up before the roll enchantment expires, but is counter to the player expectation that rolling implies to movement. This commit has boulder beetles stop rolling if they have no viable move, and likewise prevents them from attempting to roll if there is no viable move. Although this is a slight nerf to boulder beetles, they're quite worthy foes already. This implementation uses the monster tracking info use by thorn hunters, specifically tracking what our next viable move is. It would be ideal to have better fidelity about this move information, since it doesn't necessarily contain the move a monster would end up choosing. A later codepath ends up trying a backup move location if current choice proves unviable, but we don't have access to this data. -------------------------------------------------------------------------------- 978f32097b | wheals | 2020-12-29 13:03:34 +0200 Clarify AF_CONFUSE's confusing flavour AF_CONFUSE, when combined with AT_SPORE, represents a cloud of confusing spores that cause confusion when breathed in. Otherwise, it is simply a magical effect that causes confusion. Fixes #1385 -------------------------------------------------------------------------------- dd5fdbaec6 | wheals | 2020-12-29 12:58:38 +0200 Remove a confusingly redundant function. -------------------------------------------------------------------------------- 814068fe0c | wheals | 2020-12-29 12:27:21 +0200 Add some periods. -------------------------------------------------------------------------------- 4083c211ab | advil | 2020-12-28 14:38:29 -0500 Mark an ossuary entrance as transparent Resolves #1639 -------------------------------------------------------------------------------- 6fff606423 | advil | 2020-12-28 14:13:37 -0500 Transparency fixes for a kennysheep vault (12426) It lacks an @, so when marked as opaque could generate with the single door not connected. -------------------------------------------------------------------------------- 3ff7017067 | paul | 2020-12-28 20:27:40 +0200 Add a flashy Wu Jian overflow altar vault This vault is a nod to a classic 70's Kung Fu flick called Five Deadly Venoms. The titular characters of the movie have nicknames and martial arts styles that are reasonably well-represented by existing monsters and tiles in DCSS and thought Wu Jian deserves a fancy Lua'd up altar like some other deities! [ Committer's note: Closes #1660. Set overflow depth appropriately. ] -------------------------------------------------------------------------------- 4dcb31f9f6 | advil | 2020-12-28 13:12:40 -0500 Re-conditionalize quiver redraw (wheals) I'm not sure why this `if` got removed, but it might have just been an accident during testing. -------------------------------------------------------------------------------- b0746d5dc1 | advil | 2020-12-28 13:01:16 -0500 Fix macro menu handling of unprintable keycodes This is an attempt at some minimal fixes for this menu; anything more ambitious will need to happen not during a feature freeze. Keycode munging under the hood is a complete mess; this commit tries to work around what's there with only minimal changes, rather than rewriting everything. Main changes: * Print readable names of many unprintable keycodes as menu hotkeys and in macro editing. * Fix an issue where some ancient numpad handling code would interfere with ncurses handling of F1-F4. This has been wrong for a very long time and was hard to address without knock-on effects; for now webtiles still uses the wrong keycodes (which mistakenly got reified in key-conversion.js) and they are translated internally. There's also fixup code which translates wrong keycodes in a macro file into the correct ones. * Add a macro editing mode where you can enter a keycode by number, as a last resort for console keycode editing. (This menu should be changed to let arrow keys select an item as a better alternative to this.) This is triggered by hitting \ at the entry prompt (so to set a macro for `\` you now need to do this at the menu or by keycode). * More consistently print keycodes along with whatever printable symbol there might be for a keycode. * Add a bunch of comments documenting weirdnesses in this underlying code. Some remaining flaws: no handling for alt in SDL. Keycodes for many keys are inconsistent across build targets and should possibly be normalized. For weird keycodes, SDL sometimes prints surprising character names. The windows code here is a shot in the dark (but I will test before release). The macro menu followup UI is now even more complicated. -------------------------------------------------------------------------------- da768c6ff3 | amcnicky | 2020-12-28 19:50:47 +0200 New mini vaults Vaults in this collection: amcnicky_mini_pool_small A decorative minivault containing a small randomised pool amcnicky_mini_rare_corridor_liquid A rare vault which allows the dungeon generator to, on occasion, produce a corridor surrounded on either side by liquid, perhaps to be read as either a bridge over liquid below, or as a passageway between the liquid's depths. amcnicky_mini_corridor_feature A decorative minivault containing a feature lined corridor amcnicky_mini_pool_medium A slightly larger version of pool_small that can generate monsters, and also appear ruined when generated within Depths. [ Committer's note: Closes #1544. Tweaked and trimmed, dropped the beach vault submitted with this patch, adjusted depths and weights. ] -------------------------------------------------------------------------------- 2f95e4c8fc | amcnicky | 2020-12-28 19:50:47 +0200 New simple and small arrival vaults Vaults in this collection: amcnicky_arrival_double_pillar A medium sized arrival vault featuring two highly randomised pillars and a selection of entrance/exit possibilities amcnicky_arrival_single_pillar As above, but on a smaller scale amcnicky_arrival_feature_with_door A double-entrance arrival vault with the potential for many different hints of flavour in the feature tile amcnicky_arrival_flooded_fountain The player enters the dungeon through an entry room containing a number of fountains. The downstairs of an abandonned bath house? A door in the back of an ancient fountain temple? One of the fountains is broken, and the player sees a corresponding pool of water amcnicky_arrival_choice A vault intended to off the chance for an interesting tactical choice. Should the player be chased back into this room by an early enemy, there are no pillars to dance around. Instead, the player must either stand and fight, or take a risk with the shaft to escape. amcnicky_arrival_underground_garden A more decorative vault, the player enters the dungeon by passing through an underground garden. Was the dungeon entrance hidden within a forbidden forest? amcnicky_arrival_blooded_trapdoor The player is presented with a randomised pillar, two possible connections to the dungeon, and large smears of blood surrounding a solitary trapdoor. What became of the last player who tried to use that trapdoor? amcnicky_gap_in_the_tavern_cellar The player enters the dungeon via a secret room behind one of the water features in an unspecified room. The vault tiles make this connection through to the dungeon of zot appear almost intentional? amcnicky_arrival_wind_blow Which entrance to choose to the great dungeon of Zot? Which way does the wind blow? amcnicky_arrival_abandoned_market The player enters the dungeon of zot through a mysterious back alleyway amongst an abandonned marketplace. [ Committer's note: Closes #1542. Small tweaks to shrink some sizes, get the "story" of the vault in view on spawn, tactical checks, redundant doors. ] -------------------------------------------------------------------------------- 58195e7017 | amcnicky | 2020-12-28 19:50:47 +0200 Two new altar vaults The vaults added are as follows: amcnicky_altar_gilded A simple altar layout with (the potential for) a nice monetary surprise. amcnicky_altar_lugonu_corruption Lugonu has entered the dungeon! This vault iterates on the initial submission idea of 'dungeon corruption' which could generate in many branches and represents the fist of Lugonu smashing into the terrain. Current monster spawns use Lurking Horrors to bring their fairly novel tactical implications beyond just the abyss. [ Committer's note: Closes #1538. inner_sanctum not taken as altar vaults are meant to place altars. It might be ok as a float/mini monsters type vault since the altar is more decorative. Tweaked lugonu_corruption to tone down the number of lurking horrors, have more variability in its 'corruption', and be approachable and connected from all sides. ] -------------------------------------------------------------------------------- d68fa41eda | wheals | 2020-12-28 13:14:11 +0200 Defer redrawing the wield display if travel_delay = -1 (#1626) Rather than cancelling the redraws entirely. Does the same thing with the other displays as well, in case similar bugs happen in the future. Fixes #1626 -------------------------------------------------------------------------------- d8756d56bc | Aliscans | 2020-12-28 13:04:26 +0200 Forbid DEBUG_TRAVEL without DEBUG_DIAGNOSTICS Put a "#ifdef DEBUG_DIAGNOSTICS" statement around the #define for DEBUG_TRAVEL, as this only does anything useful when DEBUG_DIAGNOSTICS is set. [ Committer's note: Split up code-review revisions and squashed them into the relevant commits. Made a few small tweaks also. Closes #1608 ] -------------------------------------------------------------------------------- fec9e0e4c5 | Aliscans | 2020-12-28 13:04:26 +0200 Don't set greedy_place for items in hostile areas As things stood, if autopickup was off and there was an unexplored space behind a runed door, _explore_find_target_square() called pathfind() once to no avail, called it a second time with try_fallback set, and made that the target. If autopickup was on, it called pathfind() once, cleared it (because it had a negative travel_point_distance[] value), and printed a "Partly explored" message. This patch prevents greedy_place from being set if travel_point_distance[x][y] is negative, so the square containing the item can become the target. -------------------------------------------------------------------------------- e99fe26798 | Aliscans | 2020-12-28 13:04:26 +0200 Expand the behavior of travel_open_doors Add a value for the travel_open_doors option which means that autoexplore & travel plan routes which don't go through closed doors where possible (in the same way it always does for runed doors). The "actually stop travelling" code has moved from movement.cc to travel.cc. travel-open-doors-type.h lists the values, with "true" and "false" mapped to more descriptive words for the previous behaavior. A new template MultipleChoiceGameOption is implemented to support this behavior, old multiple choice options should consider being ported to it. -------------------------------------------------------------------------------- 8d272cd76c | wheals | 2020-12-28 12:20:23 +0200 Fix a stray text cursor showing up on local tiles The root cause of most of these problems is using the same construct both for text prompts and for highlighting squares on the map. Untangling the uses, however, is not simple. -------------------------------------------------------------------------------- 224bf8e84e | wheals | 2020-12-28 12:20:23 +0200 Unify the two cursors on local tiles X somewhat. Clicking on a place on the map will move the map cursor to there. Clicking on the map cursor will travel to there. It would be nice to unify them entirely, but the problem is that X automatically centers the map around the map cursor, so moving the mouse will shake around the view erratically. -------------------------------------------------------------------------------- e2a0e31ab3 | Nicholas Feinberg | 2020-12-27 16:51:13 -0800 Show LRD damage -------------------------------------------------------------------------------- d4ea5fece3 | Nicholas Feinberg | 2020-12-27 16:42:15 -0800 Hackily fix Zot status description (vt) Don't claim Zot is about to consume you when it's 15k turns away. -------------------------------------------------------------------------------- 2022570bc9 | nikheizen | 2020-12-27 18:05:51 -0600 Slightly increase density of winding_woodlands Increase the density of 5x5 rooms from averaging slightly less than one 0 per room, to 1.5. Increase the density of 5x15 rooms from averaging two 0 per room to three. winding_woodlands vaults would often spawn with very few monsters in the connector rooms, and most of the threat would be spilling out from the center subvaults. This makes them a little denser, while still allowing the possibility of empty connector rooms occasionally. -------------------------------------------------------------------------------- d90998e373 | nikheizen | 2020-12-27 18:05:51 -0600 Fix a couple subvault errors The 5x15_jagged subvault was 5x14, and thus could create some vaults where part of the vault was only accessible by stairs, if the whole vault wouldn't be vetoed. The 15x15_boxy_spiral subvault had one of its exits misaligned by 1, causing it to have buggy placement occasionally. -------------------------------------------------------------------------------- c6dd0926df | gammafunk | 2020-12-27 16:53:23 -0600 Reimagine Eringya's Noxious Bog (hellmonk,ebering) The combined damage and movement/combat debuff of the bog is interesting, but the spell's current approach of applying it in the caster's wake makes the spell ineffective and somewhat difficult to use. The additional turns spent moving to set up the effect incurs another cost for a spell that's already damage over time. Obviously we could increase the strength of the effect, but an alternative was proposed by hellmonk: have the spell affect many cells, but only those not adjacent to solid features. Being next to a lot of walls is generally helpful for the player, so this requirement adds a different kind of cost, which is that the player has to be near comparatively open areas. This is positional, giving the spell a natural power scaling based on how open the player's position is, and doesn't require kiting-like movement. This commit changes the spell to transform all areas into bog that are within a range of 4 and not adjacent to solid features, also excluding the player's position. The transformation happens instantly and reverts when the duration expires, with recasting not allowed until then. The requirement that the feature have a solid floor remains (e.g. no deep water or lava, but shallow water is fine). Additionally, only cells visible via not-translocation-blocking LOS can be transformed, and likewise we require that any transformed cell have all its adjacent cells be visible. The second requirement is to prevent an information leak by either using the targeter or casting the spell, either of which would be a tedious exploit. The duration is unchanged from before, as it seems reasonable for a damage-over-time spell like this, but both this and the range of effect of four will be reevaluated after more play-testing. If we want to incorporate spell-power more, we one possible change is to increase the range with spell-power, starting from a lower range at low power. We have to strike a balance between the high level of the spell and its need to be sufficiently strong and the fact that it can affect so many more cells as we increase the range. The spell has a static targeter showing potentially affected cells. I've updated the casting noise from 2 to 6, which I assume was unintentional, since we generally always have this noise value be the spell level. The spell description is also updated. I've moved the spell from spl-selfench.cc to spl-damage.cc, since this spell is really a damage spell at its core, is similar to spells like Frozen Ramparts or Summon Forest that not in spl-selfench.cc. -------------------------------------------------------------------------------- 055914a7a2 | wheals | 2020-12-27 21:16:43 +0200 Make X on local tiles slightly more useful Make the cursor automatically move around with your mouse. Also, show descriptions of features that are outside LOS_RADIUS but in your map knowledge. -------------------------------------------------------------------------------- 98a0ced166 | wheals | 2020-12-27 21:16:43 +0200 Restore the cursor on offline windows tiles targeting (#12424) -------------------------------------------------------------------------------- 95e395e029 | Nicholas Feinberg | 2020-12-26 07:59:20 -0800 Don't blink after death (nee) God bless Felids. -------------------------------------------------------------------------------- 447262cd64 | gammafunk | 2020-12-26 09:33:48 -0600 Fix a typo (Renan) -------------------------------------------------------------------------------- 197f7f9d65 | Neil Moore | 2020-12-26 09:15:08 -0500 Fix no longer fix grammar (realallion) -------------------------------------------------------------------------------- d376ed14c5 | advil | 2020-12-24 16:26:56 -0500 Add a bit more control to fire_order This is a bit of a filler commit; I think fire_order needs to be restructured in a more general way, but for now at least provide some coarse control over the order of action types when cycling the quiver. This commit also lets players remove an entire type from the cycle order (which has been particularly requested for abilities). Because game start autoquivering uses `cycle()`, this commit also affects that, so for the people who find it objectionable that Berserk autoquivers on a Be start, this gives them a way to prevent that. Eventually I think this would be *much* better as an in-game interface along the lines of spellbook hide/show. -------------------------------------------------------------------------------- 510840ca0f | Nicholas Feinberg | 2020-12-24 10:02:05 -0800 Make Irradiate check AC and bump damage Not checking AC was an oversight in the initial implementation that slowly transmuted into a feature. Well, let's transmute it back. I've made the damage a bit higher to compensate. Per a suggestion from hellmonk, I've also reduced the number of dice that are rolled, which reduces the predictability of the spell a bit. -------------------------------------------------------------------------------- 5ef3bed4d9 | advil | 2020-12-24 12:45:34 -0500 Add an action inventory selector for Q* Now, only the the non-tossing actions are shown on Q*, with an extra * to toggle the full inventory. This commit also: * handles a bunch of corner cases with few or no actions better, especially for felids * adds % as a secondary shortcut for items. This is because macroing Q* can lead to weird cases when there are no quiverable items, because * doubles ctrl; in the worst case if you macro Q to Q* and press QQ you get a quit prompt. -------------------------------------------------------------------------------- ab5e8f747a | advil | 2020-12-24 11:29:29 -0500 More eating remove -------------------------------------------------------------------------------- 1209ec82b9 | nikheizen | 2020-12-24 00:31:24 -0600 Don't guarantee nzn_prometheus_bound The map was a PLACE: instead of a DEPTH:, fix this, and move the vault to shoals.des, since it only appears there anyhow. -------------------------------------------------------------------------------- 060ceda6a5 | wheals | 2020-12-23 17:49:54 +0200 Unify movement checks for barbs/ice spells Incidentally fixes #1647 by putting them in the same code path as checks for traps/dangerous terrain/etc. -------------------------------------------------------------------------------- ad6db7abb9 | wheals | 2020-12-23 16:59:29 +0200 Give centaur enemies their bardings back (#12420) Now that barding is adaptable enough for two species, why not three? -------------------------------------------------------------------------------- 32fcee6e61 | wheals | 2020-12-23 16:53:53 +0200 Fix Zin wrath Accidentally broken when the hunger effect was removed. The situation remains where you get slightly less bad wrath by having only bad mutations. This seems like its own punishment. Fixes #1643 -------------------------------------------------------------------------------- 09726b21b3 | wheals | 2020-12-23 16:39:38 +0200 Show correct cast messages when a spell is redirected against the caster The second clause didn't seem to be doing anything, and I tested a bunch of different monsters and didn't notice issues. Still, it's worth keeping an eye out to make sure this doesn't cause other monspeak issues. Fixes #1652 -------------------------------------------------------------------------------- 792193eb12 | wheals | 2020-12-23 16:11:11 +0200 Grammatrise a Frozen Ramparts message Fixes #1635 -------------------------------------------------------------------------------- 895fbd4b88 | Nikolai Lavsky | 2020-12-23 16:07:02 +0200 Display threat levels on the /polymorph targeter As a followup to 6ee96136, this commit colourizes the names of monsters on the /polymorph targeter to show their potential threat level. This gives the player a quick way to see if polymorphing a monster is a good idea. -------------------------------------------------------------------------------- ae853a1889 | wheals | 2020-12-23 15:46:08 +0200 Even more food removal (#1654) Featuring bonus rod removal and carrying corpses removal! Fixes #1654 -------------------------------------------------------------------------------- 311257cc98 | wheals | 2020-12-23 15:39:20 +0200 Checkwhite -------------------------------------------------------------------------------- 1cd98bb67f | wheals | 2020-12-23 15:39:20 +0200 Put the cursor back in the X menu on Windows (#1536) See the comments on the PR. As aidanh mentions, cursor_control is a blunt force instrument that needs to be manually turned on and off here, but my naive attempts to enable the cursor only when the map cursor is being drawn didn't work -- it seems that it gets redrawn at odd moments, and that ends up wiping the cursor away. I didn't bother to make use_fake_cursor work here, because it already was broken for the direction chooser anyway. If we ever hear about someone using it on Windows, we can fix it, but it seems like it only fixes a Unix-specific problem. I'd wait for a more thorough fix, but this is a game-breaking bug on Windows console and we have a release coming up. Fixes #1536 This also incidentally fixes a related problem where the cursor appeared when opening up sub-menus from the direction chooser. -------------------------------------------------------------------------------- f5cede1358 | wheals | 2020-12-23 15:39:20 +0200 Fix a warning when compiling for Windows -------------------------------------------------------------------------------- b26aebe080 | Nikolai Lavsky | 2020-12-23 14:05:50 +0200 Update Drain status description After 4cbea82f, Drain temporarily reduces max HP instead of skills. -------------------------------------------------------------------------------- d3bf34ba6f | Quipyowert2 | 2020-12-23 11:00:08 +0200 Pass some parameters by reference According to Cppcheck, this is "usually faster" than passing by value and "recommended in C++." -------------------------------------------------------------------------------- 1a551d6a14 | advil | 2020-12-22 19:05:21 -0500 lint -------------------------------------------------------------------------------- bed68805ea | advil | 2020-12-22 18:45:59 -0500 Refactor quiver redraw state This fixes some bugs where the launcher quiver wasn't getting properly redrawn, but also provides some abstraction over the raw booleans stored on `you`. -------------------------------------------------------------------------------- 4a6b093f05 | advil | 2020-12-22 18:45:59 -0500 Add a basic menu to macro/keybind editing Especially for online play, it's extremely annoying that there's no way to view current macro/keymap mappings without going key by key. This commit solves that by putting a real submenu behind the `~` options, letting you see all current macros/keybinds (of the same type) at once. It also does some light refactoring of how some of the options are chosen, and will involve an extra keypress for new macros (or more for keys that are used in the menu ui). This menu is very much at the minimal viable ui state: I didn't widgetify anything except the key/macro selection part, and there's a *lot* more one could do with this to give it a real ui. However, for now it's a net improvement. -------------------------------------------------------------------------------- 0398aca569 | gammafunk | 2020-12-22 11:23:57 -0600 Some fixes and cleanups for winding_woodlands Fix the glyphing for nzn_winding_woodlands_large and nzn_winding_woodlands_stair_trap, which had some incorrect subvault glyphs that would never let the maps successfully place. Empty the default-depth before the subvaults are defined so they won't inherit the prior default depth used by the parent vaults. Parent vaults that tried to place in Swamp weren't able to find viable subvaults, since the default depth doesn't include the Swamp branch. Having an empty depth will allow the subvaults to place anywhere the parent map requires, and the parent map will still be subject to the restrictions of the previous default depth at the beginning of the file. Finally, clean up some NSUBST and SUBST syntax. Closes #1610. -------------------------------------------------------------------------------- 0da4609bc0 | gammafunk | 2020-12-22 11:22:51 -0600 Some minivault adjustments For nzn_sisyphean_effort and nzn_prometheus_bound, have the placed corpse on a delayed decay instead of never decaying. For the Prometheus vault, place a Book of Fire instead of a Book of Flames, since the former is a more appropriate reward in Shoals and just as thematically appropriate. For nzn_life_drinkers, simply clean up some SUBST. This vault could place as an overflow altar with low weight for D:8-9. In Vaults, ideally it would be tagged as a vaults room so that it could place successfully more often. It works fine as a standalone altar vault altar and can successfully place in Vaults per wizmode tests, so I can save both potential changes for some time before the 0.26 release. -------------------------------------------------------------------------------- 7ffe4a26f1 | gammafunk | 2020-12-22 11:18:06 -0600 Some adjustments to new overflow altars For nzn_hepliaklqana_mist_gate and nzn_wu_jian_contemplation some minor simplifications and spacing cleanups. For nzn_makhleb_speed_demon, replace the executioner with a sixfirhy, since an executioner is basically worse than any possible 8 spawn for D:7-D:11. A sixfirhy is quite fast and dangerous for these same depths, but not so much that no character would reasonably open the vault to get to the Makhleb altar. For nzn_overflow_gifts_of_might_and_magic, revamp the Trog-themed weapon to add enchant at the earliest depth and have Trog-themed brands (so vorpal, flaming, or antimagic) but no enchant at subsequent depths. This way the Trog item offering isn't so meagre compared to the Sif item, which gifts a small number of low-level spells. -------------------------------------------------------------------------------- 03f78f3749 | gammafunk | 2020-12-22 11:18:06 -0600 Some changes to the new Swamp end vault For nzn_swamp_witches_coven, add deep elf mages to the "wizard" set and reduce the weighting for spriggan druids, giving their previously double weight to the mages and to the wizards that previously had half weight. Druids have a somewhat harder time in this vault since there are so few trees, so it's best to not place so many of them. For the inner areas that randomly get shallow water, land, or monsters, increase the amount of land by 50% and decrease the amount of water. This vault previously placed an awful lot of water without very much land. Some tests with the new weight shows that there is still mostly water with relatively few tiles safe from trees, but it's not going to be quite so hard to find an area to fight inside the vault. Otherwise the incentive is to clear nearly all of the vault from outside. Also, make the inner pentagram walls use special dark stone wall tiles that more strongly suggest a demonic theme, using magenta for these walls in console. This is purely a cosmetic change with no affect on gameplay. Finally, make the central granite statue always use a demonic-themed tile. -------------------------------------------------------------------------------- 0369a3af90 | gammafunk | 2020-12-22 11:18:06 -0600 Some Swamp vault fixes and cleanups Make vault statements in a number of vaults have aligned spacing, and remove no_item_gen where not necessary. Although placing additional level monsters in a vault can make it harder and dilute its theme in some cases, no_item_gen doesn't generally affect these aspects. It's better to allow level item generation to be natural when possible and have fewer spoilers. For nzn_swamp_weyward_sisters, expand its placement from Swamp:3- to Swamp:2 and give it normal weight. Although a few fenstrider witches is scary, these monsters place with decent weight from Swamp:1 as it is. Put the peaceful human behind a runed door, since otherwise it will open the door and probably die while attacking one of the witches. Make the placed corpses and skeletons all have a delayed decay like we usually do for these vault corpses. Finally make some slight syntax cleanups. For nzn_swamp_blast_mining, reglyph to use no predefined glyphs and simplify the monster placement logic. The previous logic was more complicated didn't quite agree with the stated averages in the comments. Use two NSUBST to simplify the logic instead of a SHUFFLE and two SUBST. For nzn_swamp_dancing_lights, remove the down-weighting, as this is not a particularly nasty vault, and simplify syntax. -------------------------------------------------------------------------------- 52eb5f666a | gammafunk | 2020-12-22 11:17:59 -0600 Some cleanups to a ghost vault For nzn_ghosts_randoct, rename it to nzn_ghost_randoct for consistency with our other vaults and reglyph it to not use any predefined glyphs. Simplify some shuffles into substs, then combine related statements into one line. -------------------------------------------------------------------------------- 645eec8e50 | nikheizen | 2020-12-22 11:09:47 -0600 Add one (1) ghost vault Per request of gammafunk, a nasty ghost/transporter vault which becomes nastier and deeper depending on branch/depth. -------------------------------------------------------------------------------- 23317d3c2e | nikheizen | 2020-12-22 11:09:47 -0600 Adjust the weight of a couple nzn vaults speed_demon should be vanishingly rare since most folks won't be opening it. the swamp exclusive winding_woodlands center vault has been made twice as likely to accomodate for how rarely a valid vault for it to be selected in will even place. -------------------------------------------------------------------------------- 11aabd67dd | nikheizen | 2020-12-22 11:09:47 -0600 Add 4 swamp vaults and one new swamp endvault weyward_sisters: A trio of witches. One captures the men, one cooks them, and one gives their bones so that the mushrooms may grow. stair_ambush: Does what it says on the tin. blast_mining: Bloated husks have some practical applications. dancing_lights: A trio of will-o-the-wisps with accompanying fog machines for that spooky swamp feeling. All of these aside stair_ambush are weighted 5 either because they are gimmicky (blast_mining) or are quite deadly. witches_coven: A standard coven (or baker's dozen) of witches, congregating around the decaying rune and summoning demons in an inverted pentagram-shaped facility. -------------------------------------------------------------------------------- 3f1a12a7b5 | nikheizen | 2020-12-22 11:09:47 -0600 Winding Woodlands: forest-themed subvault maps Winding Woodlands are a set of maps which heavily utilize subvaults and have a woodland/forest theme (when the subvaults aren't simple geometric shapes). As of this commit there are 8 maps with 41 subvaults for said maps to draw from. -------------------------------------------------------------------------------- 5f9ebbf6ab | nikheizen | 2020-12-22 11:09:47 -0600 Add two vaults based off of Greek Myth (Silurio) The two myths referenced are Prometheus Bound and Sisyphus. Even if the intention of the flavour misses, these still have enough "anonymous" flavour to be somewhat interesting. -------------------------------------------------------------------------------- d5a4c4202e | nikheizen | 2020-12-22 11:09:47 -0600 Add 7 altar vaults - hepliaklqana_mist_gate: simple thematic hep vault where the player must peer into the past - makhleb_speed_demon: only the quickest warriors deserve makhleb's favour. bit of a meta reference to speedrunning the game. idea stolen from hellmonk - wu_jian_council_hall: simple wjc vault where the likeness of the council members look down upon their altar - wu_jian_contemplation: an idyllic shrine whose maintainer is now absent - overflow_gifts_of_might_and_magic: dual trog/sif overflow lightly themed on their shared attribute of gifting - overflow_masters_of_martial_movement: dual WJC/uskayaw mini. prove your worthiness by dancing around this boulder beetle - life_drinkers: vampiric philosophers have long pondered on makhleb and the shining ones penchant for healing devout worshippers when they kill -------------------------------------------------------------------------------- 1e22815bdb | gammafunk | 2020-12-22 11:09:47 -0600 Make a lua vault function more widely available Move random_item_def() to dungeon.lua, so it can be used by vaults other than ghost vaults. A subsequent commit will use this function for an overflow altar vault. -------------------------------------------------------------------------------- 660b328956 | gammafunk | 2020-12-22 11:09:37 -0600 Don't let Gauntlet room monsters pickup loot (Yermak) Now that all monsters generate awake in Gauntlet, certain intelligent monsters might pick up the loot they find before the player first sees it. This was also possible before they generated awake, for example if noise from combat woke up monsters in other rooms, but now it's especially common. In any case, it was always intentional that players would get full information about the loot in rooms for decision-making purposes and that they'd get access to those rewards without e.g. monsters using consumables. This commit marks all room loot as no_pickup. The minotaur's loot pile does not have this tag, so this monster still has its access to some choice gear. It would be ideal if no_pickup could be set vault-wide for items and possibly also using KMASK. For now, I've modified all item statement to programmatically add "no_pickup" in a way that should be pretty resistant to breakage. I had to redefine * and | as "star_item no_pickup" and "superb_item no_pickup" using KITEM, and have likewise done this for the % and $ glyphs, even those are not currently used. -------------------------------------------------------------------------------- 3780a7a11b | advil | 2020-12-21 21:45:05 -0500 Remove an island from due_jungle_book (12364) This island is kind of pointless as far as I can tell, because the anaconda can travel through water. Is it possible that this vault precedes b98e291e80b1? -------------------------------------------------------------------------------- 0dbc5c1aff | advil | 2020-12-21 20:39:43 -0500 Don't feel safe on hexers trapped in grates (12371, #1651) If a monster had only non-damaging ranged spells and was trapped in grates (or water, etc), this code would register that the monster could not hurt the player. This is narrowly true, but because this function is used for i_feel_safe, the monster would not count as a threat for the player under various broader conditions, notably, autotravel. The specific buggy case that has come up in several reports is draining eyes, which don't damage the player but do of course drain mp; in other circumstances they register as dangerous by having a foe path to the player. In 0.25, `explore_auto_rest` became default true, and so if the player autotraveled into los of a trapped draining eye, they would enter a perpetual rest + drain cycle because i_feel_safe returned true, running up the clock until they interrupted it. This is even worse for players who have a force_more on the drain message (e.g. ones using HDA's rc as in #1651) because it is hard to interrupt the loop. It's also compounded by the lack of hunger: in 12371 the player got out of the autoexplore loop when they became hungry, which can't happen any more. The change is to construe "hurt" for this function's purposes more broadly, to include any dangerous ranged spells regardless of whether they are attacks; it's used only for autoexplore and as a minor check on tension. It's possible this will stop autoexplore incorrectly in some cases I haven't thought of, but it can be fine-tuned from here. Resolves #1651 -------------------------------------------------------------------------------- f5f8a83f67 | advil | 2020-12-21 14:46:09 -0500 Change the quiver verb for tremorstones "Throw" was more consistent with a previous version of tremorstones' flavor, and also confusing together with actual throwing. -------------------------------------------------------------------------------- 0927c67384 | advil | 2020-12-21 14:46:09 -0500 Allow quivering evokables from inventory -------------------------------------------------------------------------------- d6649fcddf | advil | 2020-12-21 14:46:09 -0500 Fix some ammo_to_action logic (12414) -------------------------------------------------------------------------------- fb7421ae72 | wheals | 2020-12-21 21:16:06 +0200 Avoid a crash when using OTR and worshipping Beogh -------------------------------------------------------------------------------- 244d27527d | advil | 2020-12-21 13:31:14 -0500 Remove some broken local tiles clicking stuff This has been broken in an unusable way since c3daa31c0c (about two years) because of the incorrect use of testbits, and even fixing that these features are still pretty unusable in my testing. They are also now somewhat redundant with the quiver features. I think something like the previous behavior of ctrl-click and alt-click could be a good thing to have, but it needs to be rewritten (perhaps using the actions api) and restructured to be less redundant. One idea in the long run might be to have these extra click combos access more quivers, or quivers that are spell and evocable specific (similar to the launcher quiver). Given how broken this has been, I'm just removing for now, the main place to notice a difference will be that ctrl-click on the player will now not lead to broken/confusing behavior with targeted spells. There's shift-click to cast/evoke from the new quiver, and also still a click-to-cast interface in the sidebar for local tiles. -------------------------------------------------------------------------------- 5068850a46 | advil | 2020-12-21 13:20:18 -0500 Fix a bunch of local tiles clicking stuff We got a report that e42c0a684a0 broke click-to-throw. I'm still not sure what this report was about, but on looking into this, I found any number of things broken about clicking-related stuff. Some of this is related to quivers, some is older. This commit fixes at least the following bugs: * The tooltip info was a mess and often wrong * Some of the conditions for whether to report "Travel" tooltips were out of sync with the travel code * open door tooltips were being calculated wrong * quivers were being triggered, but by passing key commands to the fire interface, rather tha by setting a target directly * On shift-click to cast with too low mana, a bunch of key errors were printed * primary attacks with launchers weren't handled correctly, and only triggered movement -------------------------------------------------------------------------------- 7d2dc893a1 | advil | 2020-12-20 19:49:18 -0500 Do basic deduplication when rendering tile overlays This is very minimal: it just prevents stacking completely adjacent identical overlays. This is intended to handle cases with large numbers of bennus (e.g. in a zig) where many, many explosions can get stacked on top of each other; in these cases, the number of overlays was easily reaching the cap (20) which causes a crash. Since layering these overlays does nothing, simply prevent it. If this system is ever used to layer overlays with alpha values, this may have unexpected effects, but to my knowledge it isn't. -------------------------------------------------------------------------------- ef23d1325b | gammafunk | 2020-12-20 13:51:32 -0600 Incredibly, another food removal cleanup Need a TAG_MAJORed removal of the food glyph for the other character set. -------------------------------------------------------------------------------- 35d1ec1c0b | gammafunk | 2020-12-20 12:36:32 -0600 More food removal cleanups The previous commits missed food items in header files needing removal or TAG_MAJOR. Comments related to chunks cleaned up to avoid implying that the chunk item still exists, however leave in terminology using "chunks" for calculations based on monster size for purposes of blood and gozag gold splatter. I've updated MSVC, Xcode, and Android project files to remove references to food-related source files that no longer exist. Hopefully these have been done correctly, but that will need confirmation from people who use these files. -------------------------------------------------------------------------------- b172a1b426 | gammafunk | 2020-12-20 07:44:43 -0600 Add a TAG_MAJOR for a food-related enum value -------------------------------------------------------------------------------- 8e97bb7ff4 | gammafunk | 2020-12-20 07:02:48 -0600 Make a function static -------------------------------------------------------------------------------- bb79e0bfc8 | gammafunk | 2020-12-20 06:53:18 -0600 Some cleanup related to food removal Remove food as a choice for the &o command, update comments to remove references to food, and add TAG_MAJOR to various bits of food code. -------------------------------------------------------------------------------- e73896bf99 | randomMesh | 2020-12-20 03:52:37 -0800 Fix link to quickstart.md -------------------------------------------------------------------------------- e9770dfcb6 | Nicholas Feinberg | 2020-12-18 21:46:06 -0800 Show wand damage in item descriptions -------------------------------------------------------------------------------- 5f66e2dd50 | advil | 2020-12-18 13:37:49 -0500 Skip `cancel_ice_move` prompt with no monsters in los This simplifies one case where this prompt is a bit annoying; I guess these prompts could alternatively be made configurable. -------------------------------------------------------------------------------- 3ccbe7bdff | Nicholas Feinberg | 2020-12-18 09:51:50 -0800 Fix Chei's Zot slowing (Ge0ff) -------------------------------------------------------------------------------- c5df7fbe6a | Edgar A. Bering IV | 2020-12-17 11:31:41 +0200 Revise the sword of Power (kate-) The variable plus of the old SoP encouraged swapping at low health, and while getting a giant plus (+27!) could be fun with berserk or Ely, the lack of a brand and declining plus at lower health made it not that attractive. Instead, the sword becomes a fixed plus +5 vorpal greatsword that fires a "sword beam" reminiscient of the old bolt of inaccuracy on a chance depending on the wielder's current health. While this still falls off at low HP, ones HP must be very low indeed for this to become a bad weapon. The numbers could probably use some further tweaking. -------------------------------------------------------------------------------- ff409d549a | Edgar A. Bering IV | 2020-12-17 11:31:41 +0200 Tweak some use of second person -------------------------------------------------------------------------------- 3270b6ecf3 | Edgar A. Bering IV | 2020-12-17 11:31:41 +0200 End the glaive of the Guard's specter on unwield -------------------------------------------------------------------------------- 3318b609a0 | Goratrix | 2020-12-17 07:19:20 +0200 Small corrections in the manual Replace Centaurs with Palentongas in size description, change WL to Will, remove note about ghosts not using stairs, clarify traps, add max hp to monster description. -------------------------------------------------------------------------------- 8117e51712 | advil | 2020-12-16 22:08:42 -0500 Improve a corner case for `F` When `F` is pressed with no throwables, the game opens the full inventory. This seems (maybe) sensible, but it doesn't really cue that it's done anything out of the ordinary, so this commit removes the special case from invent.cc and changes the menu prompt to try to indicate this. -------------------------------------------------------------------------------- e42c0a684a | advil | 2020-12-16 22:08:42 -0500 Separate launcher from throwing actions The main reason for this is so to differentiate throwing stones from launching stones, leading to better behavior on switching between a sling and melee weapon. It has the slightly odd result that you can quiver stones for throwing while wielding a launcher, which used to be impsosible, but this seems mostly harmless? This commit also removes the ranged side of auto_switch. As far as I can tell, this only ever worked when the quiver was empty, making it almost entirely useless even before the quiver improvements to launching. Now, there's always a way to fire a wielded launcher regardless of quiver state. If someone can tell me there's a use case I am missing I can try to restore it. This option still works as before for melee weapons. -------------------------------------------------------------------------------- 46f0d4f399 | Nicholas Feinberg | 2020-12-16 17:32:09 -0800 Tweak a Ru message again (Dug) Probably someone else will come by in a moment and change this again. -------------------------------------------------------------------------------- 92de7bf30a | Nicholas Feinberg | 2020-12-16 17:21:27 -0800 Remove Ru's will (gressup) Rephrase a Ru message to avoid confusion with the Will stat. Missed this one in ebc406137e . -------------------------------------------------------------------------------- e913e73dd2 | Nicholas Feinberg | 2020-12-16 16:57:50 -0800 Add power_perc to lua table (advil) -------------------------------------------------------------------------------- a1b6d6fda9 | advil | 2020-12-16 17:29:20 -0500 Handle lack of quiverable actions better Don't let submenus work if they would be empty, and in the extreme limiting case, don't let the main Q menu work either. -------------------------------------------------------------------------------- b8f0b9b9d7 | advil | 2020-12-16 17:29:20 -0500 Allow quivering usk abilities with low piety This is very special case-y, but otherwise the non-stomp ones might as well not be quiverable. Possibly most religious abilities should work like this? -------------------------------------------------------------------------------- 624b3b4e76 | Edgar A. Bering IV | 2020-12-16 22:55:23 +0200 Give the cloak of Starlight a dazzling effect (amcnicky) This is a different take on the submission in #1572 to make the cloak of Starlight more interesting than a cloak with a few artefact properties and a nice tile. This commit removes the resist stack, but keeps the stealth malus and EV. In exchange it now grants a passive "Dazzle" effect: on one out of 5 dodges it attempts to blind the attacker, using the same code path and roll as dazzling flash at power 100. This puts it in contrast to the other unrand cloaks which grant their passive effect on hit. Closes #1572 -------------------------------------------------------------------------------- f92616641d | sdynet | 2020-12-16 22:55:23 +0200 Add spectral to the glaive of the Guard and adjust There are already two dual-brand unrands, but spectral is a mechanically distinct enough brand that a spectral+brand weapon doesn't crowd the space too much. Additionally, it's a nice throwback to old spectral weapon which worked on just about everything. This commit also strips the extra properties (other than AC) from the Glaive and lowers its plus. [ Committer's note: Closes #1598. Revised the patch to do the dual-brand and re-wrote the commit message. ] -------------------------------------------------------------------------------- d46cc9e92b | advil | 2020-12-16 14:07:03 -0500 Refactor your_talents somewhat Previously, to check if the player had an ability, you needed to construct the entire talents list and see if the ability is there. This separates out code that checks whether a player has an ability from your_talents so that it can be directly called in a less overkill fashion. There's further refactoring along these lines that would be possible, for god abilities in particular. This commit also tweaks some flight logic in a way that hopefully doesn't break it, but it seemed to be subtly wrong before. -------------------------------------------------------------------------------- c8f2f48a6c | advil | 2020-12-16 14:07:03 -0500 Add a hint about `f` for untargeted direction choosers I think it's otherwise not entirely obvious that you trigger these in the same way as targeted direction choosers. (Especially unclear for abilities that don't have a targeter yet.) -------------------------------------------------------------------------------- 80e58933c0 | Nicholas Feinberg | 2020-12-16 09:45:53 -0800 Display Frozen Ramparts damage Since this doesn't check AC, I think the delay scaling doesn't matter much. The displayed number being low hopefully won't mislead people too much... -------------------------------------------------------------------------------- faeb9f6368 | Nicholas Feinberg | 2020-12-16 09:45:44 -0800 Remove an unused function -------------------------------------------------------------------------------- 1040278a39 | Nicholas Feinberg | 2020-12-16 09:21:05 -0800 Replace spellpower bars with %s Spellpower bars are notoriously complex and unintuitive. They follow a hand-calibrated, strongly nonlinear scale (0, 10, 15, 25...?), which isn't particularly helpful to players. Why should anyone expect that going from .... ..... to #### ###.. would have the same effect on a spell's, well, power as going from #### ###.. to #### #####? One big reason for the nonlinear scale is to allow players to see progress at low spellpower without blowing up to a huge number of bars at high power, but there's a much simpler way to represent that. Let's just show the % of max spellpower instead. -------------------------------------------------------------------------------- be8bfa9c7c | Nicholas Feinberg | 2020-12-16 09:21:05 -0800 Remove rotten meat Farewell, obsolete message channels! -------------------------------------------------------------------------------- e48705eb17 | Edgar A. Bering IV | 2020-12-16 11:38:44 +0200 Make frozen ramparts end on movement Frozen Ramparts' combination of damage over time and area of effect made it one of the most powerful single school L3 spells. On its own, this isn't necessarily a bad thing as it is not overpowered as a L3 spell. However, FR encourages motion, which is an anti-synergy with another low level Ice spell: Ozocubu's Armour. This tension combined with FR's high power-level and the average overall high power-level of Ice spells motivates changing FR to end on movement (the exact rules are the same as Ozocubu's armour: blinking and getting trampled don't end it). -------------------------------------------------------------------------------- 01e01ebfeb | Edgar A. Bering IV | 2020-12-16 11:22:37 +0200 Make shaft self consistent with '>' on a shaft Formicids could shaft themselves with the ability and not apply barbs or break Ozocubu's armour, even though the ability description states they should be equivalent. This commit also re-orders barbs application and ice armour breaking for any floor_transition that triggers them, so that messaging is consistent with the message order when moving. -------------------------------------------------------------------------------- b90401cf1a | Edgar A. Bering IV | 2020-12-16 10:48:22 +0200 Prompt before ending Ozocubu's Armour (gammafunk) From conversations with gammafunk and also other players and my own experience, my cancellation of Ozo's armour by movement is more often inadvertent than an intentional decision. Add some ui ergonomics for this. I didn't add an rc option for whether or not to prompt: we already have the answer prompt lua callback, and from that players who want the prompt auto-answered one way or the other (or in a context-sensitive way) can configure the behavior to their hearts delight. -------------------------------------------------------------------------------- 6118521029 | advil | 2020-12-15 19:24:26 -0500 Cache quiver spell colors This is fixing the same issue as 64875d052978. Like enabled status, quiver color indirectly calls spell_uselessness_reason, which for beam spells, can have weird side effects if triggered at the wrong time. In the particular crashes I was looking at it appears that there was a fairly complex sequence of side effects roughly like, explosion -> redraw -> quiver description -> quiver color -> tracer -> messaging (??) -> more -> quiver description -> tracer -> crash on an invalid monster. (https://crawl.kelbi.org/crawl/morgue/AlmondAAA/crash-AlmondAAA-20201215-234651. txt) -------------------------------------------------------------------------------- 6dfc622489 | advil | 2020-12-15 15:28:34 -0500 Fix LO/Djinn upgrade prompt Broken since 2ba9a4ce9b5bfb, I think. `yes_or_no` no longer will work before game start, so reimplemented as a yesno popup. -------------------------------------------------------------------------------- 4387980181 | advil | 2020-12-15 15:05:20 -0500 Fix a bunch of static targeter + invis issues This also fixes an earlier bug where absolute zero could be used to reveal whether there were invisible monsters, just not their location. Resolves #1641 -------------------------------------------------------------------------------- f3604ea6ed | advil | 2020-12-15 09:57:06 -0500 Fix launcher ammo starts (12405) Something about the ng-setup order is causing this that I still don't quite understand, but explicitly setting the launcher quiver works. -------------------------------------------------------------------------------- 6f3817b27c | advil | 2020-12-15 09:57:06 -0500 Make some zot messages less flavorful but more direct -------------------------------------------------------------------------------- 347fe5baa7 | Edgar A. Bering IV | 2020-12-15 08:32:48 +0200 Update the credits -------------------------------------------------------------------------------- 8f9f7f7418 | advil | 2020-12-14 11:55:28 -0500 Fix webtiles tooltips for statuses with counts Statuses like "Flay (-7)" and "Zot (999)" had their tooltips broken, because the lookup was using this full string. Instead, split at the space. This commit also adds some text when there is no description so that it is more apparent that there should be a tooltip (before, a tiny empty box was displayed). -------------------------------------------------------------------------------- 5cc43298a2 | Nicholas Feinberg | 2020-12-14 08:23:46 -0800 More WL -> Will (Goratrix) Consistent terminology for player-facing messaging. I'm intentionally leaving the player -> monster hex targeter with a different message ('chance to affect') than the monster -> hex messaging ('chance to defeat your Will'). The latter feels quite awkward in the targeter, and I think it's maybe OK to be a little less specific on what's going on under the hood. We'll see! -------------------------------------------------------------------------------- 76350e28a0 | gammafunk | 2020-12-14 09:00:01 -0600 Some ghoul updates for the manual -------------------------------------------------------------------------------- aeb50157f9 | Edgar A. Bering IV | 2020-12-14 16:59:46 +0200 Update credits -------------------------------------------------------------------------------- 2a23cb0dbd | AdamPG | 2020-12-14 16:57:03 +0200 Update species creation documentation to remove hungry undead [ Committer's note: Closes #1642. Remainder of the PR was handled in earlier commits. ] -------------------------------------------------------------------------------- 3b44033db3 | gammafunk | 2020-12-14 08:46:18 -0600 Fix some outdated references to hungry ghouls In source comments, our species code generation script, and in objstat. -------------------------------------------------------------------------------- 0998834371 | gammafunk | 2020-12-14 08:35:00 -0600 Fix ghouls not being able to use potions (PR 1642) The removal of the notion of "hungry undead" didn't update the logic that assumed all "pure" undead can't use potions. Such undead were previously only mummies or temporary lich form, but now it includes ghouls. This commit fixes the logic in the obvious way for now, but the undead-state-type likely enum needs a refactor, as its not doing a great job of giving proper undead knowledge at present. I'm not working with the referenced PR given the source, but will leave it open should anyone else wish to. -------------------------------------------------------------------------------- db0aba6efe | gammafunk | 2020-12-14 07:41:52 -0600 Hopefully fix an HP display bug (elliptic) A bug in the HUD display of HP can occur when restoring maximum HP from drain by gaining XP. I couldn't recreate this bug, but it can be seen at frame 2125 of this ttyrec: https://crawl.kelbi.org/crawl/ttyrec/elliptic/2020-12-13.23:29:18.ttyrec.bz2 It likely happens because the code to handle restoring drained MHP from XP gain first calls calc_hp() to recalculate max HP but then only zeros the max HP adjustment after this recalculation. Hence max hit points will have an incorrect value until it is recalculated again. This commit moves the recalculation after any change to the drain mhp adjustment, which should fix the bug. -------------------------------------------------------------------------------- 8436896e56 | Peter Gerlagh | 2020-12-14 14:41:16 +0200 Allow any floor to be annotated with ! Improve the Annotate interface such that any dungeon floor can be annotated from anywhere. From the main view and the dungeon-overview, pressing ! will bring up a menu allowing you to choose which floor to annotate. From the control-X view, ! will cause you to annotate the level you are currently looking at. ! has a functional help menu. The shortcuts are . and Enter for the current level, < and > for the level above and below respectively, and control-P in annalogy with inter-level travel. The list of dungeon branches (with abreviations) is only shown when the player presses ! a second time. You can only annotate dungeon branches of which you have found the entrance, to prevent information leaking. do_annotate(level_id) has been renamed annotate_level, and annotate_level() has been renamed do_annotate. [ Committer's note: Closes #1369. Squashed and rebased, tweaked some assert logic. ] -------------------------------------------------------------------------------- f5ace97b37 | paul | 2020-12-14 12:49:57 +0200 A new overflow vault for Gozag and Zin This vault is an idea inspired by zin_treasury that I thought could be an amusing play on the contrast between Zin and Gozag. Gozag tempts the player with a single-charged wand of digging to steal a negligible amount of gold from Zin's treasury just for the sake of it. [ Committer's note: Closes #1627. Tweaked commit message. ] -------------------------------------------------------------------------------- 195573c5ca | Marcelo Henrique Cerri | 2020-12-14 10:15:58 +0200 Add options to control display of the message window overlay Add two new options, tile_overlay_col and tile_overlay_alpha_percent, to control the background of the message window overlay. The default color follows the same hard coded value used before while alpha was rounded to the closest round percentage number. The previous alpha value was 100 (in the 0-255 range), while the 40% new default should be equivalent to 102. [ Committer's note: Closes #1557 ] -------------------------------------------------------------------------------- b926618e39 | mgdelmonte | 2020-12-14 10:06:03 +0200 Add c_message lua hook This hook is called for each message sent to the message window, as an alternative to fetching the last n messages (where n is a guess) with `crawl.message`. [ Committer's note: Closes #1563. Tweaked commit message and elaborated documentation. ] -------------------------------------------------------------------------------- 9a8e32e9ec | Nikolai Lavsky | 2020-12-14 09:41:38 +0200 Correct some typos -------------------------------------------------------------------------------- 7ac5835353 | Nikolai Lavsky | 2020-12-14 09:41:38 +0200 Remove obsolete ability and status descriptions -------------------------------------------------------------------------------- 129ca1ddcb | Nikolai Lavsky | 2020-12-14 09:41:05 +0200 Remove obsolete stash search prefixes -------------------------------------------------------------------------------- 9010512d90 | Nikolai Lavsky | 2020-12-14 09:08:44 +0200 Fix Shaft Self description Shaft Self has an equal chance of taking the player 1, 2, or 3 levels down. -------------------------------------------------------------------------------- 18a83ce318 | Nikolai Lavsky | 2020-12-14 09:06:22 +0200 Fix autofight not prioritizing petrified enemies After 9c76b8a6, there are only two stabbing tiers. Also, the player gets a top-tier stab bonus when attacking petrified enemies. This commit updates autofight rules so petrified enemies get the same priority as sleeping or paralysed ones. -------------------------------------------------------------------------------- fb05d25666 | Heinrich Ody | 2020-12-14 09:02:36 +0200 Add details for playing sounds via regular expressions Clarify sound documentation. [ Closes #1630 ] -------------------------------------------------------------------------------- ce247c04e0 | Nikolai Lavsky | 2020-12-14 08:59:30 +0200 Actually stop the Zot clock when it should be paused or stopped The Zot clock ticks even when in the Abyss, during the orb run, and in Sprint mode. It cannot kill the player, but `turns_until_zot()` showing a negative number of turns left in `E` looks like a bug. Also, this commits tweaks the messaging about the Zot clock in `E`. [ Committer's note: Closes #1634. Tweaked some style. ] -------------------------------------------------------------------------------- 0a719521bf | Nikolai Lavsky | 2020-12-14 08:59:02 +0200 Add a wizard command to set the Zot clock Even though it is already possible to get more Zot time using the `&H` command, a wizard command to set the number of remaining turns still might be useful. -------------------------------------------------------------------------------- a2fc0b5f9f | Edgar A. Bering IV | 2020-12-14 08:44:16 +0200 Use references in some ranged fors This silences a clang warning and also prevents unneccessary copying of coord_defs in ranged for constructions. -------------------------------------------------------------------------------- 4c0aae810e | Nicholas Feinberg | 2020-12-13 18:26:57 -0800 Fix Irradiate damage (Midn8) Broken in 4140fda2ff28. -------------------------------------------------------------------------------- 3a4175ecf3 | gammafunk | 2020-12-13 15:09:05 -0600 Some more changelog updates -------------------------------------------------------------------------------- d9a99272a7 | gammafunk | 2020-12-13 15:02:17 -0600 Remove unused hint code instead of using TAG MAJOR The enums aren't marshalled and these hints can't be triggered (and hints mode would ignore them even if they could be triggered). -------------------------------------------------------------------------------- 4cbea82fa3 | gammafunk | 2020-12-13 15:02:02 -0600 Rework player drain to temporary max HP reduction The UI cost of player drain is high, since not only might you need to check your skills after each drain and restoration of drain, you might also have to check spellcasting and ability fail rates. It's also relatively complex for the player to reason about the impact of draining all skills some fixed amount of skill levels, since the effects of level changes vary widely by skill and there are so many skills. This isn't a great design for a player debuff that's frequently applied and restored over fairly short numbers of turns. Max HP reduction has a natural spot on the HUD, requires no menu checks, is much easier for the player to reason about, and is a universally effective cost. Hence this commit reworks player drain to temporarily reduce max HP instead of skills. The drained max HP is restored as the player gains experience, just as before with the old system. Drain applied to monsters is unchanged, with that effect remaining as a stackable HD reduction applied in the same fixed amount regardless of damage. For player drain from melee or beams, I've made the formula more directly use damage done, but still applying at least one point of MHP drain for any non-zero drain power. These attacks always apply a drain power of one even if no damage is dealt. Other drain costs use the same cost values as before (e.g. Ru Apocalypse is still 100), since the formulas scale such values appropriately. The formula for converting drain power to max hp reduction divides the power by six (using random rounding), then splits the resulting power into into two equal parts (up to rounding), one of which is used for a fuzzed component and the other for a component based on the player's current max HP. This is a balance between having a cost that doesn't consider MHP, which would be relatively stronger versus low MHP players and one that only uses MHP, which would be relatively stronger versus high MHP players. In my tests of melee, beam, and fixed costs abilities, the MHP reduction rates seem reasonable, but further play-testing might lead us to tweak the relevant formulas or ability drain costs. The new drain effect replaces the old rotting mechanic, and that mechanic is removed. Curing and heal wounds potions no longer have a secondary rot restoration effect. Miasma clouds lose the rotting portion of their effect, with the poison and slowing remaining unchanged. Monsters and players that permanently or temporarily had rot resistance now have miasma resistance instead. One exception to this is vinestalkers, which simply lose the rot resistance with no replacement, since they were only given it due their potion limitations. Monsters that had rotting melee attacks now have draining attacks instead. The cases of this are not notable aside from necrophages, which might need a rethink since they are not very effective monsters and we have so many monsters with af_drain. Zin Recite can no longer rot monsters, with the weight for that effect appropriately spread to other effects. I've updated all descriptions, references, and source comments to no longer reference rot, but as usual some may have been missed. -------------------------------------------------------------------------------- 1fec4fe3f8 | gammafunk | 2020-12-13 14:51:37 -0600 Remove the hungry dead undead type This was previously used for player ghouls when those rotted over time and required chunks to cure this. Now ghouls no longer rot, nor do they eat to restore HP, gaining XP from kills instead. Hence we reclassify ghouls as normal undead and remove their special undead subtype. -------------------------------------------------------------------------------- 7ab0d7dac8 | gammafunk | 2020-12-13 14:51:37 -0600 Remove an unused actor method argument -------------------------------------------------------------------------------- 89b3258002 | advil | 2020-12-13 11:36:45 -0500 Mention seeds in the issue template -------------------------------------------------------------------------------- 61de54256c | advil | 2020-12-13 10:56:56 -0500 Provide a way to use pkg-config on mac This commit adds a build setting `FORCE_PKGCONFIG` that if defined, overrides the default `NO_PKGCONFIG` setting for mac builds. Previously, doing something like this required editing the Makefile. This setting should be useful for things like homebrew that repackage crawl and patch the Makefile (see #1367). It may also be helpful for people trying to build on new apple ARM devices where our contrib version can't be updated far enough to provide direct support (though this is a bit speculative). A commit in #1367 suggests just always using pkg-config if available, but I don't think this is yet a good idea on mac. Because Apple doesn't itself provide it, there are at least 4 distinct ways that I know of to (often accidentally) get pkg-config installed, none of them are very standard or compatible, it is possible to get more than one version which interact badly (e.g. if you have both macports and anaconda, or homebrew and anaconda), and in my past testing they are just quite unreliable overall, probably exactly because they aren't widely used. In testing this current commit, I do seem to have succeeded in getting a succesful pkg-config build, but this is the first time. The contribs for mac builds, on the other hand, are extremely well-tested and reliable, and not at all sensitive to the various package managers that a mac user could have installed. So I think until this situation becomes a bit more stable (if ever), it is better to default to NO_PKGCONFIG and require the user to be aware that they are taking action to override using contribs. -------------------------------------------------------------------------------- cd3bf97d0b | Edgar A. Bering IV | 2020-12-13 17:27:06 +0200 Remove no_submerge from docs and des syntax highlighting -------------------------------------------------------------------------------- c6392dc34d | Edgar A. Bering IV | 2020-12-13 17:06:32 +0200 Remove the anti-cannibalism conduct (12368) With eating gone it looks weird and out of place. It still had an effect in what one could devour with hydra form while worshipping a good god. A lot of code for a small effect. Beoghites still don't eat fellow orcs, on accounnt of the corpse violation conduct and also the practical desire of preserving an orc corpse to resurrect them. -------------------------------------------------------------------------------- 320aac65f4 | Edgar A. Bering IV | 2020-12-13 16:52:39 +0200 Remove a reference to food (12368) -------------------------------------------------------------------------------- 0e109d3507 | Edgar A. Bering IV | 2020-12-13 16:30:25 +0200 Fix the organization of dc-mon.txt (12306) -------------------------------------------------------------------------------- 6b7d0433bc | Edgar A. Bering IV | 2020-12-13 16:30:25 +0200 Preserve Erica's custom scimitar (12199) Erica's tile has a custom firey scimitar, keep it even if she's managed to get an artefact. -------------------------------------------------------------------------------- 7c2e7382c0 | Edgar A. Bering IV | 2020-12-13 16:30:25 +0200 Source code cleanup (bcadren) Addresses mantis tickets: 12280 12281 12301 12358 12400 12404 removing dead or redundant code, simplifying execution, and correcting comments. -------------------------------------------------------------------------------- 2c94d5e1d5 | Edgar A. Bering IV | 2020-12-13 16:30:15 +0200 Vault cleanup (bcadren) Closes mantis tickets: 12251 12252 12253 12263 12271 12272 12369 These vaults had conditions on depth that no longer made sense, missing tags, or in one case the syntax suggested an altar placement that was missing. -------------------------------------------------------------------------------- 58b0234282 | Edgar A. Bering IV | 2020-12-13 16:25:46 +0200 Use feat_eliminates_items appropriately (12258, 12402) -------------------------------------------------------------------------------- b609fa9e76 | Edgar A. Bering IV | 2020-12-13 16:20:03 +0200 Remove the no_submerge fprop (12309) The only remaining submerging monster is the Kraken tentacle segment. This could also be removed but this batch of commits is collecting only small source cleanups. -------------------------------------------------------------------------------- ed47246d56 | Edgar A. Bering IV | 2020-12-13 16:20:03 +0200 Ground out retaliatory shocks (10990) -------------------------------------------------------------------------------- 00aba192f2 | Edgar A. Bering IV | 2020-12-13 13:20:34 +0200 Update the credits -------------------------------------------------------------------------------- d2882a9c4f | Edgar A. Bering IV | 2020-12-13 13:20:08 +0200 Update the changelog -------------------------------------------------------------------------------- 086102a3f0 | Nicholas Feinberg | 2020-12-12 18:38:56 -0800 Remove a redundant QSDA line Don't note that it can be enchanted to +0, because that's not very useful. -------------------------------------------------------------------------------- 78becf55bb | advil | 2020-12-12 18:34:09 -0500 Various tweaks to monster and spell descriptions This fixes a few apparent mistakes, and more cleanly aligns fields in both of these description popups. (The unifying factor is the internal use of `_print_bar`.) This commit involves a rather alarming nbsp replace on the javascript side to get these tweaks to render in webtiles, but on the other hand it does seem very plausible to me that any leading spaces in one of these popups will be intentional. -------------------------------------------------------------------------------- 8dc6ce00ff | advil | 2020-12-12 16:21:14 -0500 Implement -= for force_targeter (elliptic), consolidate options -= simply wasn't implemented before (and I didn't realize that unless you explicitly check for it it calls the += code). This commit also removes the `always_use_static_targeters` and replaces it with the possibility of passing `all` to `force_targeter`. For reasons of simplification I didn't for now implement -= working to whittle down spells after `all`. -------------------------------------------------------------------------------- 5b34608550 | advil | 2020-12-12 14:06:21 -0500 Try to fix the renounce to `X` mapping (10637) This can happen because `your_talents` is extremely side-effect-y, and if it can get called before `set_god_ability_slots`, it will actually set lettering for whatever god abilities appear to be available at 0 piety. There are various ways that this might happen, centering around the messaging on join. I suspect the original version of 10637 involved local tiles (where the ability buttons are constructed by calling `your_talents`), but the modern version of this is triggered by having an ability quivered when joining the god; a redraw on the messaging also calls `your_talents` when checking quiver enabled status. The best fix would be a more sane refactoring of how to check if the player has an ability, but this quick fix should prevent this particular problem. I won't be too shocked if this leads to crashes, because of weird join religion ordering effects; this is not unrelated to the crash fixed by ca8e9911413a. -------------------------------------------------------------------------------- 60470c10af | advil | 2020-12-12 13:26:52 -0500 Fix/improve programmatic spell memorisation Spell memorisation from lua has been semi-broken since the spell library, because it didn't correctly handle hidden spells or libraries greater than 52 elements. In addition, you previously needed to use sendkeys to memorise spells going by letter. This commit fixes you.mem_spells to just return a list of memorisable spells, no letters involved, and adds a lua function to memorise spells by name. Not sure whether this should be under `spells` or `you`, but I chose the latter. Resolves #1360 Resolves #1602 -------------------------------------------------------------------------------- 2c461ccb5f | Nicholas Feinberg | 2020-12-12 09:00:57 -0800 Clarify damage dice I'm not sure how helpful this is to people who aren't familiar with summing dice for damage, but maybe it's better than nothing...? Might be better to show mean/max, but we'd need a new format for that. -------------------------------------------------------------------------------- 95e0c7ddb8 | Nicholas Feinberg | 2020-12-12 08:25:08 -0800 New Swamp tiles, pt 1 (CanOfWorms) -------------------------------------------------------------------------------- aff5f71418 | Nicholas Feinberg | 2020-12-11 20:32:52 -0800 Display Mara's weapon in tiles (lici) This will probably cause some graphical glitches, but it seems better than nothing. -------------------------------------------------------------------------------- 4140fda2ff | Nicholas Feinberg | 2020-12-11 20:22:15 -0800 Make described spell damage deterministic (Midn8) For player and monster spells. -------------------------------------------------------------------------------- e0427eb064 | Nicholas Feinberg | 2020-12-11 19:57:07 -0800 Don't claim invis scarf makes you hungry (ParallaxScroll) -------------------------------------------------------------------------------- fd6a22a7ff | Nicholas Feinberg | 2020-12-11 15:17:28 -0800 Partially uncap displayed stealth (hellmonk, etc) Previously, displayed stealth was capped at 500, regardless of the player's actual stealth. It now displays much higher values, using this insanely and senselessly cryptic system: +......... = 1-50 ++........ = 51-100 ... ++++++++++ = 451-500 *+++++++++ = 501-550 **++++++++ = 551-600 ... ********** = 951-1000 ... ... !!!!!!!!!! = 1951+ With 27 armour + stealth, 120 SID, shadow dragon armour, full Dithmenos piety, and Shadow Form, I was able to hit the full !!!!!!!!!! stealth. Can you? -------------------------------------------------------------------------------- 242049e08c | Nicholas Feinberg | 2020-12-11 14:52:37 -0800 Add Woodweal synergy (canofworms) It seems very funny for them to be able to heal while adjacent to any tree, including shambling mangroves. Not *useful*, not particularly exciting game design, but funny! -------------------------------------------------------------------------------- e81342393e | Nicholas Feinberg | 2020-12-11 14:43:02 -0800 Add back-compat for MR search -------------------------------------------------------------------------------- 00712748bd | advil | 2020-12-11 17:06:58 -0500 Use bigger long brackets for lua rc parsing After parsing lua, it seems that this code just wraps non-lua code in long brackets. This causes problems when someone tries to use a keybind with `]` following some rc lua code, which involves writing `[]]`, which will close any long brackets in play. Using `[==[` should make it less likely that the closing bracket accidentally shows up. Resolves #971 -------------------------------------------------------------------------------- 368d90fffd | advil | 2020-12-11 15:50:47 -0500 Also protect unbreathing creatures from miasma (following e1f20c3b445d4e) -------------------------------------------------------------------------------- e1f20c3b44 | Heinrich Ody | 2020-12-11 15:48:13 -0500 Fix unbreathing bug Now, when it is checked whether an actor is immune to a cloud, for poison cloud we check for unbreathing. [Committer's note: resolves #1564] -------------------------------------------------------------------------------- 361d76ed6f | advil | 2020-12-11 15:32:15 -0500 Remove jiyva_slurp_result::food This was entirely cosmetic at this point. passive_t::slime_feed remains also for cosmetic reasons, it is used to color the powers display once the player's piety increases a bit. But this could perhaps be simplified... Resolves #1555 -------------------------------------------------------------------------------- 5006177544 | advil | 2020-12-11 13:18:34 -0500 Never mulch tossed items This specifically comes up for launcher ammo, which has a mulch rate, so it could previously get destroyed even when being tossed. I do think this could go either way per discussion in #1505, but i ended up deciding to change it because I think it's overwhelmingly likely that (barring weird speedrun things I haven't though of) the only reason anyone would ever toss launcher-only ammo is by accident, in which case it's pretty annoying to see it mulch. Resolves #1505 -------------------------------------------------------------------------------- 613af4b37b | advil | 2020-12-11 12:22:55 -0500 Explicitly set window opacity May or may not help with #1562 -------------------------------------------------------------------------------- 775ca3dcd3 | advil | 2020-12-11 10:14:49 -0500 Improve error messaging for int options * handle color tag escaping correctly * make the error message slightly more interpretable Resolves #1623 -------------------------------------------------------------------------------- be3abf3417 | advil | 2020-12-10 20:58:12 -0500 Don't do a weapon check on autofight movement for launchers When an enemy was visible but fire was blocked, a wielded launcher would trigger a "really attack while wielding" message before allowing movement towards the enemy. This old behavior was strictly in keeping with the documentation for autofight_prompt_range, but I think still unexpected, and with confusing messaging (referencing attacking) on top of that. So just skip the wielded weapon check altogether if wielding a launcher. This does obscure corner cases where a launcher has an inscription, but since all launchers have full range, it's pretty restricted. Resolves #1614 -------------------------------------------------------------------------------- 5722f2f28d | advil | 2020-12-10 19:45:25 -0500 Copy .md files on install I think that before bf3a5c7, this is what was causing various crashes in circumstances that aren't what we usually test. This commit isn't strictly necessary after bf3a5c7, but it paves the way for converting other docs to md, and also heads off this gotcha for the future. Resolves #1609 -------------------------------------------------------------------------------- fb849e850a | advil | 2020-12-10 17:05:16 -0500 Fix a thunderbolt crash Thunderbolt was not correctly handling the case where a player moved instantaneously or during the firing turn into the position that they had just targeted, resulting in a ray crash on a length 0 ray. This could happen easily in wizmode but also in a few ways during a game, including mesmerise, serpent's lash, and probably knockback. This commit guards against the specific case, though not for non-crashing cases of the player moving in one of these ways (which might lead to bizarre thunderbolt shapes). For fully correct behavior, it should probably check not just the turncount of the previous firing, but the position the actor was at at the previous time of firing. -------------------------------------------------------------------------------- 6118fa9711 | advil | 2020-12-10 15:03:07 -0500 Add some sanity checks to IMB The effect of this spell when one of the actors was knocked into a dispersal trap was fairly odd, and these changes make it slightly less odd. (They may or may not interact with crashes we've been seeing.) It's possible that for knockback specifically, dispersal should act as a fineff, but this isn't a good approach for dispersal in general. -------------------------------------------------------------------------------- bf79f71511 | advil | 2020-12-10 12:30:41 -0500 Add another test monster and generalize some references to MONS_TEST_STATUE. -------------------------------------------------------------------------------- 76280ab330 | advil | 2020-12-10 11:38:52 -0500 Fix grammar error for misc evokables -------------------------------------------------------------------------------- 34db2bcb1b | advil | 2020-12-10 11:36:11 -0500 De-futurize various descriptions I realize this is in principle a ridiculous solution to searches for "will" over-accepting, but when I went through these cases I realized a lot of them are clearer as non-future anyways, and nothing I changed reads worse to me. -------------------------------------------------------------------------------- d598b01645 | Nicholas Feinberg | 2020-12-09 08:34:38 -0800 Add a note of poignancy (12401) To avoid players being trapped in a side area in lost_world, add an exit... just behind a plant... so close for the poor skeleton there, but so far...! -------------------------------------------------------------------------------- 581f5be5db | advil | 2020-12-09 09:08:58 -0500 Improve tossing non-evokable unrands (vt) Also, better handling messaging for trying to quiver equipped items for tossing. -------------------------------------------------------------------------------- 4787bd3075 | wheals | 2020-12-09 14:18:31 +0200 Fix infinite gold exploit (#12395) -------------------------------------------------------------------------------- f6fec0c0d4 | wheals | 2020-12-09 14:18:31 +0200 Don't let Maurice steal stuff being worn See https://crawl.kelbi.org/crawl/morgue/Prakerore/crash-Prakerore-20201124-060246.t xt for a crash caused by this. -------------------------------------------------------------------------------- 83fea8793d | wheals | 2020-12-09 14:18:30 +0200 Fix _actor_apply_cloud_side_effects return value for miasma (#12399) May cause the clouds to (correctly) anger monsters that they hurt. -------------------------------------------------------------------------------- 26f530f025 | wheals | 2020-12-09 14:18:30 +0200 Refactor Hailstorm's range handling a bit -------------------------------------------------------------------------------- d1b18c6681 | wheals | 2020-12-09 14:18:30 +0200 Fix typo -------------------------------------------------------------------------------- 544776af23 | advil | 2020-12-08 19:44:11 -0500 Mark minmay_two_paths as transparent (u/yigaxab397) It's possible that other vaults lacking @ will have similar issues. -------------------------------------------------------------------------------- 006ef2cfcc | advil | 2020-12-08 14:17:17 -0500 Improve autofight_throw and CMD_AUTOFIGHT_NOMOVE The main content of this change is to allow autofight commands (as opposed to CMD_AUTOFIRE) to only trigger actions that do direct damage of some kind. Several people have pointed out to me that their behavior with something like Berserk quivered, vs. how players used them before quivers, was not very coherent. Now, any autofight command will act as if the quiver is empty when an action that doesn't do direct damage is quivered. This will also hopefully make the quiver more usable when CMD_AUTOFIGHT_NOMOVE is used as the Tab binding. As a bonus, autofight_throw=true now correctly handles the case where a spell is out of range, moving towards the nearest target or falling back to melee depending on range. This is fairly useful for many spells, but especially for something like hailstorm. There was no existing code to make this distinction, so I mostly ended up hardcoding it. Unfortunately this may mean that there are missed cases. -------------------------------------------------------------------------------- 72e26ac4d7 | advil | 2020-12-08 14:17:17 -0500 More manual updates for quivers * Add a section on combat, which was missing entirely * Refactor the key commands to group attacking and firing together, as well as move a few other things around -------------------------------------------------------------------------------- 48550f608a | Nicholas Feinberg | 2020-12-08 07:47:51 -0800 De-invert the hex success targeter Probably nicer to show success chance when possible, not failure chance. -------------------------------------------------------------------------------- 0dd55e01dc | gammafunk | 2020-12-08 06:21:37 -0600 Mark a function as static -------------------------------------------------------------------------------- da264ca44c | Nicholas Feinberg | 2020-12-07 17:17:11 -0800 Rephrase Shadow Form description Use a consistent tense and tweak the phrasing around willpower. -------------------------------------------------------------------------------- e47f559bc5 | Nikolai Lavsky | 2020-12-07 17:16:40 -0500 Don't show a bigger targeter for Hailstorm when worshipping Vehumet `spell_range()` can return 4 instead of 3 for Hailstorm, because Vehumet supports the use of this spell. But Hailstorm's range never changes, since it's hardcoded as 3 in `cast_hailstorm()`. -------------------------------------------------------------------------------- d92d85930f | Nicholas Feinberg | 2020-12-07 12:31:47 -0800 Fix conjured friends' damage (bhauth) maybe_random_div and div_rand_round are very different. Fixes displayed and dealt damage by Fulminant Prism, Battlesphere and Conjure Ball Lightning, all broken in recent commits. -------------------------------------------------------------------------------- 185e2d3a23 | advil | 2020-12-07 12:43:29 -0500 Fix the header build -------------------------------------------------------------------------------- c50dc45249 | advil | 2020-12-07 11:16:28 -0500 Add icons to the revamped quiver menu -------------------------------------------------------------------------------- 29ed428ae2 | advil | 2020-12-07 11:16:28 -0500 Improve marking of quivered items in a few menus -------------------------------------------------------------------------------- c70d32b774 | advil | 2020-12-07 11:16:28 -0500 Fix inventory marking of invalid quiver items -------------------------------------------------------------------------------- 6dfd076335 | Nicholas Feinberg | 2020-12-07 07:42:27 -0800 Yet another WL -> Will -------------------------------------------------------------------------------- f6ffb0d6bd | Nicholas Feinberg | 2020-12-06 17:39:53 -0800 Remove William To disambiguate and shorten the hex targeter, refer to the resist chance rather than the "chance to beat". -------------------------------------------------------------------------------- edcf9b2963 | Nicholas Feinberg | 2020-12-06 14:22:02 -0800 More willpower wording tweaks Describe MR-immune enemies as having infinite will, matching the display on xv (not 'invulnerable'), and replace a few more WL references. -------------------------------------------------------------------------------- 390cb15686 | Nicholas Feinberg | 2020-12-06 14:10:26 -0800 Update more missed MR -> WL conversions -------------------------------------------------------------------------------- ffdf6f7e0c | Nicholas Feinberg | 2020-12-06 14:10:26 -0800 WL -> Will (dinky, advil) Reads a bit more clearly. -------------------------------------------------------------------------------- 0a7728c5f8 | advil | 2020-12-06 15:54:18 -0500 Improve weapons check wording for roll/rampage Helps with the scenario where a hypothetical player (*cough*) cannot figure out why there might be attacking going on and spends time trying to diagnose quiver bugs instead. -------------------------------------------------------------------------------- 2e65f7e828 | advil | 2020-12-06 15:34:51 -0500 Fix some ways of skipping the autofight hp check (dinky) This check was being skipped in some cases because at the time of calling, it was possible for the dist object to not be fully set up for automatic targeting. -------------------------------------------------------------------------------- 803384b024 | advil | 2020-12-06 15:19:59 -0500 Fix autofight_fire_stop Broken because the lua code was using the wrong variable name. This commit restores the previous default behavior of shift-tab/p acting like `ff` instead of `f.`, lets this be configured again in the rc via `autofight_fire_stop = true`, and also has all quiver actions consistently respect this option. I've gotten some feedback from players suggesting that this might actually be better with a default of false (from players interpreting the bug as a new default), but for now I'll leave it as it was before the quiver rewrite. -------------------------------------------------------------------------------- e62661cac4 | advil | 2020-12-06 14:41:03 -0500 Improve handling of some weapons checks * on `v`, do weapons checks before targeting instead of after * fix a bug with out-of-ammo launchers and `V` pointed our here: https://www.reddit.com/r/dcss/comments/k7qypb/cannot_open_evoke_menu_if_i_have_a _ranged_weapon/ * don't allow melee attacks via `v` with out-of-ammo launchers. This isn't because it is disallowed, you can still do it with bump attacks, but in testing allowing this seemed more confusing than not. * standardize some checks of whether the player is wielding a launcher -------------------------------------------------------------------------------- 7af7f965e9 | Nicholas Feinberg | 2020-12-06 08:09:39 -0800 Display battlesphere damage For some reason I thought this wasn't still a player spell? -------------------------------------------------------------------------------- d31957873b | Nicholas Feinberg | 2020-12-06 08:06:39 -0800 Rephrase Ru stunned message again (Lici) Punch it up a bit. Thanks to all who voted in the poll! -------------------------------------------------------------------------------- 165cf102c4 | advil | 2020-12-06 10:39:38 -0500 Darken out of range tile The range distinction was extremely subtle on many dungeon backgrounds, because tiles shows both range and los in the targeter. This makes the range distinction much sharper, at the cost of making the oor vs oos distinction fairly subtle. However, this isn't very important in the targeter, so I think this is probably an improvement. True confessions: I couldn't find a good free sprite editor that could correctly handle the alpha channel in this file, so this is actually just the old out_of_sight.png from before 010c0ec4c0e. I kept the lighter version around in thee repo in case someone wants to play around with this in more detail. However, we really should be doing this kind of darkening programmatically. -------------------------------------------------------------------------------- 7355149c4d | Nicholas Feinberg | 2020-12-05 21:29:09 -0800 Fix the build Oops! -------------------------------------------------------------------------------- 55990c9dca | Nicholas Feinberg | 2020-12-05 21:09:15 -0800 Make Hailstorm always hit It effectively did anyway - its accuracy was accidentally made very very high. The accuracy could be nerfed, but it seemed better to simplify the spell. -------------------------------------------------------------------------------- ebc406137e | Nicholas Feinberg | 2020-12-05 21:05:59 -0800 Rephrase Ru's 'stunned by your will' To avoid confusion with the new willpower stat, use 'power' instead. (Per "You now exude an aura of power that intimidates your foes".) I'm not entirely happy with this - perhaps "by your aura" would be better, or something else? -------------------------------------------------------------------------------- 2ee872d4bd | Nicholas Feinberg | 2020-12-05 21:03:58 -0800 Rename magic resistance to willpower Magic resistance is a stat that covers a very wide gamut of effects, from hexes (Slow, Confuse) to vaguely hex-like things (Teleport Other, Siren Song) to things that very clearly aren't hexes at all (Disintegrate). Of course, it doesn't cover other hexes, like Metabolic Englaciation and Dazzling Flash, and it definitely doesn't cover all 'magic' - it provides no resistance to a magical fireball or a magic sword. In short, it's a name that's both unspecific and *too* specific. It actively misleads players. It has negative value! It's impractical and undesireable to change the game's systems to match the literal meaning of 'magic resistance', and there's no more precise term that matches the actual function. You could say something like 'hex resistance', but again, you run into the issue of hexes that aren't resisted by hex resistance and non-hexes that are resisted by hex resistance. So, instead, let's rename magic resistance to 'willpower'. This is a vaguer term, which means that it shouldn't mislead players in the same way, but it's entertainingly flavourful - it's fun to talk about Trog's influence making you strong-willed or Ru's sacrifices making you weak-willed. (Credit to Midn8 for "force of will" inspiring this.) One weird note about this name is that Disintegrate will be willpower-resisted. I've added a cute little bit of flavour to the item description as justification, and that wand might not be long for this world in any case, so it seems fine. There's no save compat code here, so this is easy to revert or tweak further as needed. -------------------------------------------------------------------------------- 1f2658d0d0 | Nicholas Feinberg | 2020-12-05 16:16:56 -0800 Reduce !attraction duration (dinky) Formerly: 35-75 turns. Now: 20-40 turns. -------------------------------------------------------------------------------- 71edfde6b2 | Nicholas Feinberg | 2020-12-05 16:02:13 -0800 Attract monsters later While under the effects of a potion of attraction, pull monsters toward the player after their turn and before the player's next turn, rather than the other way around. This should make the potion more powerful in various circumstances. -------------------------------------------------------------------------------- 6b303dbc09 | Nicholas Feinberg | 2020-12-05 12:05:34 -0800 Display Mystic Blast damage The spell still had 'accuracy' but never checked it. -------------------------------------------------------------------------------- e22e22b3db | Nicholas Feinberg | 2020-12-05 12:04:15 -0800 Refactor zap_to_hit -------------------------------------------------------------------------------- bc0167d404 | Nicholas Feinberg | 2020-12-05 11:39:01 -0800 Remove redundant origin spells They should be initialized in zappy now. -------------------------------------------------------------------------------- 65c7e3695e | Nicholas Feinberg | 2020-12-05 11:26:38 -0800 DIsplay Vampiric Draining damage Boy, what a weird formula. -------------------------------------------------------------------------------- 5781f4c211 | Nicholas Feinberg | 2020-12-05 11:18:48 -0800 Display Hailstorm damage and accuracy Boy, this is very accurate... -------------------------------------------------------------------------------- 72e8e842c1 | Nicholas Feinberg | 2020-12-05 10:44:32 -0800 Show ball lightning damage -------------------------------------------------------------------------------- a60655dfc3 | Nicholas Feinberg | 2020-12-05 10:39:02 -0800 Show Fulminant Prism damage -------------------------------------------------------------------------------- ebe0143811 | Nicholas Feinberg | 2020-12-05 10:20:09 -0800 Show Searing Ray damage & unbrace -------------------------------------------------------------------------------- 789247db7f | Nicholas Feinberg | 2020-12-05 09:39:13 -0800 Show Freeze and Absolute Zero damage -------------------------------------------------------------------------------- 5d12d2fb9f | Nicholas Feinberg | 2020-12-05 09:33:07 -0800 Show Shatter and Fire Storm damage -------------------------------------------------------------------------------- 026c722f6f | Nicholas Feinberg | 2020-12-05 09:10:04 -0800 Display Yara's Unravelling damage Very unsure whether this will cause bugs or not. Life is exciting! -------------------------------------------------------------------------------- 7deb57bc63 | Nicholas Feinberg | 2020-12-05 09:04:34 -0800 Display Irradiate damage -------------------------------------------------------------------------------- c9bf407737 | Nicholas Feinberg | 2020-12-05 08:54:34 -0800 Describe Ignition damage -------------------------------------------------------------------------------- 82ca2f83e3 | Nicholas Feinberg | 2020-12-05 08:40:00 -0800 Describe Starburst damage & accuracy -------------------------------------------------------------------------------- 8c6fb62fe6 | Nicholas Feinberg | 2020-12-05 08:34:48 -0800 Tweak Lightning Bolt description RIP "other similar bolts". -------------------------------------------------------------------------------- 488e41826d | Nicholas Feinberg | 2020-12-05 08:30:42 -0800 Show player spell accuracy As + pips, since a raw accuracy number means very little. Ranges from about 2 pips for some 0-power spells to 7 pips for max-power LCS. Should be a nice complement to the damage numbers. -------------------------------------------------------------------------------- 0fe3eaa9ac | Nicholas Feinberg | 2020-12-04 22:35:34 -0800 Remove an accidental newline Classic copy-paste error. -------------------------------------------------------------------------------- 392c82fb87 | Nicholas Feinberg | 2020-12-04 21:27:19 -0800 Show player spell damage In spell descriptions, similar to monster spell damage, weapon damage, etc. -------------------------------------------------------------------------------- f74a8dc463 | advil | 2020-12-04 21:31:13 -0500 Don't recalculate quiver on autotravel, again -------------------------------------------------------------------------------- 1a1fd2e980 | advil | 2020-12-04 18:14:31 -0500 Initialize sockaddr_un before initial recvfrom This is a weird one. Under some circumstances that I cannot fully determine, the socket address in srcaddr after the recvfrom call is not getting 0-terminated, leading to an invalid pathname (with garbage characters after the end of the actual file name) and ENOENT on the first sendto immediately after the attach message. This leaves the crawl process with no listening clients; the way this appears from the user's end is that webtiles just hangs on the loading screen. Memsetting the structure before recvfrom fixes it, and is good practice anyways. *However*, this seems to be Tornado version specific: I get this issue almost deterministically on Tornado 6.1.0, often on Tornado 6.0.4, and sporadically on 6.0.3 (but I have seen it happen). This makes me suspect that there is some kind of race condition where the socket may not be set up on the client end quite in time for the recvfrom call, and this weird behavior is just a symptom of the race condition. However, it isn't at all obvious why this could happen on the python side, and there's no async code I can detect that would be interfering. So I'm not really sure what is going on here. It's also possible this issue, or at least the particular symptom I'm fixing here, is mac specific, since I think we would have heard about this if one of the tornado 6 servers were having this problem. -------------------------------------------------------------------------------- d3b5134375 | advil | 2020-12-04 11:43:55 -0500 Forward compatibility for tornado 6.1.0 This gets it to run. (There are still some issues that I haven't fully tracked down.) -------------------------------------------------------------------------------- f0e3ce9185 | advil | 2020-12-04 11:03:32 -0500 Simplify some direction targeter messaging As far as I can tell, this extra messaging as a side-effect of `select` is currently redundant, just leading to extra duplicates of whatever error message is also printed in `print_target_description`. Possibly this wasn't true in the past before the direction chooser was widgetified? -------------------------------------------------------------------------------- f98bc5018b | advil | 2020-12-04 10:21:44 -0500 Improve tracer behavior for melee targeting (dinky) Two fixes: * don't show tracers for regular melee weapons * for reaching, don't show the tracer when the attack point is beyond range. I'm not sure if this was intentional but right now to me it seems more confusing than not. -------------------------------------------------------------------------------- 5dabc5fedb | advil | 2020-12-04 10:21:44 -0500 Let `launcher_autoquiver` affect evokable artefacts And make them autoquiver their effect like launchers. This is a slightly different case since they can't be evoked via `v` (any more) but this behavior makes them more consistent and predictable at least. These items, when wielded, can still always be evoked with `V` even if autoquivering is off. -------------------------------------------------------------------------------- e3d1176a8d | advil | 2020-12-04 10:21:44 -0500 Make some messaging more consistent (dinky) -------------------------------------------------------------------------------- 1d9d62bb61 | Nicholas Feinberg | 2020-12-03 17:11:26 -0800 Remove entropy weavers' arms The weapons, that is. It's not important to their design and the tiles didn't support them. -------------------------------------------------------------------------------- 9442c5bf0f | Nicholas Feinberg | 2020-12-03 17:09:47 -0800 Don't drain with "invisibility Fix sprint 4, sort of. -------------------------------------------------------------------------------- 2c58977ddd | advil | 2020-12-03 17:27:04 -0500 Re-simplify quivering effect of wielding a launcher b220303a8 tried to improve autoquivering on wield but instead (for most people) just made it more confusing. After this commit, by default wielding a launcher will always change the main quiver as well, regardless of what is quivered. This works reasonably well with the other change in b220303a8 that switches to the last used quiver on quiver invalidation, so switching away from the launcher (except for slings+stones) usually does something intuitive. This behavior (in contrast to the behavior before b220303a8) can now be disabled entirely; if you set `launcher_autoquiver = false` wielding a launcher will never set the quiver. This will be useful at least for characters that are using both launchers and spells. -------------------------------------------------------------------------------- d330659c95 | advil | 2020-12-03 13:58:36 -0500 Add a quiver swap command This new command swaps between the current quiver action and the most recent valid quiver action. Default bound to `]`. Since quiver actions don't have stable lettering, it's a bit hard to see exactly how to do this, but I wonder if something more controllable along the lines of `'` for weapons might eventually be in order? -------------------------------------------------------------------------------- 64875d0529 | advil | 2020-12-03 09:55:25 -0500 Do some caching for spell quiver enabled checks For beams (and especially explosions) this is a pretty heavy call, because it checks if there are enemies in range, and it isn't ideal that it gets called every time the quiver gets redrawn; I've already fixed some cases where this call was leading to noticeable slowdowns. Moreover, this call has been revealing a lot of cases where a redraw (or webtiles _send_player) happens as a side effect at a time where there is some invalid state for calculating nearby enemies, causing crashes. I've been able to fix up some of these on a case by case basis, but others I haven't even been able to replicate (e.g. https://webzook.net/soup/morgue/trunk/eld/crash-eld-20201128-170107.txt, which seems to involve a more() triggered in the middle of monster_die on vehumet MP gain, where there is a partially dead monster at that point in the call, triggered by some kind of complex fireball+inner flame scenario). So, for both of these reasons, this commit changes things so that the spell quivered enabled status is only updated once per input cycle. This could be extended to other quiver actions needed but right now as far as I know (beam) spells are the ones that are causing issues. -------------------------------------------------------------------------------- d078a86f14 | advil | 2020-12-02 10:51:20 -0500 Better handle invalid lockfiles After CBR2 lost power the other day, it left a bunch of empty lockfiles, which aren't being handled very well. This will simply clear a lockfile if it is empty or otherwise contains something not convertable to an int. (The case where it contains a stale process number is already handled.) -------------------------------------------------------------------------------- 4c2be1ac84 | advil | 2020-12-02 10:15:08 -0500 CLI for setting password reset tokens I had qualms about enabling the admin panel version of this on a server with a very long admin list, so in lieu of adding a second DGL permissions tier (for now) I'm adding a CLI version of this to simplify password resets a little bit. Not yet tested in a chroot setting. This change enables servers accepting reset tokens unconditionally; but unless one of the other two options is enabled they can still only be set via the command line. -------------------------------------------------------------------------------- 69f9a3b9e2 | advil | 2020-12-01 20:48:56 -0500 Set you.on_current_level to false during load This has the effect of suppressing certain UI things, and keeping quivers from crashing in case UI updates during load force webtiles to call send_player early. This was in particular happening for skill menu on load cases. I've also adjusted where the skill menu is called from in these early game cases; this didn't prevent the crash or anything but it seemed wildly odd to open the skill menu when the game is in the middle of restoring. -------------------------------------------------------------------------------- 701b36d813 | advil | 2020-12-01 18:23:03 -0500 Add an admin panel tool for password resets For servers that can't set up password resets by email, this allows admins to manually generate reset tokens. I implemented it because handling manual password resets on CAO is extremely annoying, but setting up the email mode is unlikely to happen. This feature is very much off by default because it's a drastic increase in privileges for the way admin users are set up on many servers -- right now, the admin flag is mainly for identifying who can do rebuilds / use wizmode, i.e. almost nothing that can affect other users. So I don't think server owners will obviously want to enable a way of changing arbitrary passwords (if you have the reset link, you can change the password) for anyone who can rebuild. Really this calls for multiple tiers of permissions, but that's pretty involved to figure out how to do. TBD. -------------------------------------------------------------------------------- 9b92081034 | advil | 2020-12-01 16:13:55 -0500 Prevent unnecessary redraws during autotravel (Goratrix) This gets quivers and a few other things that shouldn't be updated in fast autotravel modes. (In testing this I noticed that console, but not tiles, still prints messages with these modes, should maybe be fixed too.) -------------------------------------------------------------------------------- f5feefdc77 | advil | 2020-12-01 15:47:11 -0500 Exclude userdb.py from lint -------------------------------------------------------------------------------- fcd0102f59 | advil | 2020-12-01 15:38:56 -0500 Better document a tiles option (u/Social_Knight) This tab names are set in a slightly odd way so it's possible I missed a few here. -------------------------------------------------------------------------------- 1ef1181187 | advil | 2020-12-01 15:32:07 -0500 Add webtiles password change I'm not sure if there's some good reason that I'm missing why this was never implemented, but here it is. Previously the player needed to log in to ssh to do this on most servers, and it may even have required an admin on others. -------------------------------------------------------------------------------- f3041fb45f | advil | 2020-11-29 15:05:57 -0500 Show quiver for felids in webtiles -------------------------------------------------------------------------------- 201e65fd49 | advil | 2020-11-29 13:27:30 -0500 Improve flavor of explosions after death -------------------------------------------------------------------------------- f9a3951816 | Nicholas Feinberg | 2020-11-29 08:57:11 -0800 Shift nrook's guardian serpents deeper D:9 is a bit earlier for guardian serpents. So is d:11, really, but what's life without a *little* excitement? nrook_guardian_serpent_double might be too spoilery to exist (unrelatedly) but I don't have the heart to change it. (And as spoilery vaults go, the trick in this one is pretty obvious.) -------------------------------------------------------------------------------- f919d8e910 | Nicholas Feinberg | 2020-11-29 08:57:11 -0800 Adjust worldbinder Swamp set (12391) Since insubstantial wasps no longer spawn in Swamp, replace them with bog bodies. (We don't want any of the really nasty creatures in this set!) Planerend set still seems fine. -------------------------------------------------------------------------------- 1642dc5553 | Nicholas Feinberg | 2020-11-29 08:57:11 -0800 Make evokable invisibility drain skills Evocable invisibility is a very powerful and potentially quite fun effect. It has a correspondingly high Evocations skill requirement to remove its failure chance. However, that failure chance rarely mattered in practice. There was no real cost to repeatedly evoking invisibility at 70% failure while around the corner from enemies. That was strong, but not particularly fun. Evoking invisibility now applies moderate skill drain to the player, regardless of whether the evocation succeeds. This both discourages high-failure-rate evocation and makes the ability *slightly* weaker in general. (Of course, as Ru shows, one mustn't overestimate the impact of drain!) The current drain value is a first pass - it should be adjusted as appropriate per player experience. -------------------------------------------------------------------------------- f18ecd8a5b | advil | 2020-11-29 11:54:56 -0500 Support backslash notation in rc keybinds This is handled correctly in macros.txt, but there was no way to do this that I can identify in rc files, making it impossible to bind keys like tab or shift-tab. Now you can type things like: bindkey = [\{9}] CMD_AUTOFIGHT_NOMOVE directly into an rc file. -------------------------------------------------------------------------------- 76694b35de | advil | 2020-11-28 19:35:02 -0500 Prevent most quiver autofilling This commit effectively restores oldquiver behavior: running out of ammo will autoquiver other ammo using the settings in fire_order, but nothing else. The only other action type that can run out is wands, and these result in an empty quiver. Dropping items will also lead to an empty quiver, which I'm less sure of. This commit is likely not the last word on quiver autofilling, but it does solve one of the more annoying sets of interactions, which is when running out of ammo and hitting autofire triggers something extremely different, such as invoking berserk. Because wands can no longer be accidentally triggered by running out of ammo (see f7e0b5f77) I've added them back in to the cycle order. -------------------------------------------------------------------------------- b220303a8a | advil | 2020-11-28 17:52:46 -0500 Tweak quiver on wield behavior * If the player wields a launcher, and the current quivered action involves ammo, the main quiver will switch to the appropriate ammo for the launcher (the last used of the relevant type). This is an exact match for 0.25 behavior. I'm not sure whether it's really the best in the end, but it's at least consistent. * If the player wields a launcher, and the current quivered action is valid and non-ammo, no autoswitch will be triggered. The player can still fire the launcher via tab/`v`. This smooths out a lot of switching cases that were annoying (e.g. spell+launcher+melee combos). * If the player wields a non-launcher that results in an invalid quiver action, instead of emptying the quiver, the game will try to find a valid recently used action. This should cover at least some use cases I've discussed with players, but needs some testing in practice. All this is slightly more complicated that what was happening before, so it may need more tweaking. In principle I could add options for some of this as well, but I need to have a better sense of the use cases. -------------------------------------------------------------------------------- 52035dc9a5 | advil | 2020-11-28 11:20:35 -0500 Guard against crashes in god_hates_killing Also, standardize some indentation. -------------------------------------------------------------------------------- a0cc1ef5f6 | Kate | 2020-11-28 04:26:34 +0000 Improve stairs documentation -------------------------------------------------------------------------------- 5126ae9156 | Kate | 2020-11-28 04:19:17 +0000 Remove some semicolons -------------------------------------------------------------------------------- 687c0233df | Midn8 | 2020-11-28 04:19:08 +0000 Fix "The Exile" Description (#1617) The card is no longer capable of banishing the user (and hasn't been for quite some time). -------------------------------------------------------------------------------- 9485abf61d | advil | 2020-11-27 17:04:27 -0500 Fix autofire targeted abilities with no enemies (yesno) This change prevents the yesno (ha) dialogue from happening when the direction chooser is opened non-interactively, simply failing silently. This is immediately targeting some abilities that were targeted but use spell_direction (e.g. naga spit), we'll see if it has bigger side effects. Most spells should handle this before getting to the direction chooser. -------------------------------------------------------------------------------- 36fc42b6d5 | advil | 2020-11-27 17:04:09 -0500 Standard indentation in ability.cc -------------------------------------------------------------------------------- 2bc0b21477 | advil | 2020-11-27 15:02:40 -0500 Add fine-grained rc control over static targeters I've gotten a variety of feedback on this now; some people find them extremely useful, some people find them confusing or unnecessary, and some people find them useful only for certain spells. This new option lets you force a targeter on named spells when casting, allowing full customization. The default list is relatively short and includes only a few of the more unique targeters; there are some others that could be useful here (e.g. raise dead spells that show corpses, etc), but I'll wait on more feedback to see how this goes. This supports the usual "+=" and "=" syntax for list options. -------------------------------------------------------------------------------- 49005422be | advil | 2020-11-27 13:10:25 -0500 Don't show static targeters for `Z` People seemed confused by this, so I'm removing them for now. I can't tell whether this confusion is because of change or intrinsic confusion. It's true that many static targeters are extremely boring (e.g. self-targeted ones and summon ones that just show range 2). I'm leaving them for the fire interface, because even though I've also seen this described as "weird" it's pretty important for consistency, and if you want to skip the targeter you can just use `p` or shift-tab in this mode. (Also, I do really think these targeters are extremely useful for new players.) What might be best is if z/Z both had a toggle that let you choose to see the static targeter if you want to check range. -------------------------------------------------------------------------------- ccb988d4e7 | Nicholas Feinberg | 2020-11-27 07:57:31 -0800 Give meliai a weapon offset -------------------------------------------------------------------------------- d41f7fe8a7 | Goratrix | 2020-11-27 07:57:31 -0800 Give atropa and datura darts distinct color tiles Currently both atropa and datura are using default branded dart tile, which is dark blue. This gives them distinct colors, orange for datura and lighter blue for atropa. The default branded tile (not used) is changed to grey/silver instead of blue. -------------------------------------------------------------------------------- f7e0b5f775 | advil | 2020-11-26 21:58:41 -0500 Don't include wands in quiver autofill/cycling This seems like it should eventually be configurable, but remove this for now: it seems like it makes it too easy to waste wand charges. (Possibly applies to misc evokers, abilities, as well?) -------------------------------------------------------------------------------- 1c1f9fb145 | advil | 2020-11-26 20:07:56 -0500 Let throwing ammo be quivered with a launcher -------------------------------------------------------------------------------- 3f418897a6 | advil | 2020-11-26 20:03:24 -0500 Fix a build issue for cao `set::emplace` is not available on this compiler, apparently. -------------------------------------------------------------------------------- 67df3f2acb | Nikolai Lavsky | 2020-11-26 12:33:30 -0800 Colourize beam damage descriptions in WebTiles As a followup to 930a2b7a, this commit colourizes beam damage descriptions on the xv screen. -------------------------------------------------------------------------------- 5c0f344105 | advil | 2020-11-26 13:19:17 -0500 Show inert evokers in `V` menu (Lici) This restores previous behavior, and marks inert evokers as dark grey in inventory menus in general (basically so that they'll show up that way in `V`). Not sure if there are other things that could be marked dark grey following this, or if there's a convenient way to do that. But this makes the appearance of `V` match the quiver menu. -------------------------------------------------------------------------------- 3624241d3c | advil | 2020-11-26 12:57:01 -0500 Remove a debug message -------------------------------------------------------------------------------- 35fe432003 | advil | 2020-11-26 12:54:23 -0500 Fix a bunch of inscription logic errors These were keeping every ammo not inscribed with =F from getting quivered -------------------------------------------------------------------------------- 9503ff51b6 | advil | 2020-11-26 12:45:51 -0500 Fix cleave+reaching I had assumed this wasn't possible, but it is via Xom. This fix prioritizes the reaching targeter over the cleave targeter. -------------------------------------------------------------------------------- bf3a5c7d0a | advil | 2020-11-26 11:04:28 -0500 Generate a quickstart.txt 23cac7494c converted the quickstart guide to markdown, but at the time of merge I don't think anyone fully realized that this was loaded in-game. This fact has caused a bunch of havoc. This commit generates a .txt by simply copying the md file, which should eventually be substituted for better rendering. Two reasons for doing this: (i) for in-game use, a .txt version would be better since we don't have any markdown rendering in-game, and (ii) on some servers (perhaps just CWZ) the .md file is not getting copied into the game data directory, which is causing a ton of crashes. This could be fixed on the server, but given (i) it also seems reasonable to fix it on our end. -------------------------------------------------------------------------------- 326f72de0d | advil | 2020-11-25 22:48:50 -0500 Fix an autofight / throw interaction (vt) This simplifies this code path to only use the targeting in throw_it, rather than adding an extra layer of targeting around CMD_THROW_ITEM_NO_QUIVER. This layer was here for historical reasons and everything seems to work fine without it. The specific bug this is targeting is that because the action treated this as a case of non-interactive targeting it would apply the autofight threshold. This commit also fixes a bug where you could use `f` to fire ammo into walls with portal projectile, probably causing a crash. -------------------------------------------------------------------------------- a1d07f6d9d | advil | 2020-11-25 22:48:50 -0500 Improve handling of =f inscriptions This commit allows =f to work beyond ammo, and still shows =f items in the `Q`uiver menu (following previous behavior). Some cases of +f still don't work. -------------------------------------------------------------------------------- c4484e65ce | Nicholas Feinberg | 2020-11-25 19:04:36 -0800 Ban missed net farming (Misc) I'd forgotten about the case where nets miss you. Oops! -------------------------------------------------------------------------------- ca8e991141 | advil | 2020-11-25 20:30:28 -0500 Fix a potential crash while joining ru This is a quick fix that I'm not sure is ideal, but what seems to be happening is that your_talents can be triggered as a side effect of messaging while joining a god, which then trips a Ru ASSERT before the god is fully set up. Changing the order of calls in join_religion might be better, but that sequence looks very delicate. -------------------------------------------------------------------------------- 1b567f25a9 | advil | 2020-11-25 18:54:22 -0500 Don't mark newgame spells as useless The player is not yet placed when they receive their initial spells, so spell_uselessness_reason needs to be able to work in that case. -------------------------------------------------------------------------------- 43279f1ce9 | advil | 2020-11-25 16:16:20 -0500 Fix !f inscription checks (vt) This moves inscription checks to triggering; the earlier implementation was only tested on a much older version of newquivers. This commit also lets !f inscriptions work on any item that can be fired from quivers. -------------------------------------------------------------------------------- 62de122f19 | advil | 2020-11-25 13:59:00 -0500 More spell quivering fixes, this time for excursions 81e999faa9 was specifically triggered by checking spell uselessness of a quivered spell while doing levelgen. Crashes can also happen if this is checked during an excursion. Before, none of this code would have a way of being called, but when a spell is quivered on newquivers, this code is used to figure out whether to gray out the spell, so it is triggered by ui redraws as well as sending player info in webtiles. I've added another sanity check to `spell_no_hostile_in_range`, but also just headed this off at the outset in `spell_uselessness_reason`. -------------------------------------------------------------------------------- 81e999faa9 | advil | 2020-11-25 12:53:58 -0500 Don't crash on a spell uselessness check when entering zigs I'm still not sure of why exactly this is called when the player is out of bounds while entering zigs, but it is, so handle this case a bit more gracefully in general. -------------------------------------------------------------------------------- 0a1e5404e9 | advil | 2020-11-25 09:11:01 -0500 Handle randomization correctly in absolute zero targeter Before, I had assumed that this wasn't randomized. However, it is, inside distance_iterator. So, this commit changes the targeter to show AFF_MAYBE on the closest targets when there is more than one at the same distance. The visual difference is a bit subtle, so it may be that this will be confusing, but this still seems the best way to handle it. -------------------------------------------------------------------------------- a5061f1e94 | advil | 2020-11-25 09:11:01 -0500 Lua api for targeted fire of spells, items, abilities Before, these needed to be triggered by sending keys; this change uses the actions API to directly trigger actions and supply a target where necessary. This code is not extremely well tested... -------------------------------------------------------------------------------- c7d50104ff | advil | 2020-11-25 09:11:01 -0500 Simplify and document the actions/quiver API somewhat Mixing shared_ptr and references was too confusing, with some awkward pitfalls. Given that the whole point of action_cycler is to ensure non-null, this commit just switches things over to use only shared_ptrs, and makes explicit this (and cases where nullptr may be returned) in the doc comments. Also, a few other tweaks/fixes that I noticed along the way. -------------------------------------------------------------------------------- 568033eebc | advil | 2020-11-25 09:11:01 -0500 Name some special numbers in autofight (PleasingFungus) -------------------------------------------------------------------------------- 6b3f3ad2d2 | advil | 2020-11-25 09:11:01 -0500 Refactor and consolidate melee attacks This commit refactors melee attacks, including CMD_ATTACK_... and reaching attacks, into a single action type. This action supports targeting not just for reaching attacks but for regular melee attacks, leading to a more uniform behavior (as well as allowing you to examine enemies directly from an attack interface for all attack types). This class supports all the bells and whistles of other action commands, e.g. it will do noninteractive attacking if a target is pre-chosen. It's currently not used in a quiver at all, but created on the fly as part of an attack. For backwards compatibility I have left the behavior of CMD_EVOKE_WIELDED intact, but `v` is now bound to a new CMD_PRIMARY_ATTACK that activates targeting for any wielded weapon, be it regular, reaching, or ranged. Historically, there were various types of things triggered with this key while wielded, but more recently `v` is used almost entirely for reaching except for some special cases: two artefacts (staff of olgreb and staff of dispater) as well as unusual techniques like wielding a wand. Since all of these special cases now can be accomplished via the quiver, it doesn't seem so necessary to keep to the old scheme as a default. There's still unfortunately a bit of scaffolding in the evoke code because of this compatibility issue, but it's at least less intrusive. Additional notes: * targeter_cleave is upgraded to support changing aim, and used for `v` on axes. * Rift targeting is simplified and now correctly shows range. * Bump attacking is unchanged, i.e. doesn't use this code path. * If someone's really bothered by having to quiver staff of olgreb's OTR ability to trigger it, they can rebind `v` back to CMD_EVOKE_WIELDED. `V` will also continue to work. * It is still possible to use `V` to evoke a reaching weapon. -------------------------------------------------------------------------------- ab14b95593 | advil | 2020-11-25 09:11:01 -0500 Change/improve some default quiver filling cases A bunch of issues that showed up in testing * use invalid, rather than just empty, quivers for initialization cases. This autofills early game quivers more appropriately. * on memorising a spell, fill an invalid quiver. * when wielding a launcher, if that launcher has ammo fill the main quiver unconditionally. Previously I had only done this on an invalid quiver, but on testing I'm not sure that this would be the best general behavior. (And in tutorial 2, it definitely complicates things in a case that would be confusing for newer players.) The main case where this could be annoying is if a player wants to swap between ranged and melee weapons, but keep a spell or ability quivered. -------------------------------------------------------------------------------- 1040668b95 | advil | 2020-11-25 09:11:01 -0500 Documentation, tutorial updates -------------------------------------------------------------------------------- 69e7df3edd | advil | 2020-11-25 09:11:01 -0500 Refactor and improve some autofight checks This commit slightly restructures how autofight is called, cleaning up the code in main.cc and moving the hp/mp checks at least partly into quiver::action (though still using clua bindings to perform the checks). The main substantive change here is that the `automagic_stop` option now works for quivered actions that consume mp similarly to how it worked on old automagic. -------------------------------------------------------------------------------- 1112c698d6 | advil | 2020-11-25 09:11:01 -0500 Change the behavior of the CLUA_BINDINGS #define This commit changes things so that what gets compiled out by removing this define is only the ability to run clua from the rc file and macros. Default clua bindings in dat/clua are called, as are all hooks etc. (Most will be unable to do anything, but this would allow someone to set a default value for any hooks in dat/clua code.) *Motivation.* The main use case for this that I can think of is security: a security-conscious server admin may prefer their users to not be able to run clua in their rc file. However, this use case has been severely broken for some time, because the following were also disabled by undefining this variable: autofight, stash tracker annotation, delay interruption, kill annotation, and a few other minor things. Realistically no one is going to want to play modern crawl without at least the first two of these. Because of the (potential) security application, I don't want to remove it entirely, but if it is going to be usable for that, it needed some work. In addition, the existence of this #define required anyone implementing a clua binding to get the preprocessor setup right, and if they really wanted to do that, to test on two builds (one of which required editing the Makefile). Nearly every dev comment I can find about CLUA_BINDINGS going back to 2011 is basically asking why it exists. So this commit is an attempt to provide some value. One awkwardness: there is a bunch of lua code in dat/defaults/autopickup_exceptions.txt. Because this is treated as an rc file, it will error (and not work) on a non-user-clua build. This is all a bit hypothetical now but possibly it would be better for this code to be implemented in a dat/clua file rather than a default rc include. -------------------------------------------------------------------------------- 4c303a47fc | advil | 2020-11-25 09:11:01 -0500 Don't show item letters for actions in quiver I had these in as an extension of previous behavior for ammo, but in practice I've found the letters more confusing than helpful. If people do want these, it could go back in. -------------------------------------------------------------------------------- aeda7b1d4a | advil | 2020-11-25 09:11:01 -0500 add CMD_AUTOFIRE to `p` I'm not sure `p` is the best choice, and it really doesn't stand for anything relevant, but there was some consensus that people wanted a thing besides shift-tab. So try this for now. -------------------------------------------------------------------------------- 562f6ed73d | advil | 2020-11-25 09:11:01 -0500 Fix a tag upgrade issue -------------------------------------------------------------------------------- 281963b6d2 | advil | 2020-11-25 09:11:01 -0500 Let staff of olgreb use the static targeter when needed -------------------------------------------------------------------------------- bb0a9072ea | advil | 2020-11-25 09:11:01 -0500 First-pass implementation for quivering abilities There's a lot of idiosyncracy in the ability list, but this commit gets the main points and works for everything I've tested directly. Probably further tweaking is required for some special cases, and this may require some iteration with actual player testing to really shake out the use cases. (And the ability code is a mess, a lot more stuff could be dataified...) Main TODO: non-targeted abilities use the "untargeted cast" interface when [f]iring from the quiver, but several of these would benefit from a static targeter. (For the ones that affect the player, which is most of them, there's not much difference, but these could still use the self-targeted static targeter when firing.) -------------------------------------------------------------------------------- f0f3f8f090 | advil | 2020-11-25 09:11:01 -0500 Update some options text for quivering-related changes -------------------------------------------------------------------------------- 351bd4327b | advil | 2020-11-25 09:11:01 -0500 Allow quivering evokable unrands There are only three of these, and two are not common at all, but it's actually pretty useful for olgreb. Because of the unrand API, this implementation is a bit hacky, but with only a few items I'm not currently excited about writing a more general API for some of this stuff. -------------------------------------------------------------------------------- 1bb892847f | advil | 2020-11-25 09:11:01 -0500 Implement target preselection for artefacts There is only one artefact that currently needs this, the staff of dispater. This finishes out the API for allowing target preselection for everything that can be triggered via `evoke_item`. -------------------------------------------------------------------------------- 1f324f914e | advil | 2020-11-25 09:11:01 -0500 Implement quivering/firing misc evocables I'm not entirely sure how useful this will be, because you usually want to intersperse firing these with doing other things that also might be in the quiver. But, it is straightforward to implement, and the targeted ones needed to handle target selection anyways. -------------------------------------------------------------------------------- bee9178c8b | advil | 2020-11-25 09:11:01 -0500 Some tweaks around quiver mp usage This is mostly scaffolding; to get this to work well needs another refactor I think. -------------------------------------------------------------------------------- 44f2c8cc77 | advil | 2020-11-25 09:11:01 -0500 Fix a bunch of shadow warnings -------------------------------------------------------------------------------- dfb12c3783 | advil | 2020-11-25 09:11:01 -0500 Fix some lingering grd instances, other issues (following a rebase against master) -------------------------------------------------------------------------------- bde5eff12d | advil | 2020-11-25 09:11:01 -0500 Tweak autofight_throw behavior and clarify comments This is an incremental improvement that more closely matches previous behavior for this option; it lets hit_closest move the player with a disabled quiver. However, I do think that many autofight options need a rethink for generalized quivering that I haven't yet done, so there may be further changes. (One obvious issue: autofight_throw=true and hit_closest_nomove have pretty weird behavior if what is quivered is not an attack.) Holding off on full documentation updates until the fate of these options is more settled. -------------------------------------------------------------------------------- 361857bee0 | advil | 2020-11-25 09:11:01 -0500 Improve target selection for explosions/clouds For spells like fireball, this lets shift-tab use indirect targeting at the edge of range. (Similar to how automagic behaved.) -------------------------------------------------------------------------------- 71d5f92254 | advil | 2020-11-25 09:11:00 -0500 Improve messaging for confused ammo firing This prints an error message, similar to spell uselessness reasons. -------------------------------------------------------------------------------- 4502bb1e84 | advil | 2020-11-25 09:11:00 -0500 Refactor a few casting checks Because MP is decremented before your_spells is called for regular casting, the error messaging in the targeter was showing low MP messages in wrong cases. This handles some casting-general checks differently than other uselessness checks so that they can be consistently performed in cast_a_spell, and therefore ignored within your_spells. It also removes one existing messy unwind case that worked around this. The situation is still a bit of a mess though. -------------------------------------------------------------------------------- aae50c702f | advil | 2020-11-25 09:11:00 -0500 Fix temp on several uselessness checks Also switch capitalization so it conforms to everything else. -------------------------------------------------------------------------------- 19a61ae6e1 | advil | 2020-11-25 09:11:00 -0500 Add a simplified uselessness check for passwall Doing the real thing is not practical, but we can at least check if the player is adjacent to something that could be passed. -------------------------------------------------------------------------------- 6056049701 | advil | 2020-11-25 09:11:00 -0500 Improve uselessness checks for corpse rot Success was previously only checked after the fact; this refactors things so that the spell is correctly marked as currently useless if there are no nearby corpses. (It might be nice to also mark corpses that would be affected in the targeter, but I won't get to that right now.) -------------------------------------------------------------------------------- 798577c133 | advil | 2020-11-25 09:11:00 -0500 Clean up some necromancy preconditions This adds actual uselessness checks for animate skeleton, animate dead, and simulacrum, as well as improves code reuse for their static targeters. This commit also changes the behavior of static targeters so that they always start on the player. Not sure this is generally right... -------------------------------------------------------------------------------- 75ba72c780 | advil | 2020-11-25 09:11:00 -0500 Remove some debug code -------------------------------------------------------------------------------- b1a65e9133 | advil | 2020-11-25 09:11:00 -0500 Simplify launching? This gives launchers their own quiver that stably retains the last quivered ammo for that launcher, so that the main quiver slot can hold something else. tldr: tab(/v) always attacks with the main weapon if possible (/aims with the main weapon for non-melee). Shift-tab(/f) always fires the quivered action (/aims the quivered action). You still use the main quiver to change the launcher ammo where relevant. (Which is pretty much only for slings.) Associated changes in detail: * tab always fires a wielded launcher (as long as its quiver is not empty). After this change, tab is much closer to a "primary attack" button triggering whatever is wielded, and you have to work at it to get tab (as opposed to shift-tab) to fire the main quiver. (This can still happen if you wield a non-weapon, probably, or by messing with autofight settings.) * launchers can be fired using v even if the main quiver has something else, similar to reaching weapons. This is kind of odd, but doing this as another case of CMD_EVOKE_WIELDED allowed me to reuse a bunch of code and also allowed me not to complicate the lua interface beyond what was already there for reaching. * quivering relevant ammo in the main quiver sets it for the launcher. This currently the only way to change the launcher quiver. Quivering nothing also force-clears the launcher quiver. * wielding a launcher autoswitches only the launcher quiver to the correct ammo. (Vestiges of old quiver code still track what was last used and select that, but this matters only for slings. More of the old quiver code has been removed.) * if the quivers are different, the launcher ammo is displayed to the right of the wielded weapon name (potentially overwriting some of it). If they are the same, only the main quiver version is shown. (In this case, tab and shift-tab have identical results -- but shift-tab will only fire a launcher if that launcher's ammo is showing in the main quiver.) This is, perhaps, a step to having a full "primary action" slot (associated by default with whatever is wielded, but where anything could be quivered) and a secondary action slot corresponding to the current regular quiver. -------------------------------------------------------------------------------- f6c6f4e90c | advil | 2020-11-25 09:11:00 -0500 Fix various issues with firing disabled spells This fixes an initialization bug that affected quiver cycling with disabled spells, and smooths out a number of UI issues: * For spells that can trigger the targeter while disabled, it generally prints the spell_uselessness_reason error message in the initial targeting prompt, which makes the situation much clearer. (There are still many spells that can't trigger the targeter while disabled under at least some circumstances, e.g. sandblast with 0 stones.) * Currently useless spells are shown in dark grey in the targeter. * Currently useless spells never try to find a default target if they can get to the targeter. (Instead the cursor starts positioned on the player.) * When autofiring disabled spells, it now prints the disabling reason rather than the default autofight error (which is sometimes fairly underinformative). -------------------------------------------------------------------------------- 7216dc4718 | advil | 2020-11-25 09:11:00 -0500 Don't wipe out top_prompt in UIDirectionChooserView This looks like it would have handled fire_target_behaviour correctly, but it always cleared the prompt for the stock behaviour object that is used in places besides throwing. -------------------------------------------------------------------------------- c796653dd0 | advil | 2020-11-25 09:11:00 -0500 Tweak static targeting for a bunch of self-targeted spells This could possibly be simplified by adding a spflag for these? I decided against reusing selfench for all these cases because its meaning is a bit overloaded. Though I am not entirely sure why transmutation spells that are self-targeted are never marked as selfench. -------------------------------------------------------------------------------- 955d01e223 | advil | 2020-11-25 09:11:00 -0500 Add a (static) targeter for frozen ramparts This was the main missing complex positional targeter, unless I've missed something. A little tricky to get exactly right. -------------------------------------------------------------------------------- 8aebc96f93 | advil | 2020-11-25 09:11:00 -0500 Improved confused throwing from quiver This treats confused throwing as untargeted in the UI, so you get a chance to abort from `f`, and it works with quiver cycling. Also, explicitly indicate that it is different in the quiver description. -------------------------------------------------------------------------------- 0fdd853446 | advil | 2020-11-25 09:11:00 -0500 Add static targeters for most untargeted spells Targeters serve two roles: aiming, and telling the player what will happen once they trigger the action. This is especially brought out with the revamped fire interface, which shows a targeter for any action, with a default empty looking-around targeter as a fallback -- this UI works a lot better if it's actually showing what to do. For many spells this is exceedingly boring, but for some of the more exotic positional spells I think it's actually a huge improvement for new players to be able to see these. In some cases these targeters provide information that was previously hard to calculate despite being deterministic, with two standouts being the absolute zero target, and the animate skeleton target. (If this is bad, then these spells should be randomized when there are multiple enemies/corpses at the same distance, not deterministic.) By default static targeters are not shown for `z`, but there's an option that lets you force them even there. No doubt they'd be kind of annoying to long-time players but this is pretty useful information for someone who doesn't have every spell memorized. They are always used for `Z` casting, and in the fire interface. Still some cases missing. -------------------------------------------------------------------------------- fe2187900e | advil | 2020-11-25 09:11:00 -0500 Improve handling of disabled actions when cycling fire In some cases, depending on the details of the action, disabled actions can't get to a direction chooser at all (case: sandblast with 0 stones), and so cycling to them in the fire prompt would exit the prompt. This just skips them for UI consistency. You can still force quiver them, and they may still exit the prompt when doing so (depends on the action). -------------------------------------------------------------------------------- 631ad8ecb3 | advil | 2020-11-25 09:11:00 -0500 Re-implement tossing Tossing was temporarily impossible after throwing get refactored entirely into the fire system. This adds an action type for tossing that is not used unless items are force-quivered. It is currently not possible to toss items that can be otherwise quivered, including wands. This allows quivering items for tossing. There was some discussion in ##crawl-dev on whether this was a good idea, and I'm not sure it is; but as long as there is tossing at all, there is no reason to make it impossible to do via the quiver (and in fact with the current API, that would be more work rather than less). I don't particularly want to take a stand on whether tossing is a good idea in the first place as part of this commit series, so I leave things as they were. -------------------------------------------------------------------------------- 3b221d4c60 | advil | 2020-11-25 09:11:00 -0500 Revamp fire interface to fully handle fire actions This commit wraps the various ways of triggering a direction chooser in yet another layer of api that handles cycling between and selection of arbitrary actions. The challenge here is that there are many ways to trigger a direction chooser, which may involve extremely idiosyncratic setup that is not controlled internal to the direction chooser. So, to switch from e.g. a firestorm targeter to an iceblast wand targer is something that simply can't be done inside the direction chooser UI without some kind of extremely major rewrite. Instead, what this does is rebuild the custom targeter for each action while cycling in a way that looks like a seamless UI to the player. In the long run, there may be ways of gradually refactoring bits and pieces of code to make this less painful. For example, if every action were only called via the quiver::action api, then the intervening could could be slimmed down quite a bit, with most messaging etc refactored into actions. But, this is not practical to do all at once. I have however done this for throwing as a kind of prototype, since this was basically the simplest case. (But, there's still more refactoring/simplification to do even there.) For untargeted spells, right now in the fire interface you basically just get a variant of the "just looking" targeter. However, I think there are better things to do for many of these spells that will come in a future commit. -------------------------------------------------------------------------------- 01ffde2ee0 | advil | 2020-11-25 09:11:00 -0500 Quiet beam messages by default I should have done this years ago. -------------------------------------------------------------------------------- c499aaac4f | advil | 2020-11-25 09:11:00 -0500 Remove "quiver unavailable" Now, just show the quivered element grayed out. -------------------------------------------------------------------------------- 39fea7d47b | advil | 2020-11-25 09:11:00 -0500 Adjust newquiver save compat behavior Now loads the previously quivered ammo. -------------------------------------------------------------------------------- cd8006399c | advil | 2020-11-25 09:11:00 -0500 Add a custom quiver display for sandblast Also, generalize some sandblast code, and only show item count in the message window if the spell is not quivered. -------------------------------------------------------------------------------- 98f1491d44 | advil | 2020-11-25 09:11:00 -0500 First-pass menu for generalized quivering This is probably still missing all sorts of bells and whistles, but it provides a quiver selection menu that covers the basics for the `Q` menu, as well as selecting items from the fire interface. -------------------------------------------------------------------------------- f2fa652baf | advil | 2020-11-25 09:11:00 -0500 Clean up evoke checks a bit Move more checks into evoke_check, and use it more widely (including for quivering wands). This handles zigfigs and reaching slightly differently than in the past; while berserk (etc) V is now possible if either of these are in play, but will only show the currently enabled items in the menu. -------------------------------------------------------------------------------- 2d68e64195 | advil | 2020-11-25 09:11:00 -0500 Improvements to fire order and display Refactored the initial implementation of find_next to be more general and clean, and improved a bunch of is_enabled checks and messaging. -------------------------------------------------------------------------------- 413aeb54f4 | advil | 2020-11-25 09:11:00 -0500 Improve autotargeting for various quivered spells This is the direction chooser's smart autotargeting for most spells on top of (or in some cases instead of) autofight target selection. There are a few cases where it is necessary to drop to manual targeting, but for the most part this allows sensible shift-tab behavior for various complicated spells like LRD, cloud spells, etc. The simple_targeting option applies if set. There's still a somewhat involved division of labor between autofight target selection and the direction chooser, where afaict the main difference is that the former prioritizes closer targets, and the latter prioritizes previous targets if there any, and then closest targets. Possibly this could all be simplified into one thing? But for now autofight handles messaging in a useful way for all sorts of error cases. -------------------------------------------------------------------------------- 4bf0199a49 | advil | 2020-11-25 09:11:00 -0500 Skip digging for quiver There's no use for this that I can think of, and it has a bad interaction with default autotargeting. -------------------------------------------------------------------------------- 48ffb1d3d0 | advil | 2020-11-25 09:11:00 -0500 Trigger untargeted actions directly on autofire That is, bypass all the convoluted lua stuff when a target is not needed. Some of these may do better with an error if there is no foe, but this new blanket behavior behavior matches the regular cast behavior so it's a bit closer to what you would expect. Some interesting cases to think about: blink, berserk (not yet implemented), foxfire, conjure flame, irradiate. More fine-grained logic needed.. -------------------------------------------------------------------------------- 604836d2a6 | advil | 2020-11-25 09:11:00 -0500 Simplify default shift-tab behavior The previous behavior was to use the quiver only when not in melee range (and not wielding a launcher). This new behavior seems more appropriate for the wider range of quiver options now available, including actions that are untargeted: it simply always triggers the action on shift-tab. The previous behavior is still present and bindable. It might be nice to have better in-game customization of this because I'm not sure there's one default that really does make sense across all action types. This is bolted on in a somewhat hacky way to existing autotarget code. A better refactor might be to extract only the targeting code from autofight, and have actions use that directly to find a target only when needed. -------------------------------------------------------------------------------- 5840989f9b | advil | 2020-11-25 09:11:00 -0500 Allow quivering wands This was relatively straightforward to implement, given all the previous infrastructure. However, it is once again ui-incomplete; you can quiver wands from the Q menu but only using *. Another obvious issue (that will apply to some spells as well) is that the fire targeter doesn't handle custom hitfuncs, e.g. for iceblast. -------------------------------------------------------------------------------- c08bbfc749 | advil | 2020-11-25 09:11:00 -0500 Update docs for quiver miscast severity option -------------------------------------------------------------------------------- efa02f9678 | advil | 2020-11-25 09:11:00 -0500 Don't quiver dangerous spells by default This adds an option to let you control the miscast severity threshold for this check, defaulting to no dangerous spells. (I'm not sure if any book starts might have their starting spell excluded with this default, so it may need some tweaking.) Also, removes an annoying dprf. -------------------------------------------------------------------------------- 640fc51a6f | advil | 2020-11-25 09:11:00 -0500 Implement quivering spells This provides a much better interface to spell firing than automagic. This commit is *not* ui-complete: while quivering spells via cycle and cycle under `f` should be fully implemented, I have not yet worked on the `Q` menu or the menus from `f`, which both still only let you quiver items. Some notes * book starts will autoquiver a spell if that's first in the fire order. * there's still a lot of legacy code that I don't understand well enough to have fully removed. TBD. * I've left in the legacy serialization code for the ammo history, which definitely needs some revisiting. Actions are now serialized as a prop though, in a much simpler way. * some polishing TODOs remain, and this is a complicated enough change that this commit may still lead to unexpected behavior. (E.g. I'm 80% certain there's no tricky way for felids to fire ammo with this new API...) * no options yet affect this, it may be desirable to tweak fire_order. -------------------------------------------------------------------------------- ca729177e3 | advil | 2020-11-25 09:11:00 -0500 Let beam spells target test statues without Z -------------------------------------------------------------------------------- e642e6e074 | advil | 2020-11-25 09:11:00 -0500 Don't let browser eat shift-tab in webtiles -------------------------------------------------------------------------------- e6153d18e9 | advil | 2020-11-25 09:11:00 -0500 Refactor and generalize quivering This commit rewrites the quiver to be both more usable and more general, cleaning up a lot of ncient and hard-to-understand logic. The basic idea is that what gets quivered is a quiver::action, and this is stored directly. This class abstracts over many of the details of what kind of action it is, paving the way for some interesting future commits. Right now, though, the system just reimplements the old quiver functionality involving ammo. I was not able to fully eliminate the old player_quiver, but the descendent class (quiver::history) is much simpler and used basically for tracking what was last quivered of any ammo type. Right now, it still handles serialization as well, and inventory changes. Most of the weirdest stuff is cleaned up, hopefully. There may be some logic changes (because old quiver logic was quite convoluted and I don't necessarily understand everything it did). One that I do know of is that throwing ammo won't auto-quiver when you run out of launcher ammo. -------------------------------------------------------------------------------- 99b756640e | advil | 2020-11-25 09:10:59 -0500 Rename a quiver enum -------------------------------------------------------------------------------- 31eddc3830 | advil | 2020-11-25 09:10:59 -0500 Rudimentary API for programmatic targeting Many commands implicitly take a target as an argument, and collect that argument only via the interactive direction chooser. Because of this, the only way to script these commands (e.g. in autofight.lua) is to send commands to the interactive direction chooser interface. As the direction chooser has become more widgetified, this has become heavier and heavier to do, leading to noticeable lag in autofire. At the same time, interacting with this UI programmatically has long been a source of hard-to-solve bugs and brittleness. For these reasons, this commit adds a first pass implementation of supplying a target directly to such commands, and uses it for autofire and autoreach. On the c++ side, there is now a non-interactive way of calling the direction chooser that still uses all the error checking and messaging. On the lua side, there is a way of supplying (so far, just a few) commands directly with a player-relative coordinate. This commit leaves automagic untouched (and regular melee combat doesn't use the direction chooser). -------------------------------------------------------------------------------- 3bff4b215c | Nicholas Feinberg | 2020-11-24 18:44:03 -0800 Improve net traps Prior to this commit, net traps would fire exactly once, launching a net that the player could use. After this, they'd be destroyed. This encouraged the player to intentionally and methodically step on net traps to 'disarm' them and to get net traps for their own use. Not particularly interesting or fun gameplay! Instead, make net traps permanent, and make their nets always mulch. This will make life a bit harder for players in some places (Zot, Tomb), but we can always adjust trap frequency as appropriate. -------------------------------------------------------------------------------- 8d2f3042de | Nicholas Feinberg | 2020-11-24 18:44:03 -0800 Rework player spell accuracy display It didn't work - the approximation was too crude. We pretended we were only rolling a random number once (for to-hit), but we actually rolled target EV 3 times as well - and more rolls if the target had rMsl! We now try to simulate most of that (though not rMsl). It seems like even in the worst likely cases (high-accuracy spells against a haloed high-EV target), we only run about 150k iterations, which is very fast locally. This produces much more accurate results. The correct solution is to simplify the beam accuracy calculations, as we have with melee/ranged attack accuracy, but that's a larger task than I want to attempt this close to feature freeze. -------------------------------------------------------------------------------- 513ac319d2 | Nicholas Feinberg | 2020-11-24 18:44:03 -0800 Rename greater mummies to royal mummies (gressup) The great crusade against greatness continues. 'Greater' is a pretty vague and generic descriptor when the existing lore (the monster description) already calls these terrifying creatures 'ancient pharoahs'. It's also annoyingly close to the name of 'guardian mummies', which shows up in the same place! Let's differentiate a bit. You may call these "mummyrajas" if you prefer. -------------------------------------------------------------------------------- 261a1d5db6 | Nicholas Feinberg | 2020-11-24 18:44:03 -0800 Don't show the zot clock in Abyss Or on the orb run or wherever else it might be disabled, even if always_show_zot is on. -------------------------------------------------------------------------------- f57989e088 | advil | 2020-11-24 13:04:59 -0500 Fix for hep games that get soft-locked in abyss Under some poorly understood circumstances, hep ancestors can drop weapons in the abyss, and when they do, sometimes (???) these items can form a stack. The former just causes annoying errors, but the latter will trigger a crash any time `abyss_morph` is triggered. With relatively deterministic rng these days, that will soft-lock the game in the abyss; I think in the past when this happened you could just reload and end up with a different rng state by doing some stuff in the ui, and then if you were lucky the crash wouldn't replicate). This commit fixes the symptoms by clearing the buggy items during abyss_morph. More crashlogs won't really help at this point, there are plenty and still no one has figured out how to replicate this crash. https://crawl.develz.org/mantis/view.php?id=11756 -------------------------------------------------------------------------------- bf766624f9 | Nicholas Feinberg | 2020-11-23 17:14:34 -0800 Add a killer klown kast message (zipskins) -------------------------------------------------------------------------------- 47dfa6ee30 | Nicholas Feinberg | 2020-11-23 17:10:55 -0800 Describe marshlight in monster (vt) -------------------------------------------------------------------------------- 4463a752a4 | Nicholas Feinberg | 2020-11-23 17:06:58 -0800 Don't claim fireballs can miss (lici) -------------------------------------------------------------------------------- a9d2d7650c | Nicholas Feinberg | 2020-11-23 17:04:51 -0800 Remove an unused function -------------------------------------------------------------------------------- dc81c2f471 | Nicholas Feinberg | 2020-11-21 13:46:25 -0800 Show spell to-hit % in the targeter This is a fairly crude approximation, but I think it should be relatively correct. It's nice to have a basic sense of how likely you are to hit, for both players and devs - balance is a lot harder without real accuracy numbers! -------------------------------------------------------------------------------- e5b14bf77e | Nicholas Feinberg | 2020-11-21 13:37:28 -0800 Make lighting affects beams more like attacks Lighting effects (accuracy bonuses from haloes and penalties from umbrae) were applied before the to-hit roll for beams and before the roll for melee & ranged attacks, meaning that they had roughly half the effect on beams that they did on attacks. This doubles their effect on beams to be more consistent with attacks. Players will see better results with wands and spells under TSO and worse results trying to hit anything near a profane servitor with spells. -------------------------------------------------------------------------------- 6321bf7485 | Nicholas Feinberg | 2020-11-20 17:17:27 -0800 Halve distortion banish weight (hellmonk) From 14964f1db53dd4 : ...if the new distortion becomes too strong with a 10% banish these numbers can be further adjusted. -------------------------------------------------------------------------------- 735459dd53 | advil | 2020-11-20 16:22:17 -0500 Remove invocation removal on switching gods. Also remove some vestigial code. -------------------------------------------------------------------------------- 97a50ab700 | Nicholas Feinberg | 2020-11-19 21:40:35 -0800 Replace tloc -Tele with -Move -Tele was a cute downside for translocation spells, which are often about escape. However, it was sometimes quite advantageous: players faced with an undesirable teleport trap could memorize a tloc spell and miscast it to pass through. Funny, but not very entertaining gameplay. So, replace -Tele with -Move, completely preventing the player from moving (ala treeform + dimensional anchor) for a short period. Seems much more commonly relevant, and significantly less likely to encourage boring play patterns. -------------------------------------------------------------------------------- f1512cd430 | Nicholas Feinberg | 2020-11-19 08:13:57 -0800 Increase marshlight cast frequency Since it's really the only thing will-o-the-wisps do, they can afford to cast their spell closer to 1/4 times instead of 1/6. -------------------------------------------------------------------------------- 902a77ae82 | Nicholas Feinberg | 2020-11-19 08:12:21 -0800 Slow goliath frogs down a bit They've been consistently more lethal than intended. Going from speed 14 to speed 12 should reduce damage & corrosion, as wel as giving players more ways to escape their terrifying anuran wrath. -------------------------------------------------------------------------------- d8113324d5 | gammafunk | 2020-11-19 06:14:42 -0600 Fix spriggan druids not casting Awaken Forest (Lici) Broken in c03f2b59, the original logic inverted in that batch of fixes was in fact correct. Spriggan druids had the spell, but would never try to cast it before this fix. -------------------------------------------------------------------------------- cc8f1ee719 | advil | 2020-11-18 20:20:25 -0500 Reword the demigod description (monkeytor) wow, yeah. -------------------------------------------------------------------------------- facbca91cf | gammafunk | 2020-11-18 11:18:10 -0600 Fix some problems in a vault The newly introduced gammafunk_indiana_jones was fairly spoilery, since you couldn't see much into the vault. Vaults that don't fully reveal their contents to the outside will always have some amount of spoilers, but this vault didn't telegraph what the player would face, which includes Zot traps at later depths. Allow peering well into the vault from outside the runed door by turning some strategically chosen walls into floor (or possibly Zot traps at the right depth). Additionally the internal layout was very closed, making it very easy to fighting the first wave of monsters 1v1. Add some randomized floor to the switchback walls. Also turn the last door into a clear one so the player can see the full contents of the treasure room before deciding to fight any boulder beetles. Finally, use an inner wall of rock that we can decorate with thematic wall tiles, behind which we use stone to prevent easy digging. Also use decorative floor tiles to match the walls. -------------------------------------------------------------------------------- 3dd439832f | Nicholas Feinberg | 2020-11-17 22:35:09 -0800 Turn monster explosions into fineffs Explosions firing immediately causes a pretty classic set of issues - we're invalidating the old state of the world in surprising ways. For example, if a ball lightning explodes and kills an attacker midway through the resolution of a multi-target attack (e.g. a javelin toss), the game just has no way to figure out how to resolve the rest of the attack afterward - it can't generate new ranged_attacks without the original attacker, so it just crashes. Instead, let's wait until the *end* of any ongoing melee attacks or beams before triggering death explosions. The timing here is slightly different for attack-triggered fineffs - we trigger them a little later now melee attacks, in fight.cc - but hopefully that's ok. Overall, this code is very bad and probably buggy. I'm sorry. -------------------------------------------------------------------------------- e40b904635 | Nicholas Feinberg | 2020-11-17 21:25:41 -0800 Constify torment_player agent -------------------------------------------------------------------------------- c41a8854c2 | Nicholas Feinberg | 2020-11-17 21:25:40 -0800 Constify petrify agent -------------------------------------------------------------------------------- b6d1a298b2 | Nicholas Feinberg | 2020-11-17 21:25:40 -0800 Constify banish agent -------------------------------------------------------------------------------- 1d16244ef9 | Nicholas Feinberg | 2020-11-17 21:25:40 -0800 Constify paralyse agent -------------------------------------------------------------------------------- ea2d263aa7 | Nicholas Feinberg | 2020-11-17 21:25:40 -0800 Remove unused params -------------------------------------------------------------------------------- cb17a628a6 | Nicholas Feinberg | 2020-11-17 20:58:17 -0800 Constify drain_exp agent -------------------------------------------------------------------------------- 5a8a614f01 | Nicholas Feinberg | 2020-11-17 08:34:27 -0800 Add rolling charge ability icon -------------------------------------------------------------------------------- aa9f5d3e14 | Nicholas Feinberg | 2020-11-17 08:06:38 -0800 Make boulder beetles jumpier (yesno) Better messaging and cloud sfx, matching the intended flavour. -------------------------------------------------------------------------------- 8259106e14 | Nicholas Feinberg | 2020-11-16 08:25:12 -0800 Partially fix skill menu (dinky) Still a little strange when useless skills are de-focused, but OK. -------------------------------------------------------------------------------- 69557b85cc | Nicholas Feinberg | 2020-11-15 22:00:17 -0800 Remove skill training restrictions (hellmonk) After the old XP pool system was removed and the current skill training system was added, one odd edge case was that you had to have an item, spell, or god ability somehow relevant to a skill to be able to train it. This was not particularly consistent. For example, training got special-cased to be always allowed to avoid annoyance when you'd thrown everything you had, and pain brand, though depending on necromancy, did not allow you to train it. In general, it's better to have less complexity and fewer special cases, so by default it seems good to remove these rather complex restrictions. The argument against has been that training these skills is rarely useful (true, but so are many things players do!), and that a massive skill screen would intimidate new players. Thankfully, to avoid the latter case, we can retain much of the old code to hide many skills by default, while still allowing experienced players to use them, in the same way that they can use manual training instead of automatic. In fact, since we no longer need to special case Throwing, new players will often see a smaller skill screen than before! -------------------------------------------------------------------------------- 7262b39652 | Kyle Rawlins | 2020-11-15 12:09:00 -0500 Tweaks to quickstart.md This is shown in game, so needs to look reasonable as text. Adjust the headers and a few other details. It still uses a bit too much formatting for this, so it would be ideal if we had a way of stripping out the md and generated a .txt. Also, remove food, and a few other minor wording tweaks. -------------------------------------------------------------------------------- 78611b2a4a | advil | 2020-11-15 09:43:47 -0500 Reorder a Makefile rule for backwards compatibility Prior to gnu make 3.82, when there were multiple pattern matches, the earlier rule was preferred, so the .h.o rule needs to precede the regular .o rule for these versions. -------------------------------------------------------------------------------- 7192265339 | advil | 2020-11-14 21:18:31 -0500 Clean up plants in post-placement fills (Lightli) Regular monsters (and items) shouldn't appear outside of vaults at this point in the level generation process, but plants are entirely possible in some layouts. This commit allows plants to be cleaned up, and prevents post-placement filling of squares with non-firewood. (The fill code itself will wipe out anything, beware.) -------------------------------------------------------------------------------- 2a559e7be2 | advil | 2020-11-14 15:33:47 -0500 lint -------------------------------------------------------------------------------- 581e7e17b6 | advil | 2020-11-14 15:20:56 -0500 Improvements to placement.lua Main change: allow outputting the builder log along with the map. Other tweaks to documentation and comments. -------------------------------------------------------------------------------- e73a099111 | advil | 2020-11-14 15:16:02 -0500 Mark des_cache_test as unrand It already can't place in at least two ways, but this further cements things. -------------------------------------------------------------------------------- 940fe7d004 | advil | 2020-11-14 15:07:47 -0500 Fix a typo in chequers_temple_overflow_minitemple -------------------------------------------------------------------------------- ddd851d81b | advil | 2020-11-14 14:39:58 -0500 Initialize a variable May or may not avoid crashes that I can't replicate. -------------------------------------------------------------------------------- 110d042ebb | advil | 2020-11-14 13:18:19 -0500 Add more doc comments to placement.lua Since in 06017ff571 I messed up the pasting of the example output, I thought it might be useful to duplicate this text in comments on the script itself, with the correct output. -------------------------------------------------------------------------------- 73b9a89994 | advil | 2020-11-14 11:03:34 -0500 Large batch of connectivity / placement fixes These fall into three categories: 1. Fixes that are oriented towards getting automated testing to pass. - e.g. cleanups around CLEAR tiles that may be non-issues in practice; example: for compass oriented vaults I've added explicit wall tiles in the appropriate direction so that the vault is not making assumptions about the underlying tiles. - clarifying `unrand` tags for pure subvaults where needed (in some cases these relied on lack of depth marking to not place). Added the `removed` tag for a few special cases. - lua fixes that cleaned up background assumptions 2. Genuine fixes for many vaults. Examples: - actual CLEAR issues were relatively common: these can cause a veto if the vault overlays in a way that puts a floor tile under this kind of position. - varied closets, often involving water, often only under some circumstances. Fix some KMASK mistakes where the writer probably was assuming it applied immediately. - Some cleanups for opaque masking / transparency. This script isn't really geared towards testing fully opaque vaults, but it is good at finding incorrectly done opaque masking on transparent vaults. (However, there are a bunch of transparency fixes from veto testing that are rolled into here that I should have committed first.) 3. Comments for a few vaults that I didn't fix. (See also the force overrides in placement.lua.) -------------------------------------------------------------------------------- 6f5aefb819 | advil | 2020-11-14 11:03:34 -0500 Tweaks to minmay_the_grid for occasional closets These closets are of the veto-triggering kind, not the tele closet kind. I'm not very confident that these are the ultimately best fixes, but they are fixes. They target an issue with a specific style of subvault that relied on the surrounding tiles for connectivity: these subvaults assume external passable squares that lined up with the internal gaps, but it's possible for those external squares to become walls, leading to closets. Otherwise I've done a lot of bulk testing of minmay_the_grid vaults, and haven't found other connectivity issues. (Right now my script can't place the ultimate one, though, so that could use some followup.) -------------------------------------------------------------------------------- 06017ff571 | advil | 2020-11-14 11:03:34 -0500 Add a script for automated placement and connectivity testing This repurposes an ancient, and dormant, test that placed a single vault and adds a bunch of features to make it useful for bulk testing vaults, targeting basic placement issues and connectivity. This is extremely useful for finding rare connectivity issues, and for doing a pass through all vaults to find obvious veto-triggering closets. Unfortunately I suspect it takes to long to be viable as a CI test (though I may still try this out), and is better interactively. Initial fixes as a result of developing this script will come in separate commits. Use case: ``` $ util/fake_pty ./crawl -script placement.lua minmay_nonomino_d4 -count 10 -dump Testing map 'minmay_nonomino_d4' Failing vault output to: placement-minmay_nonomino_d4.10.txt script error: ./scripts/placement.lua:184: Isolated area in vault minmay_nonomino_d4 (2 zones) ``` This generates this vault on a blank level 10 times and outputs each map to a file. In this case, it failed on try 10 (which aborts) and so it stops then and points out the specific failing file to you. This file shows the whole level, but here's an excerpt illustrating the vault itself: ``` ``` In this case the problem is pretty visible, though sometimes connectivity issues do not pop out in the test output (e.g. ones involving water, or CLEAR tiles, etc.) and need further debugging. Currently this script is geared towards finding isolated areas that will trigger vetoes, though it might be extendable to do other related things that it doesn't know (e.g. find tele closets in opaque maps). The script skips various kinds of maps, and is hard-coded to skip certain specific maps that either are ones I haven't yet figured out how to solve, or illustrate some other unusual circumstance that can't be detected from tags. The two biggest skipped categories are encompass maps, and unrand maps. The latter are usually pure subvaults, so testing the map that places them exercises them. (Though in practice, you need to manually test these vaults with large -count arguments. I've done this in a few cases, e.g. minmay_the_grid maps, but not generally.) -------------------------------------------------------------------------------- e7e87f2ff1 | advil | 2020-11-14 11:03:34 -0500 Update explorer.lua for temple pregen change -------------------------------------------------------------------------------- 6a63ac1ee2 | advil | 2020-11-14 11:03:34 -0500 Skip input on tiles loading screen in test mode Possibly should be skipped for other cases too. -------------------------------------------------------------------------------- 6cf8f86288 | Nicholas Feinberg | 2020-11-14 07:49:09 -0800 Split out mon-explode It makes sense to me, and also it's a very funny name. -------------------------------------------------------------------------------- 75db068ed4 | Nicholas Feinberg | 2020-11-13 21:06:17 -0800 Let palentonga mutate to roll farther (dinky) Seems fun. Damage is still capped at 2x, since getting even more damage seems excessive. -------------------------------------------------------------------------------- dbf270a2a2 | Nicholas Feinberg | 2020-11-13 20:16:33 -0800 Remove dead code -------------------------------------------------------------------------------- 42129fe79a | Nicholas Feinberg | 2020-11-13 19:13:41 -0800 Revert "Revert "Don't crash in the skills menu (advil)"" This reverts commit 3d2bcdb4e9ce18204ec63b67a5d23613e6c4f2db. -------------------------------------------------------------------------------- 3d2bcdb4e9 | Nicholas Feinberg | 2020-11-13 18:31:19 -0800 Revert "Don't crash in the skills menu (advil)" Caused a different crash that I don't understand. This reverts commit e0c665c49dfa321371ae9ab94611a89d5c067a8e. -------------------------------------------------------------------------------- e366a860e6 | Nicholas Feinberg | 2020-11-13 17:59:00 -0800 Stop forcing Swamp We've gotten a few weeks of guaranteed Swamp testing and it seems to be in decent shape (if perhaps slightly too froggy and slightly not wispy enough), so let's set things back to normal. -------------------------------------------------------------------------------- e0c665c49d | Nicholas Feinberg | 2020-11-13 17:53:17 -0800 Don't crash in the skills menu (advil) I'm not confident in this use of save_game, but maybe it's OK? -------------------------------------------------------------------------------- 31a745ddcd | Nicholas Feinberg | 2020-11-12 07:54:14 -0800 Describe chain lightning damage in xv -------------------------------------------------------------------------------- ec22e641d3 | Nicholas Feinberg | 2020-11-12 07:53:37 -0800 Fix monster -------------------------------------------------------------------------------- e1a9524b62 | Nicholas Feinberg | 2020-11-11 18:26:14 -0800 Show IOOD damage in xv -------------------------------------------------------------------------------- 70ddbb00c7 | Nicholas Feinberg | 2020-11-11 18:25:56 -0800 Don't print hex %s in black on black -------------------------------------------------------------------------------- 930a2b7adc | Nicholas Feinberg | 2020-11-11 13:50:26 -0800 Colourize beam damage descriptions This is fairly useless but looks cool. -------------------------------------------------------------------------------- 6cde5fae71 | Nicholas Feinberg | 2020-11-11 13:08:12 -0800 Display marshlight damage in xv -------------------------------------------------------------------------------- 1df0a6b31e | Nicholas Feinberg | 2020-11-11 12:44:53 -0800 Make wall-border dig behaviour consistent (12380) Honestly not sure whether it makes more sense to stop digging or keep going, but it looks like more thought was put into the behaviour for non-border non-diggable walls (which causes the player to stop digging), so let's do that. -------------------------------------------------------------------------------- 17de90a3c3 | Nicholas Feinberg | 2020-11-11 10:16:58 -0800 Zappify natural spells At least, we can see Xtahua's magnificent damage in the wild. -------------------------------------------------------------------------------- f75564ed3b | Nicholas Feinberg | 2020-11-11 08:59:56 -0800 Zappify more monster beams -------------------------------------------------------------------------------- 70055ddf73 | Nicholas Feinberg | 2020-11-11 08:24:52 -0800 Display waterstrike damage on xv -------------------------------------------------------------------------------- 7b6e01e074 | Nicholas Feinberg | 2020-11-11 08:15:15 -0800 Deduplicate monster explosion methods -------------------------------------------------------------------------------- 84887b7506 | Nicholas Feinberg | 2020-11-11 08:15:15 -0800 Refactor monster explosions a bit -------------------------------------------------------------------------------- 517d6fe721 | CrawlCycle | 2020-11-10 19:44:21 +0200 docs: Document artp_value_type This commit documents artp_value_type, which is an enum for defining the type of a value of an artefact property. -------------------------------------------------------------------------------- 433cdae047 | CrawlCycle | 2020-11-10 19:44:05 +0200 docs: Document invalidate_agrid (#1588) * docs: Document invalidate_agrid The invalidate_agrid function invaldiates the area effect cache. The function has about 40 usages in the codebase. This commit adds doxygen comments to explain its effect. * docs: Revise docs as suggested by Pleasing Fungus Co-authored-by: CrawlCycle <66185335+CrawlCycle@users.noreply.github.com> -------------------------------------------------------------------------------- 743b41319e | Kieron Dunbar | 2020-11-10 19:16:24 +0200 Rename the "center_on_scroll" option as "centre_on_scroll", but let the user use either spelling. various functions: Rename the "center_on_scroll" option as "centre_on_scroll". read_init_file(): game_options::read_options(): Add "center_on_scroll := centre_on_scroll" as an alias, so that either version is accepted by the game. I added this in two places because the game clears the alias list three times while loading a saved game. 1. before reading start-ns.prf 2. before reading -extra-opts-first options. 3. before reading the settings file. start-ns.prf should not contain centre_on_scroll, but the others may do. -------------------------------------------------------------------------------- a5bd08485e | Kieron Dunbar | 2020-11-10 19:16:16 +0200 Change the spelling of some words to Australian English. This changes a few words which are either displayed by the game, or are in documentation for it. I haven't changed the changelog, however, or anything in source/contrib. The words I've changed are: Canceled -> Cancelled (arena.cc) center -> centre (arena.txt options_guide.txt) centered -> centred (options_guide.txt) centers -> centres (options_guide.txt) Cudgeler -> Cudgeller (skills.cc) labeled -> labelled (english.cc item-name.cc) reveler -> reveller (god-abil.cc) Reveler -> Reveller (features.txt, godname.txt, gods.txt) traveled -> travelled (shout.cc) -------------------------------------------------------------------------------- a991c35b56 | Nicholas Feinberg | 2020-11-10 09:10:40 -0800 Mention zot clock in E (nikheizen) -------------------------------------------------------------------------------- cbe7412673 | Nicholas Feinberg | 2020-11-10 09:10:40 -0800 Partially unify mons explosion logic This should really be unified with mons-death::_explode_monster as well. -------------------------------------------------------------------------------- 2f2a4d8ed9 | Nicholas Feinberg | 2020-11-10 09:10:40 -0800 Turn more monster spells into zaps So that they show up in xv. (Still many left to do...) -------------------------------------------------------------------------------- 00c8f0b8f8 | wheals | 2020-11-10 19:04:18 +0200 Fix the path for quickstart.md [closes #1599] -------------------------------------------------------------------------------- 42995fd38d | wheals | 2020-11-10 19:03:56 +0200 Re-wrap quickstart.md to 80 columns -------------------------------------------------------------------------------- 310f398bab | Sebastian Łużyński | 2020-11-10 18:56:06 +0200 Update quickstart.md -------------------------------------------------------------------------------- cdce9d9c90 | Sebastian Łużyński | 2020-11-10 18:56:06 +0200 Update quickstart.md -------------------------------------------------------------------------------- 23cac7494c | Sebastian Łużyński | 2020-11-10 18:56:06 +0200 Update and rename quickstart.txt to quickstart.md Just because this doc has been made long time ago, doesn't mean it has to be rudimentary :D -------------------------------------------------------------------------------- 897f35e60b | Midn8 | 2020-11-10 18:31:05 +0200 Properly Punctuate small damage distortion I don't even know how long this was broken, attack.cc has had a comment claiming that it was fine since disto can't do more than 7 damage, but 7 damage is one ! already. Ideally someone will also fix harm to work properly with attack_strength_punctuation, but that's above my pay grade. [dev note: properly punctuated code --wheals] -------------------------------------------------------------------------------- f67cdfb8ac | Nicholas Feinberg | 2020-11-09 20:42:22 -0800 Make an obvious removal This field was used to determine whether enchantments should print 'nothing happened', but it was always false for enchantments. It did nothing. -------------------------------------------------------------------------------- 888258f25a | Nicholas Feinberg | 2020-11-09 17:26:40 -0800 Make !attraction ignore friends Pulling friends in spams messages when following an ally god (e.g. Yred) and doesn't really do much interesting, either helpfully or harmfully. I haven't changed the duration start/end messages because I enjoy them, though maybe I should. -------------------------------------------------------------------------------- 1f3e2359fb | Nicholas Feinberg | 2020-11-09 17:19:51 -0800 Accept that Swamp and Shoals can coexist (#1606) For now, at least! -------------------------------------------------------------------------------- 51bffae0b1 | Nicholas Feinberg | 2020-11-09 09:48:42 -0800 Make witches less prehensile (RandomCharacter) -------------------------------------------------------------------------------- ba241ef417 | Aidan Holm | 2020-11-09 20:08:51 +0800 IWYU part 3 -------------------------------------------------------------------------------- bcc0732031 | Aidan Holm | 2020-11-09 20:08:51 +0800 Even more IWYU -------------------------------------------------------------------------------- 32d1081ec2 | Aidan Holm | 2020-11-09 20:08:51 +0800 More IWYU and header dependency cycle breaking The primary intent of this commit was to remove options.h from the dependencies of beam.h, since it was only ever used to set a single struct field's default value. That can be done perfectly well with a constructor in a cc file. Of course, removing options.h from beam.h broke all kinds of other things that had come to depend on options.h being included from their dependencies, or, to be precise, on *dependencies* of options.h (mostly mpr.h in practice). What a mess. This change also adds five more headers to the set of headers that are buildable: i.e. they (transitively) include all their own dependencies. -------------------------------------------------------------------------------- 8c909bcb30 | Aidan Holm | 2020-11-09 19:54:22 +0800 Remove dead code (#12379) -------------------------------------------------------------------------------- b8432710ee | wheals | 2020-11-09 12:15:57 +0200 Zap Duvessa if Dowan gets zapped and vice-versa (Lightli) Plus let them generate again later. -------------------------------------------------------------------------------- 3fe0686644 | gammafunk | 2020-11-09 00:26:48 -0600 Revamp a Shoals ghost vault The vault ebering_ghost_davey_jones places a kraken (or two derived undead krakens) and a ghost, but it's trivial to separate the ghost-kraken alliance. Even with these two monsters together, the vault would be pretty easy. This commit revamps the vault to have a transporter, adds some extra critters, and reworks the themeing. Now only one kraken is ever placed, either normal or spectral, and there are accompanying monsters that match the normal/spectral themes. We now have deep sea creatures that an unfortunate seagoer who ended up in Davey Jones' locker might find, such as sea snakes, snapping turtles, and, rarely alligator snapping turtles (we'll pretend the turtles are sea turtles). There's also a merfolk with a nice weapon and a monster band. For the natural theme, this is an aquamancer and water elementals. For the spectral theme, this is a merfolk impaler where the impaler and its band all have draining weapons. The critters for the spectral theme are spectral versions of their natural counterparts. The loot has been somewhat buffed, and the internal layout is now symmetrical, but with some added walls that have a couple pattern variants. This new version of the vault should be nasty enough to get a few kills while hopefully offering some enticing rewards. -------------------------------------------------------------------------------- 671c95df35 | gammafunk | 2020-11-08 23:54:36 -0600 Adjust Trog-themed gifts in a ghost vault For gammafunk_ghost_wrathful_warriors, adjust the egos of the fancy monster weapon to be antimagic, flaming, and vorpal, the only three egos that Trog currently uses for weapon gifts. -------------------------------------------------------------------------------- 8b94a72193 | Nicholas Feinberg | 2020-11-08 20:19:00 -0800 Checkwhite -------------------------------------------------------------------------------- 3b90a50a07 | Nikolai Lavsky | 2020-11-08 20:05:02 -0800 Show monster spell damage on xv in WebTiles Commit 9d7e6eef added this functionality to console and Local Tiles. Also, since _effect_string() already returns a hex chance, deduplicate some code. -------------------------------------------------------------------------------- 1415c89e12 | advil | 2020-11-08 17:20:27 -0500 Fix some missed .s These don't matter for connectivity, but might confuse someone eventually if left. -------------------------------------------------------------------------------- 80fa9cfeba | advil | 2020-11-08 16:10:42 -0500 More transparency fixes This includes a complete pass over large_themed_abstract.des, providing explicit opacity masking for a bunch of these vaults. -------------------------------------------------------------------------------- 3149ed9209 | Nicholas Feinberg | 2020-11-08 07:58:44 -0800 Increase Hydra Form duration (Lici) The low duration was meant to make spellpower more relevant, but the headcount has the same effect with fewer keypresses. -------------------------------------------------------------------------------- 060e6a62af | Nicholas Feinberg | 2020-11-07 09:51:39 -0800 Allow rebranding weapons to spectral (hellmonk) Seems fun. Weights chosen fairly arbitrarily. I also considered allowing SPWPN_ACID, but it'd be a bit dicey code-wise. -------------------------------------------------------------------------------- 7bd0395729 | Nicholas Feinberg | 2020-11-07 08:35:38 -0800 Reorder the Necronomicon (Lightli) Fix spell level order. -------------------------------------------------------------------------------- 44ed55eb59 | advil | 2020-11-07 11:04:09 -0500 Isolate poly set rng This should keep the randomization here from having any impact on the builder. -------------------------------------------------------------------------------- c1cdef59ac | advil | 2020-11-07 10:52:55 -0500 lint -------------------------------------------------------------------------------- 1beca9d668 | advil | 2020-11-07 10:49:26 -0500 Isolate monster rng There's lots of reasons to do this already, but after the recent poly changes, the resulting rng state after every monster is dependent on the global set of what monsters are valid, meaning that adding or removing monsters would be highly likely to change every seed. So, isolate each monster roll entirely so that stuff like this does not affect level seeds. Needless to say, this commit itself breaks seed stability for every seed. -------------------------------------------------------------------------------- 000a8cebd8 | Nicholas Feinberg | 2020-11-07 07:43:46 -0800 Fix a dumb and pointless joke (advil) -------------------------------------------------------------------------------- 3ce79ab3db | Nicholas Feinberg | 2020-11-07 07:42:05 -0800 Fix polymorphing band members (advil) Ringo, look out! -------------------------------------------------------------------------------- 7121cf9b01 | Nicholas Feinberg | 2020-11-07 07:38:21 -0800 Add poly save compat for removed mons (advil) Very unsure about this code tbh... -------------------------------------------------------------------------------- a131f226cc | Nicholas Feinberg | 2020-11-07 07:38:21 -0800 Remove boomers What is it, 1963 in here? -------------------------------------------------------------------------------- 27f3346928 | Nikolai Lavsky | 2020-11-07 07:17:17 -0800 Fix display of hex chances on the xv screen After 424c9a47, xv displays hex chances only for spells of friendly monsters. -------------------------------------------------------------------------------- 3d92047569 | advil | 2020-11-07 09:54:24 -0500 Reorder, fix checks in _valid_type_morph Fix some old issues exposed by recent poly changes. It's possible that one of the many things in this disjunction would have checked for MONS_NO_MONSTER, but there was no direct check for it. In addition, checking holiness first is generally a recipe for crashes because it is a complicated check that presupposes valid monster data. In this case, this call guaranteed to crash on MONS_NO_MONSTER, so firing newpoly on such a monster would crash instead of show the "momentary change" message. -------------------------------------------------------------------------------- 5c39ac4411 | advil | 2020-11-07 09:37:52 -0500 More transparency fixes Mostly uninteresting, except for the aquarium fix, where I attempted to provide the correct explicit masking. This serial probably still needs some work in terms of decreasing veto likelihood. -------------------------------------------------------------------------------- 9cc10c1154 | advil | 2020-11-07 09:37:52 -0500 Skip portals for incomplete levels in veto debug mode Otherwise, pregen would lead to immediate generation of the portal level, out of sync with the order that it should actually be generated in in the seed. -------------------------------------------------------------------------------- 956f22bcb3 | advil | 2020-11-07 09:37:52 -0500 Let post-place fill heuristics remove doors This does occasionally come up in practice, usually for a layout that uses lots of doors; for the cases I've seen there's nothing close to worth vetoing about when a door is trapped in a small isolated area. -------------------------------------------------------------------------------- 626ac9e51a | Nicholas Feinberg | 2020-11-06 19:37:02 -0800 Update the changelog Reorganize sections by maximum interest, trim out many items that are not important enough to include in the changelog, fix style, and add new entries. -------------------------------------------------------------------------------- 10fd84bd02 | Nicholas Feinberg | 2020-11-06 18:19:58 -0800 Remove a dubious assert -------------------------------------------------------------------------------- 9e3f510199 | Nicholas Feinberg | 2020-11-06 17:18:10 -0800 Remove devouring swarms (again) Oops. -------------------------------------------------------------------------------- 6ee961360c | Nicholas Feinberg | 2020-11-06 17:14:52 -0800 Despoiler /poly (gammafunk) Pre-choose a set of 3 monsters that any given monster can turn into (filtering by holiness & habitat and weighting by HD and demon tier), and display them on the /polymorph targeter. This should make it much more possible to make tactical choices about the use of /polymorph. This does not affect other sources of polymorphing, such as Xom or Nem. -------------------------------------------------------------------------------- 4680b4fa2e | Nicholas Feinberg | 2020-11-06 07:36:07 -0800 util/monster brand fixes Mention goliath froges' acid and fix an unhandled case warning. -------------------------------------------------------------------------------- cff87cac9a | advil | 2020-11-05 16:57:42 -0500 Fix args for map_by_tag (12370) Nothing ever uses this argument for the non-default value, not sure why it exists. -------------------------------------------------------------------------------- e9cb82248d | advil | 2020-11-05 15:49:35 -0500 Fill disconnected zones more aggressively But, only fill floor tiles (in contrast to the initial implementation). -------------------------------------------------------------------------------- 16e837b731 | advil | 2020-11-05 15:49:35 -0500 A few more transparent tags where opacity seems more likely to lead to vetoes. -------------------------------------------------------------------------------- f8554c3447 | advil | 2020-11-05 15:49:35 -0500 Improve layout_gridlike's handling of water/lava (Skrybe) This fixes a couple of bugs at once: * layout_gridlike was forcing vetos if it generated shallow water closed rooms, because they registered as disconnected areas. * closed rooms acted as tele closets for species that could inhabit the terrain. It might be better to do this on a bit more of a case-by-case basis to avoid placing no_tele_into in some corner cases (outer material plants, inner material shallow water). However, I think that overkill is better than underkill, and a comment by @Skrybe in the issue thread provided a ready-made solution. Resolves #1234. Also mantis 7563. -------------------------------------------------------------------------------- 080276ff0c | advil | 2020-11-05 15:49:35 -0500 Don't by default mask vault exits as opaque The problem this commit is solving is that opaque vaults rely on their exits being connected to some non-vault squares in order to properly test for connectivity, and I want to apply post-placement heuristics that do things like fill small disconnected areas (as in preceding commit). This change allows an opaque vault to veto correctly if its exit ends up leading to a wall because of such heuristics. It would be possible to explicitly mask exits as opaque in order to add optional exits; this commit effectively forces all exits to participate in connectivity by default. For a completely internally-connected vault with multiple exits, this commit may make placement harder. However, the solution for such vaults is simply to mark that vault as transparent. (Possibly, all vaults should be transparent by default.) -------------------------------------------------------------------------------- f05d8d7428 | advil | 2020-11-05 15:49:35 -0500 Fill small boring disconnected areas in the builder Often, when vault placement doesn't happen to align well with the level layout, small bits of the level might get cut off and isolated. This will trigger a veto, making hard-to-place vaults even rarer. This is a reasonably common source of vetoes in depths, in particular, in my testing. This commit adds a post-place heuristic that attempts to fill in small disconnected regions with no stairs. This is effective in many cases, but while vaults default to non-transparent, it is risky: the builder relies on an opaque vault's exit being connected to something that is not masked as opaque, and uses that something as a proxy for level connectivity in general. So if an opaque vault is connected to a small space that this change would fill in, that vault gets disconnected from the rest of the world. A future commit will deal with this issue by making exits transparent even on opaque vaults. -------------------------------------------------------------------------------- 6599e89576 | Nicholas Feinberg | 2020-11-05 11:32:18 -0800 Tweak new swamp monsters Turn goliath frogs down a bit across the board; they've been killing more than expected. (This might need further adjustments; we'll see how this first pass goes.) Tune up fenstrider witches very slightly, partially because I thought of a funny number joke. -------------------------------------------------------------------------------- ca8acebb32 | Nicholas Feinberg | 2020-11-05 11:29:11 -0800 Adjust XP evocable prices Since they recharge now, they should be significantly more valuable than when they only had one use. Condenser Vane never had a price set at all, and was using default pricing, which seems like an error. Lightning Rod is currently a bit weaker than the others; until/unless we want to change that, price it accordingly. -------------------------------------------------------------------------------- e31f27f013 | Nicholas Feinberg | 2020-11-05 11:26:19 -0800 Adjust XP evoker charges Some of the new XP evokers were substantially stronger than anticipated, and were available too often, making it hard for players to end up in truly dangerous situations. Turn down the maximum charges and up the XP required to recharge. -------------------------------------------------------------------------------- dd1942f9f2 | Nicholas Feinberg | 2020-11-05 10:53:27 -0800 Fix compilation -------------------------------------------------------------------------------- 46561c67a8 | Nicholas Feinberg | 2020-11-05 10:42:51 -0800 Remove the Cool S Hand-truncate LCS. -------------------------------------------------------------------------------- 9d7e6eefc7 | Nicholas Feinberg | 2020-11-05 10:29:25 -0800 Show monster spell damage on xv It seems quite easy for the player to interpret, since they know their own HP and AC - we show monster melee damage with the same reasoning - and it's nice to have ready to hand. Doesn't support some weird spells (yet!). Accuracy would also be good to have but I'd need to think about formatting. -------------------------------------------------------------------------------- 424c9a4717 | Nicholas Feinberg | 2020-11-05 10:08:16 -0800 Refactor some beam/spell code -------------------------------------------------------------------------------- f55cbd344a | Nicholas Feinberg | 2020-11-04 21:28:14 -0800 Replace potions of stabbing with attraction Potions of stabbing didn't quite hit the mark as a design. They weren't particularly popular with players, perhaps because their niche wasn't just narrow but *extremely* narrow. So, let's try another idea. Potions of attraction cause the player to magically pull nearby monsters toward them while the duration lasts, a bit like Mass Lesser Beckoning. (Greater Beckoning?). It currently pulls 3 tiles per turn, though I could see 2 tiles or full LOS also being reasonable. The idea here is for melee characters to have something to help them with ranged enemies, though quite situationally! I also considered making this pull items, as a sort of very silly apportation variant. Maybe it should? Right now this doesn't wake up sleeping enemies, since it seemed fun to have it help with stabs, too. If that's too strong, we can make it more annoying (to enemies, waking them). -------------------------------------------------------------------------------- 91b530ce93 | Nicholas Feinberg | 2020-11-04 08:18:02 -0800 Make !brilliance halve mp costs Make it a bit more impactful for more spells while still encouraging players to plan their consumable use in advance, rather than using them as last-second emergency buttons. -------------------------------------------------------------------------------- 4e9f4955e2 | Nicholas Feinberg | 2020-11-03 08:49:10 -0800 Add Curl status Maybe should be Uncurl? -------------------------------------------------------------------------------- 81720017eb | Nicholas Feinberg | 2020-11-03 08:10:00 -0800 Increase broad axe delay It's a little too easy to get this rather strong weapon online. Comparing to, for example, a battleaxe, the broad axe gave the ability to use a shield for only -2 base damage and *less* skill required to reach mindelay! That sort of dynamic is fine when we're comparing rare weapons to common ones (e.g. double sword vs great sword, eveningstar vs great mace), but broad axes are quite common. Per objstat, there are about 13 broad axes in the average 3 rune game, with perhaps 1 appearing in D, 1 in Lair, etc. That's over 13 times as common as the rare 1h weapon types, and appearing much earlier. It's possible that there should be a comparable split for axes, with a 'common' and 'rare' 1h axe in the same way that we have scimitars and double swords or morningstars and eveningstars. For now, though, increasing the skill requirement for broad axes seems like the best way to keep them a viable endgame weapon while making other weapons a bit more competitive. -------------------------------------------------------------------------------- 747a3e5df7 | Nicholas Feinberg | 2020-11-03 07:56:24 -0800 Remove devouring swarms The insect egg gimmick was quite complex and was surprisingly hard to trigger in practice. We might bring these back at some point, maybe with tweaks (let them egg uninjured monsters too? Do a starcursed-style splitting thing?), but they aren't needed for now. -------------------------------------------------------------------------------- c4ff5c6fff | Nicholas Feinberg | 2020-11-03 07:56:24 -0800 Add unused Kitsune art (amcnicky) -------------------------------------------------------------------------------- a43efd798e | Nicholas Feinberg | 2020-11-03 07:56:24 -0800 Force Swamp generation for testing -------------------------------------------------------------------------------- 4a85d98726 | Nicholas Feinberg | 2020-11-03 07:56:21 -0800 Adjust swamp level generation - Don't generate deep water, for gameplay & to differentiate further from Shoals. - Reduce monster count by about 20% to keep XP balanced after removing chaff from spawn tables. - Shrink the playable area by about 20% to compensate and encourage wandering monster fights. Enlargen the old swamp layout (though still smaller than it was before the changes) and shrink the falls layout. Total number of open floor tiles is similar to the old one, though with fewer floor tiles and more shallow water. -------------------------------------------------------------------------------- fbaea20957 | Nicholas Feinberg | 2020-11-03 07:56:21 -0800 Rework Swamp vault spawns Remove unused or overly weak monsters and add in a few of the new ones. (Another pass could easily be done.) -------------------------------------------------------------------------------- c718ee2908 | Nicholas Feinberg | 2020-11-03 07:56:21 -0800 Rework Swamp spawns Remove excessively weak and/or over-used enemies, add new enemy types to replace them. See https://bit.ly/37EnXHw for details on the original plan. -------------------------------------------------------------------------------- 16a901b091 | Nicholas Feinberg | 2020-11-03 07:56:21 -0800 Adjust Swamp monster XP multipliers Get their XP a bit closer in line with their threat. -------------------------------------------------------------------------------- 4e600ef69d | Nicholas Feinberg | 2020-11-03 07:56:21 -0800 Buff bog bodies - Merge the 4-damage AF_COLD touch attack (which did essentially nothing against any player with nonzero AC) into the main attack. (Drop damage to 20, for parity with lich touch attack.) - Increase HD so that the Slow has a better chance of affecting the player. No change to HP, AC, etc. Bolt of Cold goes from 3d14 to 3d18, which should be a fun time for players. I checked through vaults and didn't see anything obviously in need of adjustment. -------------------------------------------------------------------------------- e66032fabe | Nicholas Feinberg | 2020-11-03 07:56:21 -0800 New monster: bunyip Bunyips are an Australian cryptid of unclear description. This implementation of them treats them as a sort of lesser juggernaut, hitting for 40 three times. (Their defenses are substantially weaker than the real juggernaut.) They also have howler monkeys' warning cry, which they can waste some time with to give players more of a chance to kill them or flee. -------------------------------------------------------------------------------- c768f44cc1 | Nicholas Feinberg | 2020-11-03 07:56:21 -0800 New monster: bloated husk Intended for use as an early Swamp enemy, bloated husks charge at the player at 14 speed and explode, dealing 8d8 physical damage to everything in radius 2. They're a bit similar to lurking horrors (but much simpler and easier to deal with) or to ballistomycetes (but with actual HP and without the very complex spore mechanics). -------------------------------------------------------------------------------- fe851a36d1 | Nicholas Feinberg | 2020-11-03 07:56:21 -0800 New monster: will-o-the-wisp A mid-tier swamp threat, will-o-the-wisps blink around and toss very high power Foxfires at the player. Formerly known as kitsune. -------------------------------------------------------------------------------- 311c5d996d | Nicholas Feinberg | 2020-11-03 07:56:21 -0800 New monster: fenstrider witch Like Baba Yaga, but instead of putting chicken legs on her hut, she just wears em straight up. Wanders around tossing paralyse and melee agony and Toxic Bog attacks at the player. Intended as a top-tier Swamp threat. -------------------------------------------------------------------------------- 1c73956973 | Nicholas Feinberg | 2020-11-03 07:56:09 -0800 New monster: devouring swarm Intended as a top-tier threat for Swamp, devouring swarms are fast batty melee attackers that spawn with friends. Any monster unfortunate enough to be wounded while near a swarm will find its wounds filled with insect eggs, which, if the monster dies before getting a chance to pick the eggs out, will burst out into a new durably summoned swarm. -------------------------------------------------------------------------------- 575ee1b540 | Nicholas Feinberg | 2020-11-03 07:55:40 -0800 New monster: eleionoma Like water nymphs, but for swamp trees. Can teleport into trees near their target, toss out a nasty 'wooden splinters' BEAM_FRAG 3-range spell (shorter-range, weaker metal splinters), and heal themselves if adjacent to trees. Incentivizes the player to move away from trees and into the shallow water, which usually has its own downsides! -------------------------------------------------------------------------------- bc92e201c8 | Nicholas Feinberg | 2020-11-03 07:55:40 -0800 New monster: goliath frog A low-tier Swamp threat with a reaching acid tongue attack. Real-life monster! -------------------------------------------------------------------------------- 2a1d101370 | advil | 2020-11-01 16:14:25 -0500 Add vault info to local tiles wizmode dungeon tooltips Same formatting as vault info in `x`. -------------------------------------------------------------------------------- 873d9191df | advil | 2020-11-01 16:13:22 -0500 Disable dungeon scan in veto debug mode This is so that save/reload is possible while on vetoed levels, otherwise they may break all sorts of checks. -------------------------------------------------------------------------------- e0bddc962e | advil | 2020-11-01 15:31:43 -0500 Fix some veto-triggering issues This is mostly a matter of adding `transparent` to more vaults, but in some cases I found issues with the vaults themselves that led to disconnected areas needing a tweak to some cells or some explicit opaque masking. Hopefully the additional `transparent` tags don't lead to further issues, but as long as the vault genuinely lacks disconnected regions, as far as I can tell it is always better to have it be tagged transparent, even for vaults with a small number of exits. -------------------------------------------------------------------------------- 38e0a6d103 | advil | 2020-11-01 15:26:18 -0500 Add a rudimentary veto debugging mode This mode modifies the builder so that, after a wizmode travel command or &ctrl-r (reload level), instead of retrying on a veto, it exits immediately. The effect is that you can look at the partially completed level, and together with the builder log (&ctrl-l on a fulldebug build), get a sense for why the veto happened. This is implemented with stable seeding, so that level reload should resume exactly where the builder left off. This is implemented via an #ifdef because the game isn't good for much else in this mode and anyone who is using this is running a fulldebug build and so can rebuild anyways, but it could in principle be implemented with a more user-friendly interface as an option or something like that. -------------------------------------------------------------------------------- 525c905980 | advil | 2020-11-01 13:23:00 -0500 Fix a bad hex multiplication in a bitfield This was probably a decimal multiplication by accident. This bug should have led to all passable squares being counted as past door mimics (at least inside the relevant door check, maybe most squares would have been filtered before that), and all no_mimic squares being passable, but these interactions don't seem to have mattered much. I'm pretty sure this change is innocuous for save compat... -------------------------------------------------------------------------------- 33af53a816 | advil | 2020-11-01 12:37:26 -0500 Fix another slowdown in wrapping large strings The problem here seems to be that formatted_string::operator[] does not scale well with string length. This may be relatively unavoidable, but for strings that are already mostly wrapped in a reasonable way, we can avoid the penalty by only inserting linebreaks when they aren't already there. -------------------------------------------------------------------------------- 10d74db38b | advil | 2020-11-01 12:18:55 -0500 Lower a polynomial for linewrapping in local tiles When looking for lines that exceeded the wrap width, this code, for each line, unnecessarily scanned through the entire remaining string, doing glyph width calculations the whole way. Needless to say this made linewrapping (and therefore Text rendering) quite a bit slower for very large text boxes in tiles. This change only checks for this case on the current line. (Even with this change, Text rendering speed is not acceptably fast for large textboxes in tiles, e.g. from builder output in a debug build, so something else is still going on.) -------------------------------------------------------------------------------- a1a73b7a55 | advil | 2020-11-01 11:19:54 -0500 Improve Text wrap recalculation checks This function is *extremely* slow for large text boxes on local tiles, and this check eliminates some level of re-calling when doing initial widget sizing. I think there's still something wrong with this call somewhere deeper in that I haven't figured out, but this helps somewhat at a global level. -------------------------------------------------------------------------------- a5a9c9c9d0 | advil | 2020-10-30 18:04:53 -0400 Fix catch2 mock player setup The code that needs this check seems ... not ideal? -------------------------------------------------------------------------------- daff8a7cd0 | advil | 2020-10-30 14:54:52 -0400 Generate temple before dungeon This moves Temple before D in the pregen order, and pregens it during setup for normal games. The level is fully decided at this point, and it shouldn't interact with the rng for any other level, so order effectively doesn't matter anyways. This is a long-requested feature to avoid the popup where entering temple forced pregeneration of the rest of the dungeon. -------------------------------------------------------------------------------- 95a0c6c400 | advil | 2020-10-29 14:47:48 -0400 Attempt to fix contrib zlib on mac gha builds This adds a missing header file that is now triggering errors instead of warnings on this build. The crawl-zlib repository is in a somewhat confusing state, so while it might be nice to update the zlib version, I was not able to figure out how to do that. -------------------------------------------------------------------------------- fed77ec54f | advil | 2020-10-29 12:30:40 -0400 Improve handling of builder failures with pregen Before pregen, a builder failure would lead to a force save, and a new attempt to generate the failed level on load. After pregen, something similar would have most likely happened, but on load the player would (I think) be teleported to the failed level and pregen would break. At some point I added an ASSERT to the save code for other reasons that would trigger on this case, so most recently the builder would crash without saving, leading to a broken save (but that could be played up to a point). This commit restores a version of the original behavior. If the builder fails, the game will force-save and then crash. The save step discards the builder's attempts, but keeps the effect on the rng, so that the level seed will be different on the next attempt, and most likely succeed. The end result is still deterministic overall given a starting seed. When the player loads the save, the builder picks up where it died. I have been testing this in trunk with seed 17783394655777042589, which triggers a builder failure (50 vetoes in a row) on depths 3. This commit also contains a small improvement to the messages API which didn't end up being needed for the final implementation, but is still a useful addition. -------------------------------------------------------------------------------- 17f3b190f9 | Nicholas Feinberg | 2020-10-26 17:20:20 -0700 Bring back the Black Knight's barding It doesn't really do anything particularly thematic, but it does let you get extremely slow nagas, which is pretty funny. This commit also fixes a CRITICAL bug with nagas and any source of ponderousness. -------------------------------------------------------------------------------- 31817bcca1 | Aidan Holm | 2020-10-26 00:15:59 +0800 Add GitHub Actions CI check for header-build-tests This should prevent accidental backsliding as we work towards fixing our header file mess. -------------------------------------------------------------------------------- fd3871438b | Aidan Holm | 2020-10-26 00:11:56 +0800 Add build test for headers with fixed includes This helps verify that headers are including everything they use (IWYU), since if they are not, compilation will fail. We don't actually do anything with the compiled objects. This complements implicit checks for cc files, which must include their dependencies because they could not successfully compile otherwise. This commit only includes a subset of all header files. Header files can be appended to this list as they are fixed. -------------------------------------------------------------------------------- 37461d386a | Aidan Holm | 2020-10-26 00:11:56 +0800 Split debug defines out of AppHdr.h These defines sync DEBUG and NDEBUG. Normally, I'd do this in the Makefile, which would ensure that all compilations have only one of these defined, but unfortunately different compilers provide different options. Instead, we can move this to its own header file. This allows it to be included from debug.h, which depends on these rules to verify that they are not out of sync. Really, all .h and .cc files should include this, as header files may define static functions which contain asserts, which would otherwise invoke the assert macro before possibly defining NDEBUG. Probably the ideal solution in the general case is to have a single header file that all other headers must include. This should be extremely minimal, containing only definitions that are vital for correctness, such as this DEBUG/NDEBUG syncing. Specifically, convenience definitions should not be included: AppHdr.h is already a mess in this regard. -------------------------------------------------------------------------------- 35ab6135f1 | Aidan Holm | 2020-10-26 00:11:56 +0800 Fix includes for some commonly used header files -------------------------------------------------------------------------------- 5745fe7e1e | Aidan Holm | 2020-10-26 00:11:56 +0800 Add includes, using statements for std::vector -------------------------------------------------------------------------------- e1b933468a | Aidan Holm | 2020-10-26 00:11:56 +0800 Fix includes for all foo-type.h headers -------------------------------------------------------------------------------- d4e364d7e7 | Aidan Holm | 2020-10-26 00:11:56 +0800 Split kill_method_type enum into its own header file Going full IWYU is difficult doe to tangled dependencies between different files. Breaking this enum into its own file will break one of these cycles. -------------------------------------------------------------------------------- a620742f1a | Aidan Holm | 2020-10-26 00:11:56 +0800 Make some mon-ench methods private -------------------------------------------------------------------------------- 1d075126af | Aidan Holm | 2020-10-26 00:11:17 +0800 Add BUILD_ALL=1 build tests to GHA CI These are only run for TILES builds for clang/gcc, since they have the widest set of dependencies and will therefore likely catch issues with webtiles/console builds. -------------------------------------------------------------------------------- a618de3f7c | Nicholas Feinberg | 2020-10-25 08:44:30 -0700 Appreciate the great tradition of curling To make palentongas a bit more interesting, and to synergize with their 'roll into a bunch of enemies' power, give palentongas a passive 'defensive curl' mutation at XL 7. This gives them +7 AC after they've been hit, lasting until the *start* of their next turn. In short, it makes them tougher against multiple enemies or against multi-hit enemies like hydras, somewhat like the inverse of how shields work. The main issue here is communication. I'm not sure how best to demonstrate to the player that this is happening on subsequent hits without spamming 'you curl/you uncurl' messages after every hit. The behaviour in this PR has no spam but is also super easy to miss entirely. Suggestions welcomed! -------------------------------------------------------------------------------- 110436ef5a | Aidan Holm | 2020-10-25 21:18:14 +0800 Fix ccache not working on GitHub Actions CI ccache was not working for a number of reasons. First, the compiler was not being invoked through ccache: this requires invoking the compiler via a symlink named after the compiler binary that points to the ccache binary.. An alternative method is to add a directory containing preprepared symlinks to the PATH. alexjurkiewicz/setup-ccache does this, but it seems the path it prepends is incorrect. Next, GHA will not actually *update* the cache contents if the cache was restored with a direct key match! In order to fool GHA into doing so, we append the SHA1 of the commit being tested, ensuring that each cache save is saved with a unique key (jobs with the same SHA are disambiguated by matrix parameters). Cache restoring therefore relies on partial matches, and will restore the most recently saved cache snapshot. However, GHA cache restore prefix matching apparently requires a dash at the end of each pattern in order to match. This isn't documented explicitly (of course), but all their examples use this format, and adjusting this caused GHA to correctly restore the most recent cache. This commit also zeroes the ccache stats before running, so that the stats printed at the end reflect only the current compilation job. If ccache breaks in the future, this will ensure that we aren't fooled by the cache being restored, but never used, and showing old stats. With high hit rates, this roughly halves runtime, from ~15 minutes to ~6 minutes. Major remaining sources of latency: - ~3 min: collecting coverage with lcov. - Install requirements/dependencies: ~1.5min for gcc, 2min for clang. - actions/checkout: ~40sec. Of these, installing requirements/dependencies can probably be optimized by caching the package manager cache directories. -------------------------------------------------------------------------------- f6cc0c2728 | gammafunk | 2020-10-25 02:28:12 -0500 Add a missing wall (n1000) A bottom-right corner square was missing, thus making the vault accessible from outside without use of transporter (if you could get past the statue). -------------------------------------------------------------------------------- 987792ac36 | wheals | 2020-10-24 20:09:20 -0400 Don't crash when a monster kills itself with Primal Wave. Could happen with Ru retargeting. -------------------------------------------------------------------------------- 74916bafe0 | Aidan Holm | 2020-10-24 23:29:10 +0800 Add missing std:: in enum.h Since this is a header file (and the most widely used one at that), I'd like to avoid adding 'use namespace std;' here. -------------------------------------------------------------------------------- 8259087177 | Aidan Holm | 2020-10-24 23:29:10 +0800 Add missing '#pragma once' lines to headers -------------------------------------------------------------------------------- 3815df7bac | Aidan Holm | 2020-10-24 23:29:10 +0800 Move a bunch of preprocessor macros out of AppHdr.h Currently, most headers are not self-contained; they often refer to symbols that they do not themselves import. This is pretty awful and tends to flummox code analysis tools, as well as making automated refactoring quite challenging (since you cannot simply include a header). This commit splits a bunch of widely used macros out of AppHdr.h, which is the pre-compiled header for DCSS. Unfortunately it's accumulated a bunch of other cruft which really doesn't belong there; these macros are commonly used in headers as well, but it's unwise for headers to import AppHdr.h, since it has many dependencies by design. We're keeping the 'using namespace std' for now, but it'd really be better if we can slowly remove this... it's especially bad to include in headers, since it extends to anything that includes them. -------------------------------------------------------------------------------- 3f4b01202a | Aidan Holm | 2020-10-24 23:28:31 +0800 Add tag-version.h includes These files all use TAG_MAJOR_VERSION, and so should all include the header which defines that: tag-version.h -------------------------------------------------------------------------------- cb57259078 | Nicholas Feinberg | 2020-10-22 19:51:38 -0700 Fix always_show_zot (vt) Don't claim you're always bezotted while the option is on. -------------------------------------------------------------------------------- c93c913f66 | Nicholas Feinberg | 2020-10-22 14:53:20 -0700 Don't let rolling boulder beetles push (ardl) It's bad boulderfeel. -------------------------------------------------------------------------------- 3ec5dac9c6 | Nicholas Feinberg | 2020-10-22 14:53:20 -0700 Randomize roll duration more precisely Don't round to integer player turns. (This mostly doesn't matter, but it's nice.) -------------------------------------------------------------------------------- c79dab02b1 | Nicholas Feinberg | 2020-10-22 14:53:20 -0700 Decay rolling over time It would (essentially) never expire before, despite having a duration. -------------------------------------------------------------------------------- cdb31674f6 | Nicholas Feinberg | 2020-10-22 14:53:20 -0700 Make boulder beetles slower than speed 100 The original commit claims they roll at speed 20. Let's do that. -------------------------------------------------------------------------------- 974c44d4c8 | Aidan Holm | 2020-10-22 20:12:51 +0800 Split env.tile_* fields into a separate global Currently a lot of widely used objects are grouped together into the env global. While env thankfully doesn't have any behaviour itself, this has the unpleasant effect of obscuring the actual dependencies between objects: everything depends on env because everything is in env, and since it's already widely used, it can easily accrete more stuff, causing a snowballing effect. This commit breaks a subset of tile drawing related fields into their own separate global "tile env" object. The presence of this global isn't great, but it's much better than lumping everything together: env.h is included 119 times, while the newly-added tile-env.h is now included only 23 times: around a sixth of the users. This not only clarifies the dependencies involved, but will also aid compilation time: if this file needs to be changed, recompilation will be six times faster. Of course, ideally none of the functions involved need to pass around data in global mutable state. With smaller globals with a smaller number of users, analyzing the structure of data transfer is now tractable, and hopefully this "tile env" global can be pulled apart and refactored further. -------------------------------------------------------------------------------- cf72488783 | Aidan Holm | 2020-10-22 20:12:12 +0800 Add some test cases for coordit.cc -------------------------------------------------------------------------------- 5206c1d7ac | Nicholas Feinberg | 2020-10-21 12:10:56 -0700 Note aux armour in stash search -------------------------------------------------------------------------------- 294304f6e8 | Aidan Holm | 2020-10-19 23:44:45 +0800 Remove igrd() helper macro -------------------------------------------------------------------------------- f84b0316f6 | Aidan Holm | 2020-10-19 23:44:45 +0800 Remove mgrd() helper macro -------------------------------------------------------------------------------- e1d8dbde34 | Aidan Holm | 2020-10-19 23:44:45 +0800 Remove grd() helper macro -------------------------------------------------------------------------------- 4c0a3a5005 | Aidan Holm | 2020-10-19 23:44:45 +0800 Remove mitm() helper macro -------------------------------------------------------------------------------- 4ee14324bd | Aidan Holm | 2020-10-19 23:44:45 +0800 Remove menv() helper macro Rationale: these helper macros allow slightly briefer references to the same object, but are more obscure: they hide the fact that a single global object is being referenced, and have inconsistent spelling. They also make it somewhat harder to use IDE/text editor tools to jump to definitions and find references. Simply referring to these objects via the env global is much clearer and more user-friendly. -------------------------------------------------------------------------------- 3c51cfd513 | amcnicky | 2020-10-19 22:41:23 +0800 Give Edmund a weaponless tile, fixing #1453 -------------------------------------------------------------------------------- 62c44f1a97 | gammafunk | 2020-10-19 07:37:47 -0500 Adjust doors in a runed door vault Make the entire entrance to gammafunk_indiana_jones runed to avoid autoexploring into a Zot trap, and to generally improve the structure of the vault. Keep the "trap" gate as a (non-runed) clear door, but the final door normal, since the glass around it takes care of visibility. Also make the glass stone instead of rock. -------------------------------------------------------------------------------- 30791e7224 | gammafunk | 2020-10-19 07:37:45 -0500 Some transporter vault adjustments Some placement adjustment for various transporter vaults to make their placement more appropriate. gammafunk_its_a_trap: Remove placement from Shoals, where the vault is generally too large for the islands generated by the layout, and Swamp, where a large stone structure doesn't fit in as well thematically. I've left them in Snake, which has a more dungeony layout that fits and spider, where the stone structure meshes well with the cave-like layout enveloping it. There is a theme issue that's similar to Swamp, but it's nice to have transporter vaults in half of our Lair branches. For later branches with relatively shallow or just absent out-of-depth monster sets, supplement the 8-tier monsters with some specially selected ones, using the same choices as gammafunk_dig_for_victory. emtedronai_trogs_sanctum: Add placement to Orc, since this is certainly a suitable place for this vault, but using more of the "ogreish' monsters over too many orc knights. gammafunk_sealed_arena: Add to all four non-Slime S branches, taking a bit of care to use the right statue Shoals and wall types for Swamp and Spider. Also add to Orc and Pan. -------------------------------------------------------------------------------- 18554e4600 | gammafunk | 2020-10-19 07:32:14 -0500 Add transporter vaults to Vaults With c7717499, we can now place transporter vaults in Vaults. This commit adds such vaults to this branch as "hard" vault rooms. The structure of Vaults branch room vaults is such that vaults often need substantial internal changes in order to be suitable. That usually requires a separate vault definition, but these transporter vaults work directly as vault rooms, so I've just given them the necessary tags. For some vaults, I've added a border of floor around the vault that is removed when not placing in Vaults branch. I experimented with simply not having this, which would have allowed the vaults to connect two otherwise disconnected areas, as they can do when placing outside Vaults, but the vaults sometimes placed in rooms so that one side was disconnected from the rest of the map. The necessary "passable" tag disables checks against this that would otherwise normally generate a veto, so I'm forced to add this path border. Ideally the zone validation would know how to path through transporters so we wouldn't need "passable" at all, but mumra's approach works for now. For vaults with thematic monsters, I made appropriate choices that are usually a mix between late Dungeon and Depths, since Vaults shares a lot in common with both areas. Generally all monsters used can already place in Vaults, since this is a stipulation these vaults already use for each branch. -------------------------------------------------------------------------------- 44785f12d5 | Peter Hurst | 2020-10-19 03:34:53 -0500 Add a tag to set vaults as passable In Vaults layouts, rooms are tagged 'transparent' by default in order to check the whole level connects up properly. Some vaults may contain enclosed areas, e.g. transporter vaults, so an escape hatch is needed to prevent the builder from seeing these as disconnected zones. Commiter's Note: Removed a linebreak from dungeon.cc and rewrapped commit message body. -------------------------------------------------------------------------------- 1df16c3386 | Nicholas Feinberg | 2020-10-18 22:08:24 -0700 Rephrase lifesaving desc "Watches over you" is poetic but very vague. "Guards your life" might be at least a little clearer as to what it does. Probably there's a better phrasing yet... -------------------------------------------------------------------------------- ab205098cb | Umer Shaikh | 2020-10-18 22:08:24 -0700 Check right god for life-saving in god description Currently describing a god checks your passives when deciding whether to print something for the protect_from_harm passive. This leads to errors in both directions: the passive is spuriously indicated when describing gods that don't give it if you happen to be worshipping a god that gives it, and is not printed for gods that do give it if you're not worshipping them. After this commit the god description checks whether the god being described gives that passive. (Committer's note: did a bit of refactoring.) -------------------------------------------------------------------------------- 578ab304f5 | Aidan Holm | 2020-10-19 00:15:38 +0800 Fix out-of-bounds access (wheals) This bug was introduced in b5bd653, which changed some code to use an adjacent_iterator in passing, but neglected to adjust the expression used to derive the adjacent coord_def. -------------------------------------------------------------------------------- b5bd6537f4 | Aidan Holm | 2020-10-18 16:37:39 +0800 Remove references to globals across files I found three separate instances of functions reusing a global variable exposed by travel.cc for their own scratch space, all for mild variations on the same BFS algorithm. This commit replaces that with a local variable, and one of a more sensible type as well; only a boolean visited / not visited state needs to be tracked. I don't quite have the energy to properly extract these right now, but these would possibly be a good candidate for unit testing. -------------------------------------------------------------------------------- d58323b419 | Nicholas Feinberg | 2020-10-17 22:21:32 -0700 Make bats less anthrosolipsistic Batty monsters' behaviour depended on player turns, not monster turns, which created strange and counterintuitive incentives. If you wanted batty monsters (e.g. summoned harpies from Monstrous Menagerie) to attack more often, attack the air with a short blade. If you wanted them to attack less often, use a slower weapon. This commit changes batty monsters to move randomly for exactly 3 turns after attacking (for most monsters - harpies and thrashing horrors a little less, spatial maelstroms a little less yet). It ends up looking pretty similar, in my limited testing. -------------------------------------------------------------------------------- 92642533e4 | Nicholas Feinberg | 2020-10-15 08:04:34 -0700 Make pacified monsters visible (hellmonk) To avoid accidental penance with Ely and to make it a bit more consistent with friendly monsters. This mostly, but not exclusively, affects Ely worshippers. -------------------------------------------------------------------------------- ee0ae89446 | Nicholas Feinberg | 2020-10-15 07:27:42 -0700 Mark ratskin as evil (12373) Since its hell rats will trigger ely wrath, apparently? -------------------------------------------------------------------------------- efeb406119 | gammafunk | 2020-10-12 18:12:00 -0500 A boulder beetle transporter vault In gammafunk_boulding_lane, the player transports into the far side of the vault with one to three boulder beetles at the far side. If you can manage to get in before the boulder beetles all see you, you might avoid their rolling down the lanes as they look to mark a strike. The loot always contains a pre-identified pair of boots of rampaging (which can be barding). The number of beetles and loot quality and quantity scales with depth, with up to 3 beetles appearing along with an eventual torpor snail. The loot scales up to artefact quality boots and another star_item. -------------------------------------------------------------------------------- c8b27b8fc1 | gammafunk | 2020-10-12 06:57:06 -0500 A themed vault with boulder beetles In gammafunk_indiana_jones, you find the corpse of adventurer in a narrow, spider-filled corridor leading to a "trap" room with a boulder beetle (or two or three), that further leads to a trapped treasure room. In earlier depths, this is flame clouds in front of lava snakes (snakes...why did it have to be snakes...), and later on this becomes a room with fast moving spiders and Zot traps. If the player fights the beetle(s) in the long corridor, they're fairly likely to get flattened by a rolling bug. The loot consists of the characteristic whip and hat near the corpse, which scales in quality and with the whip eventually becoming a demon whip, along with jewellery plus possible gold in the treasure room. The monsters and traps likewise scale in number and dangerousness with depth, increasing the number and dangerousness of spiders as well as the number of boulder beetles. It'd be nice to better decorate this vault in Tiles with a more forest temple theme, but there aren't very appropriate stone wall tiles for this purpose. -------------------------------------------------------------------------------- 36e8fdb655 | Nicholas Feinberg | 2020-10-09 12:02:22 -0700 Shrink hell sentinels back down I'd misunderstood the context of a request. -------------------------------------------------------------------------------- 8b9c6dab81 | Nicholas Feinberg | 2020-10-08 19:27:10 -0700 Make demons truly spineless Remove M_SPINY from Hell Sentinels and torturous demonspawn. This mechanic had approximately no impact on the game - 4d5 AC-resisted damage is just not meaningful against extended-capable characters. We could increase the damage or not make it AC-resisted, but the effect isn't very interesting here. There's no particular reason we'd want melee characters to be somewhat worse at fighting these enemies, and if we did want that, we could just strengthen their melee attack. Hell Sentinels are now giant so as to be net immune. This will also let them waltz through deep water, which probably doesn't matter? -------------------------------------------------------------------------------- 406de6ba63 | wheals | 2020-10-07 21:17:52 -0400 Don't splash yellow draconian spit onto the spitter. -------------------------------------------------------------------------------- c07710193c | Nicholas Feinberg | 2020-10-04 16:56:05 -0700 Streamline the Zot Clock (Alternate commit title: Zot Around The Clock) The Zot clock has been working OK as a time limit, but it has a major shortcoming: it's not explained to players at all. The reasoning there was that we didn't want to stress players out or to make it easier to sneak around the clock, but the very loose time limits on the current clock make it easy to sneak around regardless for a spoiled player, and unexplained mystery deaths are more stressful than occasional messages. (Also, if players don't know that the clock exists, it doesn't serve its intended role of discouraging very slow play!) So, derandomize the Zot Clock, remove the drain penalty, display remaining turns when there are <1k left, and add an option (off by default) to display remaining turns at all time. Also, take another pass on the messaging. That should hopefully leave the whole thing in good enough shape for release. -------------------------------------------------------------------------------- d791e6c4ce | Nicholas Feinberg | 2020-10-04 15:28:56 -0700 Remove an antique and redundant status list Sage, really? -------------------------------------------------------------------------------- bdda728c12 | gammafunk | 2020-10-04 07:51:47 -0500 Fix the TAG MAJOR upgrade script The pakellas experiments des file has already been removed. -------------------------------------------------------------------------------- 645a0caaaf | gammafunk | 2020-10-04 07:16:51 -0500 Remove unused Pakellas vaults These vaults where sitting in a des file with 0 weight mostly due to accompanying lua triggers that need to be defined for save compatibilty. I've moved the required functions to a designated save compat lua file with the function definitions emptied out to the extent possible. This should cover save compatibilty, but even if there is a problem, the odds of there being an affected save out there with the vaults actually generated are quite small at this point. -------------------------------------------------------------------------------- fc2450931f | gammafunk | 2020-10-04 07:16:48 -0500 Remove some boring beasts With the re-introduction of boulder beetles to Lair and Dungeon, it's a good time to remove some of the redundant beasts we have in these branches. This commit removes hippogriffs, crocodiles, and porcupines. The first two are simple speed 10 beasts that have little to differentiate themselves from other melee-only monsters of similar difficultly at mid-Dungeon and Lair depths. Porcupines are fast and have a spine mechanic, so they're arguably the most interesting of the three removed monsters. However their spines are an "anti-melee" trait that works poorly in terms of influencing the player's decision to melee or not. Culling the monster list down to a set that all work well design-wise is a good long-term goal, and neither branch lacks for good fast melee monsters. Level spawn weights of each of the three removed monsters has been giving to respective similar monsters in both branches, with adjustments so that the impact of removal is minimal. The new weights and changes in level spawn chance are described in this google spreadsheet: https://docs.google.com/spreadsheets/d/16lBJeSFqxFsy8MPFUBcjV0ZnvU172e2G-8WWO1ly xpU/edit?usp=sharing See the "Chance (Modified)" and "Increase in chance" sections of each sheet. Dungeon has such a large monster set that the largest increase in any affected monster placement on any level is a fraction of 1%. For Lair, the largest increase is less than 3%. I increased placement range of the few more interesting beasts such as polar bears, hell rats, stream dragons. Additionally, a few weights for rarer Lair beasts are now doubled, but these monsters are already quite rare and have a placement chance of 1% or less throughout their range. -------------------------------------------------------------------------------- 3d26443778 | gammafunk | 2020-10-04 07:09:05 -0500 Re-implement boulder beetles Boulder beetles return as a speed 10, 12 HD monster with good AC, melee slightly better than a death yak, and a rolling attack that doubles their movement speed and melee damage (1d32->1d64). They will only self-enchant with the rolling debuff when not already adjacent to their foe, hence either killing them at range or getting them into melee range is a priority to avoid their 1d64 rolling damage. After performing a melee attack in the rolling state, the beetle always debuffs, returning to its unrolled state. One of the advantages of having the roll attack be normal melee is that it uses normal melee mechanics, checking SH and EV, and their modified attack damage is shown under x-v when in the rolling state. Boulder beetles also have a blink ability in order to eventually reset their positioning and allow a subsequent roll, although they cast this with low frequency. While rolling, they never use either of their abilities. Possible TODO items: 1) "Missing" the player. In my original proposal, I wanted a missed roll to allow them to "roll past" the player, giving the player a chance for additional punishment but also allowing the beetle to set up another roll. Currently this is not implemented, since this aspect was mostly to the old trivially avoidable (but comedic) roll attack. They already can reset their position using blink, and with the profile of this monster, giving the player additional opportunities to damage it would likely just make it too easy. Still, it remains an option if `??meme rule` is being ignored. 2) Rolling duration. Right now it's 10 to 15 turns, giving faster players a fighting small chance at outrunning a rolling beetle that starts rolling many tiles away, but for normal speed players, even being 7 tiles away means they will not outrun the roll. 3) AI changes while rolling. Should beetles ignore damaging terrain like traps and clouds while rolling? Currently they don't change their damage consideration compared to their normal state. This would lead to them "hover-rolling" before damaging clouds in some cases. 4) Theme of "blink". This is done as the usual translocations effect, although I had originally planned for this to be themed as a "flip" to make more thematic sense as a natural ability. Jumping spiders likewise have no special translocations theme and do the same kind of blink, so maybe leaving the normal blink is best. 5) Placement and vaults. I mostly re-added them to the spawn lists with sensible weights and to vaults and Sprint in the appropriate places. I'll likely make some special boulder beetle transporter or runed door vaults that get at the theme of the old boulder beetle trap vaults, just without the spoilers. -------------------------------------------------------------------------------- 0cdd606a97 | gammafunk | 2020-10-04 04:23:58 -0500 Insect glyph reorganization Insects were using 'a' (ants), 's' (mostly arachnids), and 'y' (flying insects. With the re-introduction of boulder beetles in a forthcoming commit, I'm re-introducing the 'B' glyph and moving all ants, beetles, and other non-flying insects here. Now 's' is reserved for arachnids, and we won't have a new mostly unused insect glyph on 'B'. Alternatively we could have beetles and non-flying insects on 'a', thus not moving ants from their ideal home, but kate- was more in favor of the 'B' glyph. There are only two prominent monsters that are bona fide ants and that actually appear in level spawn lists: worker and soldier ants. There are perhaps more prominent non-ant insects that likewise appear in spawn lists: giant cockroaches, boulder beetles, and death scarabs. Entropy weavers aren't truly insects, although legends say they are truly formicids, hence ant-like. In any case, it's possible to move non-flying insects all from 'B' to 'a' if the 5% of the player-base that uses console raises an ant army in revolt. -------------------------------------------------------------------------------- 6669bab64c | Nicholas Feinberg | 2020-10-03 20:45:04 -0700 Update the manual -------------------------------------------------------------------------------- afc20e3620 | Nicholas Feinberg | 2020-09-30 10:06:31 -0700 Extremely vane tiles (canofworms) TO DO -------------------------------------------------------------------------------- b41185065b | Nikolai Lavsky | 2020-09-27 11:42:01 -0700 Cancel Heroism and Finesse on angering or abandoning Okawaru Currently, only Heroism, Finesse, and Elyvilon's Divine Protection don't expire immediately when the player is placed under penance. It seems thematically appropriate for Divine Protection, but even Elyvilon removes all divine effects on abandonment. This commit puts Okawaru in line with other gods. -------------------------------------------------------------------------------- 1bad37f382 | Petri Salminen | 2020-09-27 11:41:28 -0700 Update INSTALL.md Instructions for Void Linux were removed in f485615. The table of contents should not have dead links. -------------------------------------------------------------------------------- f8c6c3aab7 | Nicholas Feinberg | 2020-09-25 13:41:36 -0700 Remove qw support for dragon hides -------------------------------------------------------------------------------- 87339cca5e | advil | 2020-09-24 12:29:16 -0400 Update an advanced_optioneering example I'm not sure how useful this really is in and of itself, but it's useful as an example userfunc macro at least. -------------------------------------------------------------------------------- 31898f1a13 | advil | 2020-09-24 12:29:16 -0400 Set an error on invalid fn argument to c_macro Entirely possible that this will start popping up errors all over the place for something I'm not expecting... -------------------------------------------------------------------------------- 5d7718319a | Nicholas Feinberg | 2020-09-22 19:27:05 -0700 Adjust gold acquirement Now that the player can see all acquirement options before choosing one, gold became too often a very easy choice. The massive swings of the old gold acquirement formula made sense when the player was gambling on an unseen outcome, but now that the player can see the result before choosing, all it does is produce random windfalls and unsatisfyingly simple acqs. Simplify the formula to range nonlinearly between 200 (a disappointing but nonzero consolation prize) and 1400 (a solid chunk of change, enough to buy many small things or one very big important thing). Mean of 800, which is only a bit lower than the old mean and is reasonably competitive with many items, but generally less exciting than anything really good. (Which it should be, because getting items from acq is fun!) I considered removing the guaranteed gold acq, but I think it is good to have a decent fallback case to acquirement. It just shouldn't be the pick quite so often. -------------------------------------------------------------------------------- fe262e0a26 | Nicholas Feinberg | 2020-09-22 18:58:01 -0700 Remove guaranteed early Nemelex deck As with Gozag, Nemelex granting a guaranteed early deck (before the player even reached 1* of piety!) was part of what made them remarkably strong. Shift that early guaranteed deck and all other deck gifting to after the player reaches 1* of piety, to require a little work by the player before they get their reward. (This decreases deck gifting somewhat in general, though less so at higher piety.) -------------------------------------------------------------------------------- 27c59cc0ac | Nicholas Feinberg | 2020-09-22 18:39:06 -0700 Remove free gozag potion petition Few gods give anything to their followers on initial worship. One of Gozag's strongest traits is the instant on-worship get-out-of-jail card that the free intro potion petition grants. Let's dial that back. -------------------------------------------------------------------------------- de13210b43 | Nicholas Feinberg | 2020-09-22 18:34:50 -0700 Remove hat (hellmonk) From the name of the Ashenzari altar, to avoid false name matches. -------------------------------------------------------------------------------- 67e99244d3 | Nicholas Feinberg | 2020-09-20 08:06:55 -0700 Merge Hell zot clocks Avoid some corner case issues involving the Vestibule, maybe. -------------------------------------------------------------------------------- ca5d07dbe9 | Nicholas Feinberg | 2020-09-20 08:05:31 -0700 Simplify some hellishly buggy travel code Obviously, don't fix the bug. -------------------------------------------------------------------------------- 7269bf8ee0 | Nicholas Feinberg | 2020-09-20 07:57:38 -0700 Raise Zot Clock bank cap 15k -> 27k The goal of the zot clock bank cap is to prevent players from having truly tremendous amounts of time to spend to do tedious things on specific floors. In practice, I haven't seen reports of anyone really doing anything unpleasant with the current limit, and the 15k cap caused issues with shaft traps on rare occasions. Let's raise it to 27k (meaning it approximately doesn't exist outside D) and see what happens. It might vanish entirely in future, or it might drop again, depending on the results of this experiment. -------------------------------------------------------------------------------- 72c4674329 | wheals | 2020-09-14 13:03:46 +0300 Fix a crash on describing an unid'd wand. -------------------------------------------------------------------------------- cca6ad1b57 | Nicholas Feinberg | 2020-09-13 13:34:13 -0700 Remove Traps and Doors This comment was added along with the vault 10 years ago (in c2102b4) and referred to a long NSUBST sequence that has long ceased to be. -------------------------------------------------------------------------------- 383da0171f | Nicholas Feinberg | 2020-09-13 13:34:11 -0700 Refactor monster self-destruct code -------------------------------------------------------------------------------- fd52b7e0f3 | Nicholas Feinberg | 2020-09-13 13:34:11 -0700 Remove unused M_HYBRID flag Obsolete since f67d6e41dd8a7dce658198c42247ac2f8df114a4 , back in 2015, hah! -------------------------------------------------------------------------------- 9520f50b25 | Nicholas Feinberg | 2020-09-13 13:34:11 -0700 Refactor monster death effects -------------------------------------------------------------------------------- b8a88fe62b | wheals | 2020-09-13 16:58:05 +0300 Update the Place: on the sidebar when leaving X. There was a bug that left it showing the last place you had looked at, rather than your current location. -------------------------------------------------------------------------------- b3e73fbb7a | wheals | 2020-09-13 14:29:51 +0300 Always abort charge targeter with no valid targets (#12355). -------------------------------------------------------------------------------- 926a82b99e | wjchen | 2020-09-12 21:35:11 -0400 Handle dynamic DPI in webtiles glyphs mode This commit fixes handling of dynamic DPI situations in webtiles glyphs mode that was accidentlly broken in 4531bab. -------------------------------------------------------------------------------- ed93497179 | Umer Shaikh | 2020-09-11 17:58:24 -0400 Give x-v a selection menu when there are many describable things This commit creates a selection menu when you x-v a tile with multiple monsters, items, or notable features (following the ^x screen's notion of notability), whether or not they are of the same type. As of 2a96157, when there is an item stack on a tile you can x-v the stash to describe any item in the stash by selecting the desired item from a menu. However, if a monster is on that stash, then x-v describes the monster and ignores the items. Similiarly, a monster or items stop you from seeing the description of an interesting feature. After this commit a selection menu will pop up in any of those cases, so you won't be stopped from examining underlying things of a different type. This commit adapts the menu in _full_describe_menu, which is already designed for displaying a selection menu with these three types of things. Therefore I've removed the function describe_items, added recently by 2a96157 to allow selection from a stack of items. -------------------------------------------------------------------------------- 60e059b9e0 | Skrybe | 2020-09-11 17:42:45 -0400 Distort layout_cave_pods when in Snake Give a wavy structure to the corridors and walls of layout_cave_pods when generated in Snake. This is the same effect that is already used for onion and onion_interference in Snake. [ Committer's note: checkwhite. Closes #1561 ] -------------------------------------------------------------------------------- f2846fb106 | Skrybe | 2020-09-11 17:42:29 -0400 Update layout_loops.des Along the same thinking as chaotic_city, remove an uncommon chance to create a layout entirely of stone or metal in Lair. This function is used in all of the loops layouts, but only layout_loops_ring is currently used in Lair. -------------------------------------------------------------------------------- 3778a07750 | Skrybe | 2020-09-11 17:42:21 -0400 Edit layout_chaotic_city The layout now only places rock walls when generated in Lair, per a TODO note. The result does look far better, IMO. -------------------------------------------------------------------------------- bc31f999d5 | mgdelmonte | 2020-09-11 17:32:21 -0400 Fix item.subtype() in CLua [ Committer's note: reworded. Closes #1451. Closes #1551 ] -------------------------------------------------------------------------------- c8f5442073 | Nikolai Lavsky | 2020-09-11 17:32:21 -0400 Actually let randarts generate with the spectral brand As a followup to 65aa84ea, this commit adds the spectral ego to the list of possible artefact brands for melee weapons. [ Closes #1541 ] -------------------------------------------------------------------------------- 25d4643a78 | Naruni | 2020-09-11 17:32:21 -0400 Describe wand noise levels Inspecting a wand will tell the player how much noise is generated when evoking the wand. [ Committer's note: squash + reword. Closes #1539 ] -------------------------------------------------------------------------------- b68aede52e | Implojin | 2020-09-11 17:30:49 -0400 Fix Hailstorm ally warning prompt (12362) This commit silences the hailstorm ally warning prompt for battlesphere, spectral weapon, orb of destruction, and demonic guardians. Monsters with M_PROJECTILE, (allied) M_AVATAR, or MF_DEMONIC_GUARDIAN flags are bypassed in bolt targeting by bolt::ignores_monster, and hailstorm cannot actually deal damage to them. -------------------------------------------------------------------------------- 6fb13256a3 | Edgar A. Bering IV | 2020-09-11 17:27:20 -0400 Merge pull request #1558 from nlavsky/add-rampage-to-overview Display Rampage on the % screen -------------------------------------------------------------------------------- 3497ee646f | Marcelo Henrique Cerri | 2020-09-11 17:23:02 -0400 Fix the divider position when tile_force_overlay is set When tile_force_overlay is set the divider should always be set to the end of the of the screen. Move the code that sets that to later in the code so it doesn't get overwritten. Without this fix, the space reserved for the message window is still left unused at the bottom of the screen while the message overlay is moved to the top of the screen. -------------------------------------------------------------------------------- fda0128422 | Alex Jurkiewicz | 2020-09-11 17:16:35 -0400 Expand macOS install instructions further (erf) -------------------------------------------------------------------------------- b025daac67 | Alex Jurkiewicz | 2020-09-11 17:16:35 -0400 Improve docs for running DCSS after compilation -------------------------------------------------------------------------------- e606b53fed | Umer Shaikh | 2020-09-11 17:12:04 -0400 Remove bad position clamp for peeking through stairs Using X and [ or ] to peek through stairs at different floors is supposed to deposit the cursor on the other end of the staircase. Lately the cursor has been frequently deposited in incorrect locations. It appears that 08ff59a6b inadvertently clamped the destination position according to the known map bounds of the floor being peeked from, which tends to move the cursor to an incorrect spot on the floor being peeked into. I have simply removed the clamping: if mstate's position was on the same level then the clamping after the conditional call to goto_level will serve the same purpose, and if not then clamping before that call is an error. -------------------------------------------------------------------------------- 0cdeefecac | Umer Shaikh | 2020-09-11 17:08:56 -0400 Stop acquirement of +4 stat rings These rings aren't supposed to exist anymore as of 2607d5cfa1. However acquirement was making them by producing -4 bad stat rings and then setting the rings' plus value to abs(the old plus). This commit has acquirement directly set the plus for acquired rings to the "good" value for that base type. This does not affect unrandarts but may modify randarts. -------------------------------------------------------------------------------- 6fa6d65a89 | Roderick Schertler | 2020-09-11 17:04:29 -0400 Add missing "info" command to --edit-save help -------------------------------------------------------------------------------- 0e99e02c7f | Implojin | 2020-09-11 16:49:24 -0400 Fix a rampaging bug (12353, Flugkiller) This fixes a rampage interaction with deep water / lava. Previously, the rampaging tracer wasn't properly failing on dangerous terrain. This was causing the rampage to abort at its moveto check instead, which erroneously blocked the second half of the move. -------------------------------------------------------------------------------- 457a34ca9c | Nicholas Feinberg | 2020-09-10 19:28:38 -0700 Update an antique comment Obsoleted in 87348de860b6d4e (2016). -------------------------------------------------------------------------------- 4f23886233 | advil | 2020-09-09 21:18:21 -0400 Don't crash when putting on non-jewellery You can try to do this via the * menu, as long as you have jewellery at all. This looks like it was broken when the call order was rearranged in b2248e6a10f6; the problem is that jewellery_is_amulet will crash if it is handed non-jewellery (because it is a subtype check, and is only meaningful in that case), whereas this code assumes it would return false. Just adding in the item type check is inelegant, but I don't want to mess with the ASSERT. -------------------------------------------------------------------------------- f7241eeb75 | Nikolai Lavsky | 2020-09-08 21:49:38 +0300 Display Rampage on the % screen It's often hard to see all properties of equipped artefacts on the overview screen, especially when the artefacts have long names. The Rampage ego, which can appear on any randart armour, dramatically changes the player's movement. So it's worth having a quick way to see if equipped items have this ego. -------------------------------------------------------------------------------- d4d190f45e | Nicholas Feinberg | 2020-09-07 13:45:07 -0700 Squash extra SAC_LOVE messages (wheals) 2951c229262b0cf5f incorrectly removed the !mons.wont_attack() check, resulting in a lot of extra messaging for monsters that already hated the player. -------------------------------------------------------------------------------- 354ed81502 | Kate | 2020-09-03 15:57:12 +0100 Rebrace -------------------------------------------------------------------------------- 3e9335bbc7 | Nicholas Feinberg | 2020-09-01 20:33:33 -0700 Re-remove the black knight's barding Vaults are my passion -------------------------------------------------------------------------------- 2bb1e3ea85 | Nicholas Feinberg | 2020-09-01 17:41:38 -0700 Withered plant fixes Display 'withering' in the name line, don't call withered plants 'withering' (crumble them instead), and don't show the withering icon on other slowly dying things. -------------------------------------------------------------------------------- b552214b31 | Nicholas Feinberg | 2020-09-01 17:25:10 -0700 Don't show withering on non-plants -------------------------------------------------------------------------------- 4e331d26ce | Nicholas Feinberg | 2020-09-01 17:21:19 -0700 Simplify Vampiric Draining Don't limit damage done by the healing the player can receive. Allow the player to heal more than half the difference between their max HP and their current HP. -------------------------------------------------------------------------------- 3c8f2f65f7 | Neil Moore | 2020-08-30 20:31:05 -0400 Un-downgrade sdl2 submodule (doh) -------------------------------------------------------------------------------- 8898e5d847 | Neil Moore | 2020-08-30 19:42:48 -0400 Avoid ODR violations in mon-ai-action.h With -Wmissing-declarations, gcc warns "no previous declaration for" each of these functions. Even worse, it violates the one definition rule to define an extern non-inline function in more than one translation unit, as would happen if we were to include this header from anywhere other than mon-cast.cc. Practically, it would work with most compilers, since they are not required to flag ODR violations across compilation units, but it would still be undefined behaviour, and the warnings are annoying anyway. -------------------------------------------------------------------------------- 9cd6e92bd5 | Neil Moore | 2020-08-30 19:30:39 -0400 Allow wizardry to stack again (Yermak) Introduced in 0.26-a0-593-g36fcd6fac6. The ternary operator has very low precedence (tied with assignment), so should almost always be parenthesized when used in a larger expression. -------------------------------------------------------------------------------- 2e982bf181 | Neil Moore | 2020-08-30 19:27:22 -0400 Allow offensive drowning of giants (Yermak) Though they're big enough to walk through water, and therefore fake- amphibious, they are, unlike truly amphibious creatures, still not happy having their heads submerged. This affects primal wave, AF_DROWN, and AF_ENGULF. It may appear that this change would affect grey draconian monsters too, but they're unbreathing independently of their fake amphibiousness. -------------------------------------------------------------------------------- d42a14c23b | Kate | 2020-08-29 19:41:42 +0100 Remove some unnecessary breaks -------------------------------------------------------------------------------- 4a4847f518 | Kate | 2020-08-29 19:41:00 +0100 Don't crash when trying to enslave soul on empty space (wheals) -------------------------------------------------------------------------------- 0e591452db | Kate | 2020-08-29 19:40:39 +0100 Fix spacing in some mutation descriptions -------------------------------------------------------------------------------- c8f6553d2c | ukdong99 | 2020-08-27 22:38:46 -0700 Unmute Donald for WJC followers (#1540) Donald has accidentally been saying nothing to followers of the Wu Jian Council. -------------------------------------------------------------------------------- 61e6210cf4 | Implojin | 2020-08-26 22:17:31 -0400 Prevent slimy shafting (/u/zeunysos) In some circumstances, it was possible to be shafted adjacent to a slime wall, and take damage before having a chance to act. This commit adds a slime wall adjacency check to shaft destinations. -------------------------------------------------------------------------------- b535b0901c | Edgar A. Bering IV | 2020-08-24 09:28:12 -0400 Clarify Serpent's Lash description to exclude fancy movement Helps with #1531 -------------------------------------------------------------------------------- 00aaa63842 | Edgar A. Bering IV | 2020-08-24 09:27:37 -0400 Don't allow Searing Ray to track invis monsters (12350, Naruni) -------------------------------------------------------------------------------- 366c5f69ff | Edgar A. Bering IV | 2020-08-24 09:07:05 -0400 Lint -------------------------------------------------------------------------------- 44661e4d24 | hellmonk | 2020-08-24 08:45:04 -0400 New scales facet, sharp scales. Provides 1/2/3 AC and slaying. Slightly pushed but slayscales are cool. [ Committer's note: squashed and rebased. Closes #1499 ] -------------------------------------------------------------------------------- 36fcd6fac6 | hellmonk | 2020-08-24 08:44:55 -0400 New "scales" facet, Big Brain. Expanding brain demonspawn get +2/4/6 int, plus wizardry at mutation level 3, in lieu of scales. Relative to other scales facets, this is weak at ranks 1 and 2 but pretty good at rank 3. Could change the int gain to 4/5/6, perhaps. -------------------------------------------------------------------------------- fa8599eb46 | hellmonk | 2020-08-24 08:43:12 -0400 Double the stealth bonus of thin skeletal structure -------------------------------------------------------------------------------- 04f19ec95a | wheals | 2020-08-24 00:26:11 +0300 Improvements to the charge targeter. Cancel immediately if there are no nearby monsters, show the landing site differently, and clarify the messages. -------------------------------------------------------------------------------- 0a1b7681ed | wheals | 2020-08-23 22:57:26 +0300 Don't pop up a menu for self-targetting. It looks bad on webtiles and terrible on console. -------------------------------------------------------------------------------- 25b58072bd | wheals | 2020-08-23 22:36:25 +0300 Fix bennu blazing into flame when they get banished. This sets MF_BANISHED on all monsters that get banished, even if they aren't being moved to the Abyss. This seems right to me, since specifying which ones you can encounter later is done by the transit list, but there may be edge cases I've missed. -------------------------------------------------------------------------------- 7d0f55a901 | Naruni | 2020-08-23 10:51:59 -0400 Tweak enslave soul when used on clones (12340) Using enslave soul on a clone results in an info leak at no cost to the player. Change the behavior to provide a message that the target is a clone and player loses MP, piety, and a turn. [ Committer's note: reword and squash. Closes #1530 ] -------------------------------------------------------------------------------- 905d6fb3df | Roderick Schertler | 2020-08-23 10:22:33 -0400 Try to break a net holding you when moving up/down stairs When you are trapped in a net and try to move you instead try to break the net. Currently trying to use stairs while you are netted gives "You can't do that while held in a net."; change this to behave like a lateral move. Rationale: I was netted while on the stairs and I definitely did not want to step off of them. I expected "<" to try to break it. I actually could have used a lateral move because when you break the net you don't also do the move, but that isn't obvious. -------------------------------------------------------------------------------- 790e954c4a | wheals | 2020-08-23 11:29:52 +0300 Don't reset the unarmed prompt after weapon-wielding forms expire (FIQ). -------------------------------------------------------------------------------- 58d91cd255 | wheals | 2020-08-23 11:29:52 +0300 Remove an unused function. -------------------------------------------------------------------------------- b771c2ac19 | wheals | 2020-08-23 11:29:52 +0300 Update Beastly Appendage description for the changes in 34f0fc0. -------------------------------------------------------------------------------- 0021074b2a | wheals | 2020-08-23 11:29:52 +0300 Don't allow upgrading (or downgrading!) muts with Beastly Appendage. This also fixes a crash when looking at the mutation screen after downgrading a mutation. -------------------------------------------------------------------------------- ec200485ca | wheals | 2020-08-23 11:29:52 +0300 Let Palentongas get poisonous tails. -------------------------------------------------------------------------------- afce7a58c0 | wheals | 2020-08-23 11:29:52 +0300 Hide Charms aptitude on ?%. -------------------------------------------------------------------------------- 4860111d27 | Nicholas Feinberg | 2020-08-22 16:34:01 -0700 Don't show removed branches in &~ It made it impossible to see the lair branches in local tiles, and also wasn't very useful. I still can't see Lair, Dungeon, Temple, or one other branch, but I'm not sure what else to do to improve it... -------------------------------------------------------------------------------- 3afe4966bf | Nicholas Feinberg | 2020-08-22 14:48:50 -0700 Fix objstat -------------------------------------------------------------------------------- c4b6802de3 | Edgar A. Bering IV | 2020-08-22 07:59:27 -0400 Update the changelog -------------------------------------------------------------------------------- ba4b82f8d2 | Implojin | 2020-08-22 07:50:06 -0400 Fix plant wither duration This commit fixes a bug with plant withering: Previously, the duration of ENCH_SLOWLY_DYING was being incremented each time a plant took damage, which led to plants dying very slowly indeed if the player attacked them repeatedly. -------------------------------------------------------------------------------- cfaa98f945 | advil | 2020-08-21 12:02:55 -0400 Better handle db descriptions for removed item types Now, this will only print an error for removed item types if the item doesn't correctly have its identity in item_type_removed. -------------------------------------------------------------------------------- 594f5502de | advil | 2020-08-21 11:57:59 -0400 Handle removed staff names correctly (twelwe) -------------------------------------------------------------------------------- f2b0f13339 | Nicholas Feinberg | 2020-08-20 18:46:52 -0700 Tweak Maggie description The old version was a bit plodding. It also didn't even try to explain how Maggie was apprenticing with the Hell Knights (which are clearly in the Dungeon) *before* she entered. This version is playing with hellmonk's parallel-timelines idea by hinting that Maggie comes from 'a distant time', though I think that's still probably too subtle... -------------------------------------------------------------------------------- c8662c180d | Alex Jurkiewicz | 2020-08-20 20:26:55 -0400 Update a Github action source -------------------------------------------------------------------------------- 753d7e3450 | wheals | 2020-08-20 18:42:44 +0300 Update displayed level immediately in ctrl-f (#12349). -------------------------------------------------------------------------------- 03ef8e7d85 | wheals | 2020-08-20 18:42:44 +0300 Describe status lights in a tooltip on webtiles. -------------------------------------------------------------------------------- 227e388fe2 | wheals | 2020-08-20 18:42:44 +0300 C++11-ify aptitudes.h. -------------------------------------------------------------------------------- 805dbbf8dc | wheals | 2020-08-20 18:42:44 +0300 Barding/centaur removal refactoring. -------------------------------------------------------------------------------- 17e6ae78ce | wheals | 2020-08-20 18:42:44 +0300 Remove Centaurs from ?% (#12348). -------------------------------------------------------------------------------- 63576e9172 | Goratrix | 2020-08-20 09:37:03 -0400 Correct phantom mirror message Phantom mirror no longer shatters after use with 1d127b8. -------------------------------------------------------------------------------- bc9326e332 | Nicholas Feinberg | 2020-08-19 18:33:15 -0700 Remove unused Death's Door icon Nergalle is travelling a different channel now. -------------------------------------------------------------------------------- 0f5d254872 | Nicholas Feinberg | 2020-08-19 18:33:15 -0700 Make plants wither away Plants can create fun tactical situations. When they form single-tile spaces in an otherwise-wider corridor, the player can exploit that for a short-term advantage. That's fun. What's not fun is getting a javelin stuck underneath a plant and feeling obliged to slowly batter it to death with the cheapest means at your disposal. So, refocus plants (and withered plants, demonic plants, fungi... but not bushes) on this goal. When hit, they now get ENCH_SLOWLY_DYING, killing them in 3-5 turns. Much cleaner -------------------------------------------------------------------------------- 24140f3627 | advil | 2020-08-19 21:21:28 -0400 Revert "Revert "Disable travis notifications"" This reverts commit 2efb32689600fe5ae5b07696f704697b4c948d8d. -------------------------------------------------------------------------------- cef94a71c8 | Kate | 2020-08-20 01:48:32 +0100 Fix CBlink failing a removedness test -------------------------------------------------------------------------------- a34f0b0a04 | Kate | 2020-08-20 01:15:58 +0100 Fix TAG_MAJOR_VERSION 35 compilation for real -------------------------------------------------------------------------------- a6120bd145 | Kate | 2020-08-20 00:56:02 +0100 Fix compilation on TAG_MAJOR_VERSION 35 -------------------------------------------------------------------------------- 3d35ca6c31 | Kate | 2020-08-20 00:11:04 +0100 Adjust Passage of Golubria expiration Base it on time spent instead of actions taken, so that making multiple quicker or slower actions doesn't affect how long it takes for a passage to expire. -------------------------------------------------------------------------------- d03d243d0e | Kate | 2020-08-20 00:11:04 +0100 Rework the Orb's translocation interference The translocation restrictions in Zot are very spoilery, and with controlled blink no longer existing as a spell it should be fine to allow using scrolls of blinking to work as normal instead of degrading them to uncontrolled. They're supposed to be a powerful limited resource, so making them suddenly near-useless at the end of the game doesn't feel great, and they're also more valuable used early to prevent death when the character is weak. If hoarding them until Zot turns out to be a problem, the generation rate could be adjusted. In addition, don't disable Passage of Golubria, but instead increase the fuzzing of the portal placement substantially and make it time out more quickly. -------------------------------------------------------------------------------- 48d619f095 | Emily | 2020-08-20 00:11:04 +0100 Don't contaminate the player on controlled blink It desn't seem necessary to have another limiting cost when it's only available on a scroll, and the amount of contamination is basically irrelevant (e.g. invisibility gives ~5000 contamination, unwielding *Contam gives 7000). Contamination is also generally the domain of spells, clouds, and traps rather than items, so it fits less well with controlled blink now that it's a scroll-only effect. If scrolls of blinking end up need nerfing (e.g. because of Orb status removal), then a value like 1000 + random2(750) would be reasonable. -------------------------------------------------------------------------------- 380b3ec697 | Emily | 2020-08-20 00:11:04 +0100 Refactor controlled blinking code cast_controlled_blink is now only called for scrolls of blinking, so fold it into controlled_blink and remove some redundant logic. -------------------------------------------------------------------------------- 84ee57af90 | Emily | 2020-08-20 00:11:04 +0100 Remove the Controlled Blink spell It was already bumped to level 8 in 75a41fec5b260e3405678e92336f8d186af7b559 for balance reasons; while it's not much of a balance concern at that level, it's still perhaps the most boring and predictable of the high-level escape option spells, allowing easy escape from many situations without the tactical or strategic concerns of spells like Death's Door and Borgnjor's Revivification, as well as wholly duplicating a consumable, unlike similar spells like Passage of Golubria and Disjunction that have their own unique mechanics. In addition, its relative spammability and complete lack of permanent costs compared to the scroll also encourages the existence of arbitrary and undiscoverable mechanics like the Zot/Orb translocation restrictions. (Passage of Golubria is probably still too good on the orb run to just remove those outright even after this change, but hopefully future adjustments to that spell could make it possible.) [Committer's note: adjusted to leave the book of the Warp as a 4-spell book instead of adding Passage of Golubria to it. Closes #1366.] -------------------------------------------------------------------------------- b647427698 | Emily | 2020-08-20 00:11:04 +0100 Remove unused monster Controlled Blink code ghost_demon::translate_spell explicitly replaces this with SPELL_BLINK and no monsters have it, so as far as I can tell there's no way for these code paths to ever be reached. -------------------------------------------------------------------------------- 4286e081e0 | Emily | 2020-08-20 00:11:04 +0100 Remove redundant -Tele logic from tiles This is already handled by spell_is_useless. -------------------------------------------------------------------------------- 6adcc438ac | Kate | 2020-08-19 23:23:19 +0100 Adjust and update a hints mode check This was wildly out of date due to its enum range checks, and also fairly vague in its definition. The hints mode text specifies that it's for items that provide "protection from certain sources", so make the list match that more closely and not return true for other effects that can't really be described as "resistances" (Faith, Harm etc). -------------------------------------------------------------------------------- 6c97de2657 | Kate | 2020-08-19 23:20:04 +0100 Remove an unused function -------------------------------------------------------------------------------- deff538b99 | Kate | 2020-08-19 23:20:03 +0100 Rework staff acquirement Instead of only checking the highest spell school, take weights from any applicable trained skills, with a chance of falling back to a random staff. -------------------------------------------------------------------------------- 0e794bb6f8 | Kate | 2020-08-19 23:20:03 +0100 Remove staves of wizardry As with the staff of power, it just duplicated a ring effect, and was also the last remaining staff with no melee effect. -------------------------------------------------------------------------------- 447559da06 | Kate | 2020-08-19 23:20:03 +0100 Remove staves of summoning To narrow down the number of types of staves and allow them to all have a relevant effect in melee as well as their spell school enhancer. -------------------------------------------------------------------------------- 3579fdeafc | Kate | 2020-08-19 23:20:03 +0100 Give staves of conjuration and earth new melee effects Staves of conjuration gain the effect that staves of earth used to have, of irresistible damage that's reduced by AC. Staves of earth are changed to deal higher base damage, but with the shrapnel effect of being affected 3 times by AC. -------------------------------------------------------------------------------- 695e311587 | Nicholas Feinberg | 2020-08-18 19:28:18 -0700 Give Palentonga +1 HP (apt) Two major reasons: - Palentonga were a little more fragile than was intended, which made it harder to justify having fun with their roll attack. - 117% HP is clearly much more aesthetic than a piddly 107% HP. I'm still interested in the idea of adding something more complex, perhaps along the style of a 'curl' defensive mechanism, but I haven't yet found anything that I'm confident in. -------------------------------------------------------------------------------- 3c2127501a | Edgar A. Bering IV | 2020-08-18 17:17:53 -0400 Unbutcher wjchen's patch -------------------------------------------------------------------------------- 4531babe98 | wjchen | 2020-08-18 16:35:42 -0400 Add glyph mode customization options for webtiles This commit adds two options `glyph_mode_font` and `glyph_mode_font_size` that allow customization of the font and its size used to render the dungeon view in the webtiles glyph mode. If set to monospace (default) or the font is not available, the browser's default monospaced font will be used. While implementing these options, this commit also follows the glyph metrics exactly as prescribed by the font. With the change, the dungeon view of the console version and the webtiles glyph mode should be more similar and the box-drawing characters will no longer appears to be unconnected, provided that the monospaced font used by the browser is properly authored in the first place. [ Committer's note: Tweaked, squashed, and rebased. Closes #1512 ] -------------------------------------------------------------------------------- 9bfc6bcd2e | wjchen | 2020-08-18 16:34:30 -0400 Adjust the display of the monster list in webtiles glyphs mode This change vertically center aligns the health status (colour box) in the monster list in webtiles glyphs mode and makes it looks more similar to that of the console version. The glyphs rendered in the monster list in webtiles glyphs/hybrid modes were not scaled accordingly to the crawl-internal zooming (rc options or {} in X), which looks pretty weird and is not consistent with how this is handled in normal tile mode (i.e., icons rendered in the monster list are correctly scaled). This change improves the aesthetics and the consistency between normal tiles mode and glyphs/hybrid mode in webtiles. -------------------------------------------------------------------------------- e420d36534 | Nicholas Feinberg | 2020-08-17 17:53:24 -0700 Remove Ru penance (FIQ) Since Ru has no wrath, this penance had no effect *except* to mark Ru magenta in the ^o dungeon overview, as if Ru was a good god that you'd thoughtlessly abandoned. This was false - Ru is a GREAT god. -------------------------------------------------------------------------------- baa144ba5c | Aidan Holm | 2020-08-16 17:49:26 +0800 Improve viewwindow performance when rendering animations (advil) Profiling viewwindow while spamming Disaster Area at 200 piety indicated that 65% of time spent inside viewwindow was spent packing cell overlays from the tile_overlays array into each vbuf cell's overlays array. I didn't test console, but I suspect it exhibits similar behaviour. This is due to the fact that the tile_overlays array was scanned once for each cell in the view buffer. Time spent on this step therefore scaled linearly with the total number of cells on the screen, and with the number of overlays added from animations such as Disaster Area: i.e. O(n * m), where n is the number of visible cells, and m is the number of overlay tiles from animations. This commit pre-sorts the overlay cells in O(m log m) with the same sort order as the cell draw order; this allows cell drawing to step through the tile_overlays array once only. After this change, around 4% of time within viewwindow is spent sorting and packing, down from 65%: a significant improvement. Note that this API is only a stop-gap measure; ideally, the remaining uses (mostly beam animations) would instead use a view_renderer, for more precise control over animations. In particular, this API will clear all overlays at the next full redraw (show_updates = true). -------------------------------------------------------------------------------- 3b3d21e777 | advil | 2020-08-15 10:07:58 -0400 Prevent sac love from affecting no-xp monsters Tentacles of all types were triggering the sac love "feels only hate" message as they are generated, including out of LoS. (Reported in love from applying to any no xp monster, which covers tentacles, but heads off a whole set of potential bugs involving other fake monsters, and other things that will be pointless for sac love to affect. I don't *think* that this changes any actual gameplay, and I've gone through the monster list pretty carefully, but we will see. Resolves #1501. -------------------------------------------------------------------------------- 8a0c9464d7 | advil | 2020-08-14 15:38:20 -0400 Fix a seed explorer bug involving portals in branch ends If a portal is in a branch end, and that branch end immediately precedes a branch that does not generate, then the seed explorer would repeatedly regenerate the portal for each following level of a non-generating branch. This could lead to crashes if the builder ran out of usable layouts, for example if it tried to build 9 ice caves in a row. It probably also messed up the seeding for following levels. -------------------------------------------------------------------------------- d391190cd6 | Edgar A. Bering IV | 2020-08-14 11:43:56 -0400 Add condenser vane checks and messaging (12344) Provide an MSG_OK and add a confusion check. The evoke code needs a bit of a refactor, this commit only provides the bugfix. -------------------------------------------------------------------------------- e4b5d95287 | Kate | 2020-08-13 23:17:13 +0100 Rebrace -------------------------------------------------------------------------------- 96b2eae49b | Edgar A. Bering IV | 2020-08-13 17:38:36 -0400 Update the credits -------------------------------------------------------------------------------- c04d6aab65 | RojjaCebolla | 2020-08-13 17:34:40 -0400 Update the changelog -------------------------------------------------------------------------------- b1a4fe45b9 | Edgar A. Bering IV | 2020-08-13 15:14:31 -0400 Resequence spell vampirism to prevent crashes (kate-) -------------------------------------------------------------------------------- ab5551255e | Edgar A. Bering IV | 2020-08-13 14:32:56 -0400 Update the changelog -------------------------------------------------------------------------------- f6d3885723 | amcnicky | 2020-08-13 14:08:58 -0400 Add new panlord text and art This commit adds new sprites: 2 heads and 1 body, and some new descriptions. [ Committer's note: Squashed + rebased + reworded. Closes #1520 ] -------------------------------------------------------------------------------- 5d1283fb80 | Implojin | 2020-08-13 14:03:34 -0400 Allow Rampaging on randart armour Rampaging is currently pretty rare in practice: * Ego boots are extremely rare spawns at itemgen. * Many species cannot equip boots. * Some characters end up with melded boots due to build choices. * The positioning choices and skilling choices offered by rampaging are more impactful when presented earlier in the game. This commit aims to make rampaging available to a wider range of characters, by adding it as a potential randart armour property. ARTP_RAMPAGING generates as 'potentially_good', similar to Harm. This commit also updates the rampage descriptions slightly, to remove a minor spoiler for players. -------------------------------------------------------------------------------- 98b154e084 | Edgar A. Bering IV | 2020-08-13 13:58:06 -0400 Buff the shield of Resistance With one pip each of rF, rC, and MR and a fixed enchant of +2 the Shield of Resistance wasn't that exciting, since SPARM_RESISTANCE can (rarely) spawn on shields, and a plain ego plus a pip of MR doesn't compete well with a +5 protection shield. The extra pips of rF and rC are more style than substance in practice, but receiving them along with two pips of MR makes the shield stand out a bit more. -------------------------------------------------------------------------------- 9982ef6611 | Edgar A. Bering IV | 2020-08-13 13:19:37 -0400 Give the Majin-Bo spell vampirism instead of Archmagi Archmagi for HP was kind of neat, but in practice it was very much a "get archmagi in not the body slot in exchange for a shield"; it was rare that you'd be so desparate for the enhancer that the Majin Bo was your best shot. Much cooler is to have the Majin Bo make your spells vampiric. All of the damaging spells. (Note that since Absolute Zero directly kills the monser bypassing the usual damage code this doesn't interact). The effect is very powerful, and can be nerfed by reducing the healing chance or increasing the HP cost if needed. -------------------------------------------------------------------------------- c1cf53ab4c | Edgar A. Bering IV | 2020-08-13 12:52:19 -0400 Fix up setting beam.origin_spell in several places -------------------------------------------------------------------------------- c37208646a | Edgar A. Bering IV | 2020-08-13 11:42:19 -0400 Remove the concept of a channeling item This only really mattered for Pakellas conduct interacting with Wucad Mu, which after its revision is borderline a channeling item. -------------------------------------------------------------------------------- 604fddcf5d | Edgar A. Bering IV | 2020-08-13 11:41:41 -0400 Remove some unused parameters -------------------------------------------------------------------------------- a375d073a1 | Edgar A. Bering IV | 2020-08-13 11:40:14 -0400 Remove the Evoke Fog Icon -------------------------------------------------------------------------------- baf80d05f7 | Edgar A. Bering IV | 2020-08-13 11:10:51 -0400 Turn +Fog into *Fog The cloak of the Thief, like the ratskin cloak, is an overpowered item to use optimally, providing an effect otherwise locked behind a god passive or a finite consumable in unlimited quantities for a minimal tradeoff. This commit gives the cloak a fixed chance (currently a coinflip) to generate fog on hit a sufficiently hard hit (> 10% mhp). This is to give it a different feel from Dithmenos' passive which scales with the hit magnitude and piety. The sufficiently hard threshold is to prevent keeping a trivial monster around for free fog on 0 damage hits. -------------------------------------------------------------------------------- 073066f631 | Nicholas Feinberg | 2020-08-11 21:52:57 -0700 Don't call sleeping monsters frenzy immune Datura darts will wake em right up. -------------------------------------------------------------------------------- 137458415d | Nicholas Feinberg | 2020-08-11 21:42:09 -0700 Generate Gauntlet monsters awake Let players explore around and see all the options without feeling bad about waking monsters up. (You'll still make monsters notice you, but there's less downside to that.) -------------------------------------------------------------------------------- 642869fea1 | Edgar A. Bering IV | 2020-08-11 18:11:10 -0400 Revise Wucad Mu Wucad Mu's channeling is the last vestige of evoked channeling. This commit changes the staff of Wucad Mu to be a passive effect, occasionaly refunding the MP cost of a spell (chance depending on evocations) and occasionally backfiring when this happens (backfiring less often at higher evo and more often for higher cost spells). While the stat drain did put somewhat of a brake on Wucad Mu's channeling, unlimited out of combat MP restoration leads to tedious optimality incentives to use the staff while resting. A passive effect plays similarly but without the unfortunate incentives. -------------------------------------------------------------------------------- 694ee37b36 | Edgar A. Bering IV | 2020-08-11 17:54:36 -0400 Remove staves of energy Without a hunger mechanic to interact with, staves of energy became a trade-actions-for-mp-regen item. This is not particularly interesting in combat as it removes the impact of MP management on a battle and allows the MP mechanic to be subverted for almost no cost, and full of tedious incentives out of combat. If rapid sources of MP are desired, the regen rate of MPRegen amulets can be increased. -------------------------------------------------------------------------------- 952f204493 | Edgar A. Bering IV | 2020-08-11 10:12:39 -0400 Don't repeat the item name in the item describe popup (12341) Doing so could cause a spillover of greater than 80 characters in the item actions line for little benefit. -------------------------------------------------------------------------------- b2f46efeda | gammafunk | 2020-08-09 12:02:26 -0500 Don't give pan lords rings of fog These clouds are more likely to help the player block harmful effects from a pan lord or its friends than they are to help the pan lord trap the player. There are some problems with the other cloud types: specifically fire/ice clouds are too weak with any level of rF/rC, and acid and negative energy are completely negated by one level of the appropriate resistance. It would be good to consider making rCorr/rN only grant limited resistance to the relevant cloud types. Perhaps fire/ice clouds could see some kind of "enhanced" version of these clouds types deployed for pan lords where damage values were not so low, making higher levels of the resistance relevant. I'm leaving these clouds in for now, but future commits can address these aspects. -------------------------------------------------------------------------------- acb219a522 | Edgar A. Bering IV | 2020-08-09 12:48:08 -0400 Remove Ring of Thunder from player save compat code -------------------------------------------------------------------------------- 7a7cdb68e6 | Edgar A. Bering IV | 2020-08-09 12:48:08 -0400 Adjust cloud ring mon_info descriptions Add a HUD display term (just the simple "clouds") and shorten the targeting "long name". -------------------------------------------------------------------------------- fc961c28a4 | Alex Jurkiewicz | 2020-08-09 12:48:08 -0400 Fix some typos -------------------------------------------------------------------------------- 26a69325be | Alex Jurkiewicz | 2020-08-09 12:48:08 -0400 Re-add cloud rings for Asmodeus and Bai Suzhen Monster flags for the other ring types can be added as required. -------------------------------------------------------------------------------- 4e85e5fcb6 | Alex Jurkiewicz | 2020-08-09 12:48:08 -0400 Add cloud rings to (some) random Pandemonium Lords This effect already exists in the game, but only for Asmodeus and Bai Suzhen (in dragon form). Let random pan lords have a chance at getting one too. The chance of a pan lord generating with a cloud ring is about 1 in 12, which might have to be adjusted upwards or downwards in future. The chance for each cloud type is a little more complex to calculate given the dependency on pan lord brand / attack flavour, but the rarest brands roll about 1 in 12 times. Depending on the cloud type, these cloud rings can be terrifying or ignorable. For example, chaotic clouds can instantly paralyse the player and negative energy clouds can heavily drain them within a few turns. On the other hand, clouds of fog and mutation do no direct damage. Pan lords with cloud rings should feel qualitatively different to fight than those without. Mostly this comes from increased danger being in melee range, but also from the impact on battlefield terrain that dropping clouds everywhere provides. In some cases, this can even work to the benefit of the player. One aspect of pandemonium lords I hope this change emphasises is that they should be considered the "apex predator" of DCSS. They should always be a scary fight, no matter how prepared you are. This is especially true since they spawn only in either the optional branch of Pandemonium (where it's even possible to collect the demonic rune without fighting one) and on the orb run (where running is already encouraged). This change should increase the number of cases where players run (in careful ways!) from pan lords. -------------------------------------------------------------------------------- e3ac2ca022 | Alex Jurkiewicz | 2020-08-09 12:48:08 -0400 Add Ring of X monster enchantments * Ring of Flames * Ring of Thunder * Ring of Chaos * Ring of Mutation * Ring of Fog * Ring of Ice * Ring of Draining * Ring of Acid * Ring of Miasma These enchantments, when added to a monster, surround them with the appropriate cloud ring. -------------------------------------------------------------------------------- 836a950c60 | Alex Jurkiewicz | 2020-08-09 12:48:08 -0400 Remove Ring of Thunder/Flames spells -------------------------------------------------------------------------------- 8b4922b904 | Alex Jurkiewicz | 2020-08-09 12:48:08 -0400 Add surround_actor_with_cloud -------------------------------------------------------------------------------- 79d515981d | Edgar A. Bering IV | 2020-08-09 11:51:41 -0400 Nerf condenser vane charges Player feedback is that the vane recharges too fast and holds too many charges, so this commit reduces the charges to two and increases the XP cost of a charge. I went with two charges instead of one because while a single cloud blast is typically enough in a fight, sometimes a player might like to reroll their clouds after repositioning, and I want that option to remain available for the item's use. -------------------------------------------------------------------------------- b65249eddd | Edgar A. Bering IV | 2020-08-09 11:49:19 -0400 Thaw orbs of destruction Prevent Absolute Zero from targeting conjured "monsters" which are not really monsters but monster-type actors behaving as spell proxies. -------------------------------------------------------------------------------- bdb2cd30f2 | Goratrix | 2020-08-09 11:41:15 -0400 Don't repeat acquirement identification message (dinky) Currently the message sequence when reading un-id acquirement is: This is a scroll of acquirement! _Something appears at your feet! It was a scroll of acquirement. The second message is not necessary as it only applies to scrolls which produce an immediate effect without a prompt/menu. -------------------------------------------------------------------------------- 0ae597662a | gammafunk | 2020-08-08 18:14:49 -0500 Actually fix lair.des (steves) The fix in 0cf64709 didn't change the glyph on the map to match the new one in the SHUFFLE. Fix this, and tidy up some other syntax in this vault, as well. -------------------------------------------------------------------------------- 7d7832473c | Nicholas Feinberg | 2020-08-08 16:06:07 -0700 End the endless hopping (Goratrix) -------------------------------------------------------------------------------- 732bf3b8d2 | Goratrix | 2020-08-08 08:59:53 -0400 Don't crumble acquirement scrolls (12336) Unidentified acquirements scrolls are now cancellable after they are read, so they should not crumble to dust. -------------------------------------------------------------------------------- 0cf647090d | Alan Malloy | 2020-08-07 13:41:47 -0700 Unbreak lair des from 22768bd Apparently you can't use / as a glyph that's involved in a shuffle -------------------------------------------------------------------------------- 9192ace2d8 | Goratrix | 2020-08-07 13:23:06 -0700 Move book of Hexes from E to H alphashop (#1514) Book was renamed from Enchantments to Hexes in d415a3f. -------------------------------------------------------------------------------- 22768bdd36 | Alan Malloy | 2020-08-07 13:20:43 -0700 Don't generate two Lair entrances (/u/ezmonkey, /u/zeunysos) 0550c0020cea914692a accidentally broke this vault while removing rations. -------------------------------------------------------------------------------- 57170428f2 | Naruni | 2020-08-06 16:12:27 -0400 Door reachability fine tuning Tornado was going through runed translucent doors, and could pull a mob through the door. In terrain.cc the function feat_is_reachable_past was not looking for these doors. Add a check referencing the existing feat_is_closed_door which includes doors. Bug report: https://crawl.develz.org/mantis/view.php?id=12330 Committer's note: resolves #1511 -------------------------------------------------------------------------------- 60e829e2c0 | Edgar A. Bering IV | 2020-08-06 10:23:37 -0400 Fix an unmarshalling bug (12337) -------------------------------------------------------------------------------- c405a18ee9 | Edgar A. Bering IV | 2020-08-06 09:15:22 -0400 Move the ai_action namespace to its own header For now this is to silence compiler warnings, but also to provide some future-proofing refactor to make it easy to use the ai_action::goodness type in other parts of monster AI. -------------------------------------------------------------------------------- 0fdccc9209 | Implojin | 2020-08-05 20:56:27 -0400 Update monster creation documentation monster_creation.txt had previously contained several references to enum.h, which was split into several files in 895272c. This commit updates the documentation accordingly. -------------------------------------------------------------------------------- 0187308201 | advil | 2020-08-05 14:09:43 -0400 Fix seed explorer handling of multiple portals Because the origin level wasn't restored after cataloguing a portal, only the first portal would be found (and probably the rest of the seed would be messed up). Thanks to Lici_the_Crawler for the test seed for fixing this bug. -------------------------------------------------------------------------------- d769fb5ce2 | Edgar A. Bering IV | 2020-08-05 08:59:37 -0400 Update the changelog -------------------------------------------------------------------------------- 20a46bdb45 | Edgar A. Bering IV | 2020-08-04 18:00:25 -0400 Give the full buffet of misc evokers to Wanderers Previously this list had been pared down to only box of beasts or phial of floods, only because those were the only evokers remaining from when this wanderer possibility was added. -------------------------------------------------------------------------------- 60031c9986 | Edgar A. Bering IV | 2020-08-04 16:24:14 -0400 Remove Wand of Clouds As discussed in the previous commit, the cloud-evoker-effect is better as a misc evoker without cone targeting. This removes the old wand. -------------------------------------------------------------------------------- a1987e683f | Edgar A. Bering IV | 2020-08-04 16:24:14 -0400 New Misc Item: Condenser Vane The condenser vane is inteded as a misc-evocable replacement for the wand of clouds. Wand of clouds used a cone targeter, and targeting cones really don't fit well with crawl's grid geometry. The new misc evoker places clouds in a 3x3 arrangement centered on each monster in LOS, using a similar random pick table to the old wand of clouds, but permitting high tier clouds all the way from 0 power, just with low chance, to avoid breakpoints. This is put on a misc item instead of a wand as a part of larger changes to evocations with the goal of dividing wands/misc items by monster-usability. Monsters using wand of clouds tended to only hurt themselves and not get the player well, and this effect would have similar issues. -------------------------------------------------------------------------------- 1d127b8e98 | Edgar A. Bering IV | 2020-08-04 16:24:14 -0400 Make Phantom Mirrors and Boxes of Beasts XP Charged Stacking consumables that scale with skill to very high power create a power spiral issue. Strong characters can hoard these items and then either spam their masses, or simply finish the game with a giant stack. Weak characters who lean on them early fall behind and never establish a hoard, remaining hobbled. Offering unlimited stacks also encourages hoarding psychologically, which is an unfun behavior: the effects of these items are cool and we'd like players to use and enjoy them. For these two reasons, I'd like to move away from the consumable model of evocables. Wands have separate complications before they can move to this model, but Mirrors and Boxes are easy. -------------------------------------------------------------------------------- 70697cc071 | Ryan McNeive | 2020-08-04 15:16:31 -0400 Add Grinder taunt "Make like a tree!" 0.01% of players will quaff !lig right after they get this, and they'll think they made the joke up. Devilry revelry— Grinder the shadow imp came 'round the corner with "Make like a tree!" Who would have known that my lignificational beverage wasn't quite his cup of tea? -------------------------------------------------------------------------------- f8362a0c98 | wheals | 2020-08-03 03:34:51 -0400 Fix draconian acid breath. It only ever splashed onto monsters that were adjacent to both the spitter and the target. I believe this was a holdover from when the code was used for mottled draconian breath, which had a range of 1 anyway. The targeter always claimed that the splash would hit every monster adjacent to the target, so let's make that true. Also stop the breath from splashing the target twice, which doesn't look intentional either. -------------------------------------------------------------------------------- 112e8ad46e | advil | 2020-08-02 15:24:32 -0400 Add github issue tracker links in a few key places It doesn't seem like mantis is going to be generally usable any time soon, so this makes sure that github issue tracker is linked both in the manual and in crash messages. I didn't go through all the mentions of mantis in the dev-oriented docs. This isn't intended to deprecate mantis, because we do use it and accept bug reports there for anyone who has an account (and there's a *ton* of history as well). Resolves #1506. -------------------------------------------------------------------------------- 5c46762673 | advil | 2020-08-02 15:09:54 -0400 Item menu improvements (fixes 12331) 12331 is that (since cc164c81d) a double esc is required to exit from various item menu prompts, because of a bad continue. When fixing this, I made several other improvements, namely letting `*` and `?` act as toggles rather than absolute mode switches. That is, `*` turns on and off the full inventory display, and `?` turns on and off the menu altogether, letting you see the map. This is a behavior change, but I think it works much better for the menus I tested. Also, esc for non-autolist menus does still return you to the prompt, which I think was previous behavior. (What will this domino to break that I haven't tested? tbd. This code is used in a lot of cases.) -------------------------------------------------------------------------------- bff1e92059 | Nicholas Feinberg | 2020-08-01 13:20:37 -0700 Disable the zot clock in sprints (hayenne) -------------------------------------------------------------------------------- 1138013c83 | Nicholas Feinberg | 2020-08-01 12:55:55 -0700 Make Zot messages more explicit -------------------------------------------------------------------------------- 8fb9d0a81a | advil | 2020-08-01 15:37:24 -0400 Speed up autofire somewhat Recent UI improvements have made direction chooser code more robust and clean, but led to regressions in the behavior of crawl_state.invisible_targeting, used during autofight calls to hide the targeting ui. The result is that autofiring has become extremely slow, resulting in visible ui lag and timeouts when holding tab with a ranged weapon online. This commit fixes the easiest hot spots to fix, and adds a comment at the one remaining hot spot in this code where I'm not sure what the right way is to suppress redraws. One other remaining part of what makes autofire slow is simply the animation drawing, which by default at least triggers a lot of full-screen or at least full-map redraws. -------------------------------------------------------------------------------- 3521204769 | Nicholas Feinberg | 2020-08-01 11:35:35 -0700 Don't trigger *Rage on riposte Similarly to minotaur headbutt and hydra head-chopping, effects that aren't under the player's control shouldn't trigger nasty consequences for them. -------------------------------------------------------------------------------- 5ca82d7491 | Nicholas Feinberg | 2020-08-01 11:29:14 -0700 Simplify the Scarf of Shadows Give -1 LOS instead of the Robe of Night-style 75% LOS. -------------------------------------------------------------------------------- 0de94a4e4a | Nicholas Feinberg | 2020-08-01 11:29:14 -0700 Remove a rat dprf Left in accidentally. -------------------------------------------------------------------------------- 77715f0e7d | advil | 2020-08-01 11:50:16 -0400 Fix a smallterm crash and refactor slightly The crash happens because there are code paths that can directly redraw the hud. The refactor is to prevent some messy recursion that doesn't cause any problems now but is going to be bug-prone sooner or later. -------------------------------------------------------------------------------- f0b7f4657e | Nicholas Feinberg | 2020-07-31 22:55:40 -0700 Turn +Rats into *Rats The Ratskin Cloak is yet another of Crawl's many, many very powerful items that demands considerable micromanagement to unlock its power. Some items offer a lot of fun when micromanaged, but this big bag o' rats doesn't quite get there. Change it from an activated ability to instead spawn rats when the player is hit. Goal is to have bonus rats as a 'sometimes thing'. Current odds are somewhat arbitrary but seem to play OK. -------------------------------------------------------------------------------- 81d34b63e8 | Nicholas Feinberg | 2020-07-31 22:15:06 -0700 Triple contamination decay Decay contamination three times as quickly (from -25/turn to -75), and apply negative contamination effects correspondingly three times as often. It's quite easy to spend huge numbers of turns resting off contamination, which is neither exciting nor meaningful. Now that the zot clock exists, it makes sense to rationalize the amounts of time involved. If invisiblity-based strategies are powerful, we have better knobs to tweak them with. Some notable effects: - +Inv took between 50 to 150 turns to rest off at ~17 Evocations; now it takes 16-50 turns. - Spell Invisibility took between 50 to 120 turns to rest off at 50 power; now it takes 16-40 turns. - One cast of Irradiate took 40-60 turns to rest off; now it takes 13-20 turns. - It took 200 turns to go from the edge yellow contam to no contam; now it takes 70ish. -------------------------------------------------------------------------------- 6c97825307 | advil | 2020-07-31 13:04:52 -0400 Don't repeat dump_order fields I can't think of a good use case for repeating dump_order fields, and allowing it seems to cause more annoyance than anything whenever we change the defaults, or have an alpha-only default (as is currently the case with turns_by_level). This version uses the first instance in an order, so if you want to reorder the defaults it will require removing and then re-adding. There's no elegant implementation of arbitrary order + unique elements in c++ that I know of, and simply keeping two data structures seemed like the least unaesthetic to me. -------------------------------------------------------------------------------- 38aef042b1 | Edgar A. Bering IV | 2020-07-31 09:04:42 -0400 Actually increase the Zot bank to 15k faca0e1d claimed to do so but tried to be fancy with fractions and ended up reducing it to 10k. This makes the Zot bank an explicit integer instead of tying it to the per-floor contribution. -------------------------------------------------------------------------------- 6dfca0d9ad | Nicholas Feinberg | 2020-07-30 17:23:10 -0700 Fix multizots Players would never get the extra penalties for hanging around after the first zot and before death, because of a math error. (I tested the feature with a very low MAX_ZOT_CLOCK, so the error cancelled out!) -------------------------------------------------------------------------------- cf37096eec | advil | 2020-07-30 18:49:02 -0400 Ensure valid cursor position after drawing hp/mp bar After 94fddd9 gave the equip_bar somewhat smarter redraws, it became possible for this function to skip everything after one of the bar redraws, which when it happens would lead to a crash -- these bars guaranteed an invalid cursor position at the end of `draw`. `vdraw` would probably have a similar problem but cursor position validity isn't handle the same way for tiles (and equip bar doesn't exist either). -------------------------------------------------------------------------------- faca0e1de5 | Nicholas Feinberg | 2020-07-30 08:36:28 -0700 Bump the clock bank back to 15k There wasn't any particular reason to drop it to 12k other than round numbers. -------------------------------------------------------------------------------- 7adeca9acf | Nicholas Feinberg | 2020-07-30 08:29:35 -0700 Invoke the malevolent chronology of Zot The natural tendency for roguelikes is to encourage cautious behavior. It's over once you die once, after all, so you should take your time. That's not a bad thing, but to balance things out and discourage extremely time-consuming tactics (which tend not to be very fun!), it's good to have a counterpressure encouraging players to move quickly. Food was intended to be such a clock, but for a variety of reasons, it never worked as a clock for anything but the most egregious abuses. (And not even for that for foodless races, of course.) Scores is a compelling motivation for some players, but not many - most are just playing to win. How can we make the most viable way to win also the most fun? This commit adds a new 'Zot Clock'. It ticks up over time, and jumps down whenever you enter a new level - roughly 6000 turns of clock per level. Once you hit turn 11,500 or so on the clock, the malevolent and unexplained entity Zot strikes, draining you immediately and then again once every 100 turns or so. At turn 12,000, you die. Each branch tracks the 'clock' separately. 6000 turns per level allows for a 300,000 turn 3-rune game, which seems very generous. The effective cap of 12,000 turns 'stored' at any given time means that there's somewhat less slack than that implies, but a slow character can usually do levels in under 2500 turns and inter-level travel in under 500, so I'm hopeful that normal characters will rarely if ever see any of this system. The very slowest game we saw (an extreme outlier) averaged slightly over 5k turns per level in one branch and hit 7.5k turns in one level, which this clock would cover. We use 'levels seen' here as a proxy for progress because that's simple to conceptualize and relatively difficult to abuse - it's hard to "stash" entire levels as a clock reserve in the same way you could stash "unexplored map tiles" or "weak monsters". The separate clock per branch allows players to dip into branches and then bail without being penalized - the per-branch clock is paused while they're away. The clock is paused while you're in Abyss, since that doesn't fit the exploration model well and isn't usually that wise to linger in, and turned off entirely when you get the ORB, since (a) there's a new clock then and (b) it'd feel awful to die of time-out on the orb run. It's possible to scum Pan for time, but I mean, if you're scumming Pan, just win already! Chei gives you some extra time, in keeping with the theme of the god. It's possible that races need different clocks based on their movement speeds, but I'm hopeful that the difference there is fairly small relative to the slack in the clock. -------------------------------------------------------------------------------- 2f6e3b4e38 | Nicholas Feinberg | 2020-07-30 08:29:35 -0700 Remove unused statuses -------------------------------------------------------------------------------- 8fb39a49d2 | Edgar A. Bering IV | 2020-07-29 21:46:53 -0400 Update the changelog -------------------------------------------------------------------------------- 4b749affef | advil | 2020-07-29 19:54:14 -0400 Re-quiet turn 0 book reading (joshgelbard) This was accidentally made non-quiet again in b274e4624. This new version uses the power of RAII to avoid adding back a bool or conditioning on turn. Resolves #1503 -------------------------------------------------------------------------------- c98181cb6c | advil | 2020-07-29 19:50:03 -0400 Don't let force mores trigger during char setup This is sort of a placeholder fix in absence of a better understanding of why messsages aren't showing yet but a more can, but so be it. Bug reported in #1503 -------------------------------------------------------------------------------- 94fddd9a36 | advil | 2020-07-29 19:40:47 -0400 Don't unconditionally draw noise/equip bar This is mainly aimed at the fact that this bar, unlike everything else on the hud, unconditionally rendered, so when starting up the game it would show up on its own at odd times. This commit changes the noise bar so that it doesn't render during startup, but renders unconditionally the rest of the time -- smarter logic is no doubt possible, but I was somewhat defeated by silence. The equip bar only redraws as needed by gear or weapon changes. This also removes an unused return value in output.cc and some support code. -------------------------------------------------------------------------------- 7cf0f577d3 | advil | 2020-07-29 09:52:29 -0400 Don't crash on quiver drawing during game setup This is not very easy to trigger, but as reported in #1503 an accidental change in spell starts allowed it to be possible to trigger this bug with an appropriate force_more_message. Basically, if the hud rendering code is called before the inventory is fully setup, there will be a quivered item that is not yet linked, and this call would crash. Instead, just silently return -- it's probably not going to be what is intended to draw the hud in this state, but it's always happening by side effect so shouldn't crash. -------------------------------------------------------------------------------- 989023bd0d | advil | 2020-07-28 15:11:51 -0400 Prevent eternal Heaven, again (u/Anno474) This bug was present in an early version of WJC, fixed in 9dd3d4ce55, added to the epic bugs list, and then recurred in c9e437d3e5. Like the original fix, I have added a bunch of future-proofing in case of this specific bug coming back again, as well as fixup code (instead of a silent fixup, we will now see a crash triggered in player-reacts, with fixup on reload). The basic issue is that heavenly storm is implemented as a dual duration + prop, and keeping those in sync is not robust. It seems like a better fix, which would take more work, would be to make the end function a duration end effect, and call all duration end effects on revival. But I suspect there are non-obvious complications that explain why revival isn't already handled that way, so I'm just doing a quick fix for now. -------------------------------------------------------------------------------- 0d2872ff50 | advil | 2020-07-28 10:43:36 -0400 Comment the spl-util.cc catch2 test a bit better Also remove some debug code. -------------------------------------------------------------------------------- c03f2b59e5 | advil | 2020-07-28 10:33:26 -0400 Logic fixes for _ms_waste_of_time, function renames for consistency The logic fixes are mostly things done incorrectly in the original refactor. The renames are to improve consistency and code readability, and include the eponymous function. -------------------------------------------------------------------------------- eecf6e74b9 | advil | 2020-07-28 10:33:25 -0400 Add some documentation for ai_action::goodness -------------------------------------------------------------------------------- fbca040e39 | advil | 2020-07-28 10:33:25 -0400 More systematically check `foe` in monster casting I'd actually removed some of these checks, because as long as the targeting flag is set properly they are not needed. However, as long as this API is using a monster * here I decided it is still better coding practice to have them than not, and it is not as if this API isn't error-prone. (Really, this code needs a larger refactor where spell implementation type determines whether there is a `foe` parameter at all.) -------------------------------------------------------------------------------- a0e1fba1b5 | advil | 2020-07-28 10:33:25 -0400 Replace summon swarm with shadow creatures in fedhas sprint The implementation for summon swarm was removed in d48e5fa4009, but fedhas sprint places sentient oklobs that can cast spells, including this one. Since summon swarm was not actually marked as removed, this didn't show up as an error until one of my previous commits improving validation of removed spells etc. This commit uses shadow creatures instead, and thanks to a tip from kate-, sets the monster list for the sprint to match that of the old summon swarm spell. -------------------------------------------------------------------------------- b84026900b | advil | 2020-07-28 10:33:25 -0400 Improve validation of spflag::monster This was very inconsistently set, because preivously an error would be generated only for player spells with a monster flag, but not for non-player spells without a monster flag. To do this required a tiny bit of extra work to check wand spells and a few idiosyncratic cases (resulting in yet another static const unordered_set unfortunately), but found a whole raft of cases where the flag was missing. This might be better as a catch2 test (along with some of the other things validated when initializing spell data), but I don't yet understand how to deal with cases like this which involve multiple .cc files in catch2 tests. -------------------------------------------------------------------------------- 2a2180136b | advil | 2020-07-28 10:33:25 -0400 Add a lua test that exercises monster spells This attempts to cast every monster spell, both with and without a foe. The idea is to at least suss out mistakes in conditioning on a foe without a targeting flag, and other basic issues. There is no guarantee that all the spells actually get cast -- since they may still be a waste of time relative to the artificial scenario. Still, most do get cast so this is a useful exercise. I implemented this as a lua test rather than a catch2 test because it requires a setup with actual monsters placed somewhere in order to work. The commit also fixes a number of issues found while constructing the test. -------------------------------------------------------------------------------- 5af8f3b136 | advil | 2020-07-28 10:33:25 -0400 Add a catch2 test to cross-check removed spells -------------------------------------------------------------------------------- afbf42396c | advil | 2020-07-28 10:33:25 -0400 Refactor _ms_waste_of_time There are many things that have long bugged me about this function, including: (i) inconsistencies about how cases that would crash are handled, such as lack of a foe, (ii) conflation of what is just an actual waste of time vs what is impossible (would lead to a crash without special handling), (iii) the flipped logic of this function vs nearly everything else in this file (true here = is a waste of time, true in most other places = can or should cast), and (iv) least importantly the use of a 2-valued logic. This refactor addresses all of these, while providing future room for more complex ai decisions (e.g. choices among alternative actions) if they should ever be desireable. The refactor is also aimed at making testing spells more doable, and more minor things like more consistent wizmode casting. Now, _ms_waste_of_time returns a "goodness" value that is an integer if the spell is possible to cast, which will be >= 0 for cases where previously _ms_waste_of_time returned false. There should not be any actual changes in behavior with this commit. Foe validation is handled entirely conditioned on the spell's targeting flags, rather than on a spell-by-spell basis. (A future commit will test this systematically.) In the long run, this commit leads towards an api where monsters can choose from a ranked list of actions, rather than the much more ad hoc action selection criteria they have now. -------------------------------------------------------------------------------- 34f0fc0abf | Edgar A. Bering IV | 2020-07-28 09:37:07 -0400 Reduce the slots melded by beastly appendage (mdonais) The new melding requirements were picked to disincentivise using BA for optimal marginal gains long past the point of fun; they are a bit extreme to the point of disincentivising using BA for anything other than a starting transmuter who hasn't found aux armour. Reducing the melding to boot and helmet slots keeps the disincentive for using it on all characters but makes the spell more flexible and allows it to appeal to other character types while maintaining a tradeoff of defence for offence. -------------------------------------------------------------------------------- 0958c023ba | advil | 2020-07-27 23:48:20 -0400 Don't place clouds for in-transit lemures They will be at the lemure's last position on a different level, and so potentially in a wall. -------------------------------------------------------------------------------- 50c865f36f | Nicholas Feinberg | 2020-07-27 17:49:47 -0700 Clarify Rampage description "Rampaging toward enemies" was not very clear. -------------------------------------------------------------------------------- fabd1c6aea | Nicholas Feinberg | 2020-07-27 17:49:00 -0700 Ban Lear's Palentonga (Midn8) -------------------------------------------------------------------------------- b274e4624c | advil | 2020-07-27 20:00:26 -0400 Simplify vehumet + library interaction (11636 etc) In the days of books, if you memorised a veh offering and then forgot it, you would be out of luck without that book on hand. This behavior was more or less preserved into the new world of libraries. However, now vehumet offerings are the only way in the game to have memorised a spell that is not in your library, and therefore, a regular source of confusion. This change adds a veh gift to your library if you choose to memorise it, removing this (currently) odd exception entirely. I've also removed a bunch of bools that were only used for the save compat case, from back when upgrading from games with inventory books would have been common. The upgrade will still work, just be a bit more spammy than it used to be. -------------------------------------------------------------------------------- acbe401039 | gammafunk | 2020-07-27 04:52:23 -0500 De-closet the central area of an encompass vault It's possible for a formicid to get stuck in the central safe area in hangedman_spin_cycle, since this vault can place on branch ends, which wouldn't allow shafting out. The area can't have no_tele_into otherwise it's totally inaccessible outside of wall breaking. The only alternatives to fix it are to fill it with wall or to make the area universally accessible. I went with the latter approach, since it's more fun and flavorful. This commit adds stone glass so that most of the area can be seen into and randomly places two transporters to provide entry and exit. Anyone shafting into the central area can use the exit transporter, and players from outside can enter the safe area knowing what they'll encounter, for the most part. Note that it's still possible for uniques like the Enchantress to place in the central area or for monsters to just teleport or shaft in, so it's not always fully safe! I left in the 'exit' teleport traps since that possibly provides a better exit method compared to the exit transporter, which could have monsters around it. The very center and some outer edges of the central area can't be seen through the glass, something which could be cleaned up in the future. The original vault author can feel free to try another approach to this fix so long as shaft closet issue is fixed somehow. -------------------------------------------------------------------------------- e645bd13c1 | advil | 2020-07-26 14:46:58 -0400 Retune qazlal animations a. Disaster area no longer redraws for every single explosion tile. b. Disaster area only delays after each upheaval call, rather than each individual tile explosion, with consistent behavior across build targets. (Before 855e26d6cb it was supposed to do this, but because of bugs combining together, only did it for webtiles.) c. Tweak delay times, if this slows things down too much on a live webtiles server (it was ok on local webtiles) the upheaval delays may need lowering again. d. Randomize order of explosion for upheaval. e. Adjust `bolt` API so that caller has more control over delays and redraws. Probably other things could use this besides qazlal. -------------------------------------------------------------------------------- 08c0c8f6c1 | S. Mark | 2020-07-26 20:50:05 +0300 Tweak Gozag powers description. To make it grammatical again, and make it more clear all monsters are turned to gold, not just fleshy ones (see #1498) -------------------------------------------------------------------------------- bef3e4aff3 | advil | 2020-07-26 11:36:15 -0400 Revert "Revert "Fix Qazlal Upheaval rendering to every tile twice."" This restores aidanh's fix in 855e26d for the upheaval double-draw bug, but instead of not firing at all, it just suppresses the animation. This (partially) reverts commit cae7f7452bcd83c8c1466d6a9b18208844c611b6. -------------------------------------------------------------------------------- cae7f7452b | Aidan Holm | 2020-07-26 23:28:14 +0800 Revert "Fix Qazlal Upheaval rendering to every tile twice." Reverted because the fire() call was required for Upheaval to do damage. Oops! This reverts commit 855e26d6cb451adaf0a72453e0a0ec997f0ee9b2. -------------------------------------------------------------------------------- 8cff2afadc | Aidan Holm | 2020-07-26 22:10:50 +0800 Fix wide UI popups on webtiles after push/pop (#12194) This was caused by jQuery's fadeIn() setting the 'display' property to 'block', which interferes with the flexbox CSS on UI popups. See also: stackoverflow.com/questions/1091322/#comment32697946_10322651 -------------------------------------------------------------------------------- c6a733cb5c | Aidan Holm | 2020-07-26 21:49:38 +0800 Fix double comma in monster speak (#12297) -------------------------------------------------------------------------------- 6ea9c3c371 | Edgar A. Bering IV | 2020-07-26 08:59:18 -0400 Tie the tracer range for rampaging to current vision For Barachi rampaging at a range 8 enemy, the tracer code prevents information leaks already since you can't rampage at things you can't see. -------------------------------------------------------------------------------- ab1a5ca55a | Edgar A. Bering IV | 2020-07-26 08:58:26 -0400 Fix an assert in the rampage code -------------------------------------------------------------------------------- 8637d40d38 | gammafunk | 2020-07-26 06:31:47 -0500 Make the Cloud Mage fly (CanOfWorms) Otherwise it could cast Tornado and potentially drown itself in the deep water outside of its own vault. Other fixes include replacing deep water with e.g. clouds or shallow water or making monster AI smarter, but both of these are more work for no improvement in gameplay. -------------------------------------------------------------------------------- 08ff59a6b3 | Aidan Holm | 2020-07-26 15:20:22 +0800 Reimplement the map view as a widget As with the direction chooser, wrapping the map view in a widget is an important step towards widgifying all of crawl's UI; see 38af612a8 for more details. -------------------------------------------------------------------------------- cc164c81d2 | Aidan Holm | 2020-07-26 15:10:19 +0800 Fix excessive redraw in prompt_invent_item -------------------------------------------------------------------------------- 855e26d6cb | Aidan Holm | 2020-07-26 14:30:54 +0800 Fix Qazlal Upheaval rendering to every tile twice. Upheaval first renders each affected cell in order, with a scaled delay between each cell, producing the expanding explosion effect. After this is done, environmental effects to the affected locations. In this second pass, it also re-rendered each cell, but without a scaled delay between cells. This second rendering caused duplicate overlay tiles to be drawn, causing occasional crashes when casting Disaster Area (which invokes Upheaval multiple times) caused the overlays per cell to exceed 20, a hardcoded limit. I'm not sure why, but the original implementation of Disaster Area decided to not call scaled_delay in the first pass, resulting in its explosions appearing instantaneously, rather than animating out from the centre. That may be preferable, since otherwise Disaster Area takes a long time to animate (on Webtiles only), especially at high piety. My fix here removes the second render, and makes the scaled delay unconditional. If it's desirable to render Disaster Area explosions without animations, it'd be best to do them in a way that appears the same across platforms. -------------------------------------------------------------------------------- 4b1dca4f87 | advil | 2020-07-25 16:14:28 -0400 Fix the build -------------------------------------------------------------------------------- ad4b653831 | advil | 2020-07-25 16:04:43 -0400 Don't put D:1 plants to sleep (purplemustard) Recent fixes to D:1 monstergen that again generate all monsters with BEH_SLEEP, combined with the butterfly fix in 6c26fa703df9 led to any D:1 plants appearing to be asleep. Since BEH_SLEEP is meaningless on firewood, simply skip setting sleep-related properties when building monster-info for firewood, and consequently don't show it to the player. (So technically, they do still count as asleep() but there's no reason to make that visible.) -------------------------------------------------------------------------------- 5d66c9a495 | Kate | 2020-07-25 20:35:35 +0100 Fix grunt_forest_large_clearings being filled with traps (#12315) It still manually placed some traps (which it shouldn't have done), and then an error editing it when rations were removed in 0550c0020c resulted in those traps having a chance of being shuffled to replace floor. -------------------------------------------------------------------------------- 1de36163dd | Kate | 2020-07-25 19:53:42 +0100 Don't try to place rations as Zig loot Replace them mostly with potions of mutation, and also add potions of magic to the super_loot table. -------------------------------------------------------------------------------- acd2c82977 | Kate | 2020-07-25 19:53:42 +0100 Remove some references to rations and butchery -------------------------------------------------------------------------------- 4c9af893ca | Kate | 2020-07-25 19:53:42 +0100 Update some help files -------------------------------------------------------------------------------- 802b6cfe68 | Edgar A. Bering IV | 2020-07-25 13:08:20 -0400 Tweak some lua documentation To match the existing api; this is inconsistent between the private function names but these two functions seem like they're used by enough existing lua that breaking compatibility isn't worth it. Closes #1459 -------------------------------------------------------------------------------- c049b6daf6 | Edgar A. Bering IV | 2020-07-25 12:59:52 -0400 Don't visit stashes of size 1 (Ge0ff) -------------------------------------------------------------------------------- e2a07e3cac | Edgar A. Bering IV | 2020-07-25 12:56:32 -0400 Move some autopick logic to the correct place 8013e45feb moved a check that happened after the state change, which resulted in #1494. This moves the state change to before the check, closes #1494 -------------------------------------------------------------------------------- 97719ae224 | Edgar A. Bering IV | 2020-07-25 11:13:08 -0400 Tweak Palentonga charge confirmation prompts For all user prompts, cancel targeting on cancel for consistency with our other targeters. Change the moveto checks to a single call to check_moveto that checks all reasons a user might not want to charge. Closes #1496 -------------------------------------------------------------------------------- 4b0bbb2c2d | RJ Cunningham | 2020-07-25 10:55:27 -0400 Reduce nightstalker 3 to a single pip of stealth -------------------------------------------------------------------------------- a1cbe5f5d2 | RJ Cunningham | 2020-07-25 10:55:27 -0400 Remove Nightstalker from Demonspawn -------------------------------------------------------------------------------- b0b9125a3b | RJ Cunningham | 2020-07-25 10:55:27 -0400 Remove non-english Kobold descript -------------------------------------------------------------------------------- df08edfada | RJ Cunningham | 2020-07-25 10:55:27 -0400 Add nightstalker to kobolds. * Nightstalker gained immediately at level 1. * Presumably this is a huge buff for the race, but they are considered weak so this might not be a major issue. -------------------------------------------------------------------------------- 8bb0483f98 | Edgar A. Bering IV | 2020-07-25 10:21:06 -0400 Prevent Wu Jian martial attacks while rampaging or digging "Fancy" moves have strange interactions with Wu Jian martial moves; when it was just Dig (works) and Hop (doesn't) the inconsistency wasn't that noticable. With the addition of Palentonga charge and boots of rampaging, neither of which work well mechanically with Wu Jian, the consistency issue becomes more strained. This commit cleans up the rampaging interaction with Wu to avoid a host of complications, and tweaks martial moves to only be compatible with "normal movement" - disabling Wu processing while digging. Wu Jian's description is accordingly updated. -------------------------------------------------------------------------------- a0b39eb048 | Edgar A. Bering IV | 2020-07-25 10:21:06 -0400 Don't permit cancelling a rampage half-way through (mostly) Allowing user-based checks (wield weapon and exclusion prompts) to interrupt a rampage creates all sorts of weird opportunities to do strange things with the UI to manimpulate a rampage. So the rampage targeter now gives these prompts for the entire path before committing to the rampage. The stop_attack_prompts for certain unrands depend on LOS, in order to avoid an information leak these aren't issued until arriving at the monster—if a player is using one of these around allies they're probably already well aware of their interactions but we don't want to punish them too badly. Since you can't lunge at friendlies, there's no issue with penance checks coming after the move has been committed to. -------------------------------------------------------------------------------- 4f1a264f5e | Edgar A. Bering IV | 2020-07-25 10:21:06 -0400 Add a few more cancellation checks for rampages To prevent tricky 0 movement situations, as well as comment the remaining cases explaining why the check is not necessary. -------------------------------------------------------------------------------- 60e8377e26 | Edgar A. Bering IV | 2020-07-25 10:21:06 -0400 Rename lunging to rampaging This flavour is a better fit (adds a hint of recklessness instead of elegance) and avoids conflicting with Wu Jian's ability in name, since it is rather different. For the sake of future developers the internal names have been changed as well. -------------------------------------------------------------------------------- a75b93279c | Implojin | 2020-07-25 10:20:36 -0400 Adjust SPARM_LUNGING tracer logic. Based on ebering's suggestions in PR 1409 review: This commit adds Fedhas passthrough for lunging, uses you.can_pass_through for most of the logic, and makes some minor style adjustments. [ Committer's note: Squashed and rebased. Closes #1409 ] -------------------------------------------------------------------------------- 9ee0e9ea7b | Implojin | 2020-07-24 19:03:00 -0400 Mark SPARM_LUNGING as dangerous. This ego is going to lead to players running into groups of hostiles. It seems appropriate to warn them. -------------------------------------------------------------------------------- bb997399f7 | Implojin | 2020-07-24 19:03:00 -0400 Disable SPARM_LUNGING on Bardings. The Naga species conduct is built around limiting repositioning: It's not really appropriate for SPARM_LUNGING to be available for Na. The Barding item generation code has also been changed in Trunk since this ego was written: At present, the code does not distinguish between Naga and Palentonga bardings. As there are also some remaining compatibility questions re: how Lunging should interact with Palentonga movement, this commit disables SPARM_LUNGING on bardings entirely for now. If it's decided later that SPARM_LUNGING should work with Palentonga, such compatibility can be fixed at that time. -------------------------------------------------------------------------------- d33f4bd691 | Implojin | 2020-07-24 19:03:00 -0400 Add a new SPARM_LUNGING tile. This is very WIP stuff, but it's better than copying the old Jumping tile. I couldn't find any Crawl doc guidelines on effect palette theming, but I tried to make it predominantly purple-ish to indicate 'repositioning effect' to players. -------------------------------------------------------------------------------- a5349f925a | Implojin | 2020-07-24 19:01:22 -0400 New ego: Boots of lunging. This commit adds SPARM_LUNGING and all the plumbing to go with it. When equipped, this ego passively grants the player one "free" move action -- but only when moving directly towards a hostile monster. Have fun! Lunging handles manticore barbs, engulf, outgoing player constriction, ozocubu's armour, eringya's noxious bog, cloud trails, ozocubu's armour, and travel trails. Additionally, this commit adds handling to ensure that Lunging will still take time and trigger post-move effects, in the event that check_stop_running() or check_moveto() cancel the second square of the move. Lunging is hasty for Chei, and only the time-consuming move triggers Wu Jian actions. -------------------------------------------------------------------------------- 2a9615731a | Edgar A. Bering IV | 2020-07-24 12:13:38 -0400 Describe item stacks with xv This extends the functionality of the describe key v in explore mode when a pile of items is targeted to give a menu asking which item the user would like described. -------------------------------------------------------------------------------- e9dc0e8d5b | Edgar A. Bering IV | 2020-07-24 12:13:38 -0400 Clean up some old book reading code -------------------------------------------------------------------------------- d94cb669be | Edgar A. Bering IV | 2020-07-24 12:13:38 -0400 Split const and non-const parts of describe_item describe_item gets called in two contexts: describing an item that can't be interacted with at present (in view, in a shop, an acquirement offer) and describing an item in inventory (which offers interaction commands). The former use case is completely const, the latter is necessarily non-const because the available actions might modify the item in some way. The combination of these use-cases led to several unnecessary const_casts in the codebase. This commit splits the two use cases into two separate functions and updates all call sites that only want the former behavior. It also explains a const_cast used in shopping and acquirement, and removes an unneeded unwind_var in those settings. -------------------------------------------------------------------------------- a3d1f51b80 | advil | 2020-07-23 16:48:15 -0400 Add missing `static`s -------------------------------------------------------------------------------- 1bdd5c9711 | Edgar A. Bering IV | 2020-07-23 14:16:50 -0400 Visit all stashes with greedy_explore (kate-) While piles are now revealed, visiting each stash is still a valuable interface property for a streamlined play experience with greedy_explore. This commit restores that behavior. -------------------------------------------------------------------------------- 330158afa5 | Edgar A. Bering IV | 2020-07-23 13:41:46 -0400 Reveal pile contents in los Requiring players to walk to multi-item piles is a simulationist relic that is mostly an interface screw; with monster items identified and necromancy "corpse sense" for corpse using spells, the player can tell what is in a pile (more or less) in advance, but must navigate their character to the cell to confirm that information. This requirement prevented 'x' from describing piles effectively, since describing a stash has (mostly vestigal) requirements for communicating the conditional nature of the knowledge. With this commit piles are no longer obscure things you can only see the top of. If an item is in LOS, it can be viewed with all of the usual view commands. -------------------------------------------------------------------------------- 030cb20a18 | Edgar A. Bering IV | 2020-07-23 13:02:37 -0400 Make ^x consistent when accessed via x instead of directly -------------------------------------------------------------------------------- 89fe4bc6bc | Edgar A. Bering IV | 2020-07-23 10:12:37 -0400 New regex list option monster_item_view_features Add an ability to customize the features listed in ^x. This is intended as an accessibility feature to allow visually impaired players to request a customizably more verbose ^x listing describing the dungeon around them. -------------------------------------------------------------------------------- e0a2d2f65e | Edgar A. Bering IV | 2020-07-23 10:12:37 -0400 Make ^x in the targeter context sensitive Using ^x from within a targeting prompt will only display eligible targets (monsters, items, features). This includes LRD-eligible features. Selecting them will move the targeter appropriately. -------------------------------------------------------------------------------- 59fe67cabc | Edgar A. Bering IV | 2020-07-23 10:12:37 -0400 Allow ^x in the targeter and use it to select a target This is a long-requested feature, primarily for visually impaired crawlers but also as a shortcut automation for many players who want to quickly aim at the gnoll with the distortion weapon or whatever. -------------------------------------------------------------------------------- 9bf6f1401d | Edgar A. Bering IV | 2020-07-23 09:16:54 -0400 Remove some vestigal eating options -------------------------------------------------------------------------------- 7c001a520f | Edgar A. Bering IV | 2020-07-23 09:07:47 -0400 New option: travel_one_unsafe_move Setting this option to true causes auto-travel/auto-move to skip safety checks for the first move. This is intended as an accessibility option, allowing easier expression of things like "take one step to the nearest stair" via the user interface for users who would like to or need to rely more on automated pathfinding. -------------------------------------------------------------------------------- 5864c69260 | Edgar A. Bering IV | 2020-07-22 23:27:56 -0400 Fix some volitile state in direction_chooser -------------------------------------------------------------------------------- 649b3d1337 | Kate | 2020-07-23 01:35:23 +0100 Further clarify Chei passive -------------------------------------------------------------------------------- 3f6f88936d | Kate | 2020-07-23 01:34:33 +0100 Update Artificer description (ebering) -------------------------------------------------------------------------------- 239875ab86 | Kate | 2020-07-23 01:30:47 +0100 Don't leak information about invisible summoners (#12326) -------------------------------------------------------------------------------- 6c26fa703d | Kate | 2020-07-23 00:44:44 +0100 Clarify sleeping butterfly movement Most monsters are indicated as "sleepwalking" to explain why they move while asleep and confused, but permaconfused monsters like butterflies didn't have any such description - describe them (and fire vortices) as "drifting". -------------------------------------------------------------------------------- ee3a7d6640 | Kate | 2020-07-22 20:45:36 +0100 Adjust wording of Chei passives (#12321) Since it no longer affects metabolism outside of slowing down poison. -------------------------------------------------------------------------------- d09758e20d | Kate | 2020-07-22 20:41:20 +0100 Use form-specific shout verbs during wereblood (#12325) You whoosh as the wereblood boils in your veins! -------------------------------------------------------------------------------- fc2ff0c6b6 | Kate | 2020-07-22 20:37:31 +0100 Don't give Artificers branded starting weapons Giving them a weapon with a brand that scales with evocations suggests that they're supposed to continue to focus on that skill primarily (even though it's on a very weak base type of weapon), but other recent changes have been intended to make it clearer that the starting weapon is something that's supposed to be abandoned and they should adapt to their finds - the starting wands help survival but there's no real support for a pure evocations playstyle. If starting with a spectral weapon is really desired, they should most likely be somehow rebalanced to get a standard weapon choice and some starting weapon skill. -------------------------------------------------------------------------------- feb5eb7db6 | Kate | 2020-07-22 19:57:48 +0100 Rebrace -------------------------------------------------------------------------------- 0b5ff556b1 | Aidan Holm | 2020-07-22 23:51:03 +0800 Fix excessive redraw when autofiring ranged weapons This issue seems to have been caused purely by excessive redrawing of the screen, even though the content being drawn was exactly the same; terminals naturally lack a way to express any sort of framing or do atomic updates. This was caused by autofight.lua's implementation opening the targeter, issuing several commands to move the cursor, and then firing; each command caused a re-render. This wasn't an issue on local tiles or non-web console, because they won't re-render while there's still input. Unfortunately that's not yet possible on webtiles; I believe there are still one or two UIs that require a render call in order to get their text painted and sent to webtiles. The way around this I've used here is to split buffer swapping / updating out of rendering, and call it independently. Webtiles updates are managed separately, so calling render() but not swap_buffers() will still result in correct display on webtiles. The practical upshot is that rendering is now skipped on webtiles console if there are pending key events, which fixes the excessive redraw issue with autofight.lua Fixes #1492. -------------------------------------------------------------------------------- 67388ea477 | Edgar A. Bering IV | 2020-07-21 15:03:15 -0400 Don't place dispersal traps in opaque vaults This was causing the occasional connectivity failure by messing up opaque vaults and interfering with their connectivity guarantees, so let's not. -------------------------------------------------------------------------------- 41ea3d6674 | Alan Malloy | 2020-07-21 11:06:59 -0700 Mark charms as removed (/u/gottasay) In particular, this means you can no longer find manuals of Charms. -------------------------------------------------------------------------------- 5367098bfc | Alan Malloy | 2020-07-21 11:05:52 -0700 Remove some unnecessary initialisers -------------------------------------------------------------------------------- d2d4e505ad | advil | 2020-07-21 12:22:31 -0400 Skip pan when reporting per-level time This code didn't work right because it aggregated pan time, giving the same info that PlaceInfo already collected. It would be possible to fake up numbers for distinct pan levels but that doesn't really seem like useful data right now, so just don't report it at all. -------------------------------------------------------------------------------- 5bc9781010 | advil | 2020-07-20 21:29:17 -0400 Tweak time per level formatting -------------------------------------------------------------------------------- f3277c4969 | advil | 2020-07-20 15:50:42 -0400 Track time taken per level This will only apply to new games after this commit unfortunately, since it's not info we were tracking already. This implementation is pretty quick/hacky, but it would be easy to simply drop the prop + code altogether once we no longer need this data (said everyone who introduced a new player prop, ever). -------------------------------------------------------------------------------- 3d505ba2c6 | Edgar A. Bering IV | 2020-07-20 10:17:33 -0400 Update the changelog -------------------------------------------------------------------------------- 8013e45feb | Peter Gerlagh | 2020-07-20 09:55:18 -0400 Force autopickup with ;; ; usually displays the items in the stack the player is standing of if the player is 'unsafe', and forces autopickup otherwise. As of this commit autopickup can be forced even if the player feels unsafe by pressing ; twice. [ Committer's note: Closes #1421. Squashed & rebased, resolved merge conflict and updated to use the new `prev_cmd` parameter to process_command. ] -------------------------------------------------------------------------------- 1c8c1436e2 | syranez | 2020-07-20 09:27:17 -0400 Webserver: Enhance lobby_remove message The lobby_remove message contains now additionaly this three attributes: * reason: the players cause for exiting the game ("saved", "bailed out", "dead") * message: exit message if the reason is not "saved". Otherwise it is null. * dump: contains an url to the final morgue file or player morgue directory if game is not finished yet. -------------------------------------------------------------------------------- b778e2ae01 | Edgar A. Bering IV | 2020-07-20 08:58:08 -0400 Adjust Alistair's Intoxication This commit adds a prompt if there are no affectable monsters in view; it also updates the description of the spell to reflect what the possibilities are (the "humanoid" restriction is long gone; the restriction is intelligent and MH_NATURAL (aka living in the Lore)). For a dual school level 5 spell with awkward schools, obtaining high power is reasonably hard. This commit tweaks the spell a bit: the power cap is raised to 150 and vertigo is applied unconditionally, with duration scaling on the number of affected monsters. This cap keeps the spell below the "guaranteed confuse non-resistant monster" threshold, but makes the spell more attractive to investment later into the game. -------------------------------------------------------------------------------- 9fd5911e23 | Nicholas Feinberg | 2020-07-19 22:45:53 -0700 Fix another compiler warning -------------------------------------------------------------------------------- 9031aedee8 | Nicholas Feinberg | 2020-07-19 22:43:50 -0700 Don't claim Cheibriados slows metabolisms What's a metabolism? Sounds like something from Nethack. -------------------------------------------------------------------------------- 96c8680b48 | Nicholas Feinberg | 2020-07-19 22:39:15 -0700 Give Palentonga charge a to-hit bonus It feels bad to miss on a big exciting charge that you put work into setting up, so we can make charges miss less often while still making player accuracy somewhat meaningful. -------------------------------------------------------------------------------- 95eb4fa919 | Nicholas Feinberg | 2020-07-19 22:39:12 -0700 Fix a compiler warning -------------------------------------------------------------------------------- 5b8897f42d | Nicholas Feinberg | 2020-07-19 22:34:48 -0700 Display to-hit in monster xv When examining monsters, display approximate to-hit chances for your current attack (melee or ranged) next to their EV. Make some adjustments to to-hit calculation needed to display this EV in an almost non-duplicated way. Experiments with fsim and matlab suggest these changes should have minimal impact on play; fingers crossed. Minor other changes: - Flatten all UC hit modifiers from slight variance (between +4.5 to +6) to +5 for all applicable forms, for simplicity. This may have some balance impacts. - Don't amuse Xom with non-random attacks (which aren't real). Thanks to elliptic for the advice and WiseOldWolf/SanHolo for the extensive help and code contributions with this! -------------------------------------------------------------------------------- 7e20f673c0 | Nicholas Feinberg | 2020-07-19 20:25:45 -0700 Don't make allies hostile when joining a god The only permanent allies you can get that gods would hate are lost when you leave the old god anyway, so there's no need for the extra crufty complexity of making temporary allies go hostile. -------------------------------------------------------------------------------- 2951c22926 | Nicholas Feinberg | 2020-07-19 18:06:34 -0700 Never anger allies One of the most obscure parts of Crawl's divine conducts is that many gods forbid the player from using certain allies. Above and beyond giving penance for casting summoning spells, using items, etc, the gods will anger any monsters of a disapproved type that somehow become allied to the player, immediately making them un-allied. This is weird lore and bad gameplay - it doesn't add tactical complexity or interesting scenarios, it's just an annoying gotcha in rare corner cases. This commit removes those behaviors. This has the following effects: - Using spells and items that create undead or demons will still cause penance under good gods but won't make the created monsters hostile. - Phantom Mirror can be used on god-hated enemies without consequence. - An ally that becomes polymorphed into something your god hates won't become hostile. - The Horn of Geryon and Sceptre of Asmodeus will still give the player penance under good gods but aren't guaranteed to summon hostile demons afterward. - If a monster gains XP and transforms into a different type that your god hates, don't anger it. (This probably couldn't happen anyway.) - Don't automatically anger allied monsters placed for any other reason, e.g. summons of summons. Also, remove the unused monster_simulacrum function. -------------------------------------------------------------------------------- 13fbb91ece | Aidan Holm | 2020-07-20 01:56:40 +0800 Remove redundant redraws in direction chooser Now that the direction chooser is implemented as a widget, it doesn't need to call update_screen() itself; the ui framework will do that once everything in the widget tree has drawn to the screen. The range_view_annotator object does not need to call viewwindow, since the direction chooser widget will immediately do an initial render; so it can be reduced to just flipping some state. We also don't need to clear the screen after describing tiles, since the render handler will just redraw everything. -------------------------------------------------------------------------------- f9beda28d2 | Aidan Holm | 2020-07-20 01:56:40 +0800 Don't update screen when exiting last UI layout The point of this redraw_screen call was to restore the contents of the screen to a known state before returning control to the main game loop and its associated rendering code. Since it's going to update the screen anyway, there's no point in us doing it as well, and it's better not to, as it will reduce flicker. -------------------------------------------------------------------------------- 5a0d02cfae | Aidan Holm | 2020-07-20 01:56:33 +0800 Don't force screen update in redraw_screen See 3ebe85eda6 for rationale. -------------------------------------------------------------------------------- 72aac4d990 | Aidan Holm | 2020-07-20 01:56:33 +0800 Remove redraw_console_sidebar() hack Now that the direction chooser is drawn by a widget that redraws the entire screen, this hack is no longer needed, and instead actually adds latency and glitches due to an extra screen update. -------------------------------------------------------------------------------- c6476c8bcd | Aidan Holm | 2020-07-20 01:56:20 +0800 Don't force screen update in viewwindow See 3ebe85eda6 for rationale. -------------------------------------------------------------------------------- 3ebe85eda6 | Aidan Holm | 2020-07-20 01:55:44 +0800 Don't force screen update in print_stats This commit splits screen updating out of stat printing, requiring the caller to update the screen explicitly. This is analogous to viewwindow for local tiles, where viewwindow does not render to the screen, but instead loads a dungeon viewbuffer into the dungeon widget, which then renders it on the next redraw. Printing to the screen and actually showing those changes ('swapping the buffers') are completely different actions that should not be entangled. Printing will be done by widgets, but updating should be done only by the ui framework. Even for legacy bits of crawl code that do a lot of manual view updating, and the hacks that join the new code and the legacy code, it's much better to be explicit since this allows doing multiple paints and then updating the entire screen in one fell swoop; this is critical for eliminating rendering issues and ttyrec bloat. Next: viewwindow, redraw_screen -------------------------------------------------------------------------------- 38af612a8a | Aidan Holm | 2020-07-20 01:55:44 +0800 Reimplement direction chooser UI as a widget Now that the direction_chooser uses a view_renderer to inject its custom rendering code into viewwindow, wrapping this stuff with a widget is more or less straightforward. Some complications: the UI framework itself will first draw all current tilesdl regions before drawing any widgets, since this is the first widget that is not a popup to be drawn over these regions. The direction chooser must render these itself, however, as it calls viewwindow with custom rendering commands. To prevent them being called twice, we add the ugly ui::should_render_current_regions hack. This can be removed once the code drawing the current regions is extracted to a 'main view' widget; this requires extensive modifications to a lot of code in order to pull all game input through the UI framework's event loop, since otherwise the main view widget wouldn't be drawn, and *that* can't be done until directn (and viewmap) are wrapped in widgets. The long and short of it is that this hack is required to break the catch-22 cycle. Only part of this needs to be conditional; the maybe_redraw_screen() is always needed, in case of resizes. Another less major complication is that we must pump at least the handle_mouse part of the tilesdl main loop, in order to update the mouse cursor position on the map region, which requires making handle_mouse public. -------------------------------------------------------------------------------- 8d3701215b | Aidan Holm | 2020-07-20 01:55:44 +0800 Extract ui::MouseEvent -> wm_mouse_event conversion -------------------------------------------------------------------------------- 9df63ee947 | Aidan Holm | 2020-07-20 01:55:44 +0800 Fix widgets having a size of 0x0 by default This commit changes the default widget sizing behaviour to "grow as much as possible, and be able to shrink down to nothing", which is a much better default than "just be 0x0 and confuse the poor dev trying to get their new widget to work". -------------------------------------------------------------------------------- aa1b24a277 | advil | 2020-07-19 12:14:11 -0400 Don't log initfile errors on webtiles (+refactoring) The options file is read in two passes: one before the whole io system is initialized, one after. For offline purposes, any errors before the io system are initialized are echoed to stderr, in case the game never succeeds at io initialization. In addition, a bunch of specific errors for certain options were explicitly sent to stderr for reasons that aren't clear to me (these fprintf lines go back to linley as far as I can tell). Anything sent to stderr gets logged by webtiles and so these options errors both clutter up the log and unnecessarily alarm server admins, where the only meaningful signal in them should be to the player ("your rc file needs updating"). This has particular been an issue because non-updated but widely-used HDA rcs set a color for the pray channel (removed a while ago) and the food channel (removed recently). The contentful part of this commit is to (a) standardize these initfile errors to use the same reporting mechanism as everything else (and so get rcfile line #s), and (b) suppress all echoing to stderr for anything that happens on the first initfile pass for webtiles builds, which should lead to no options errors getting logged. Players will still see the errors when starting up their game. In addition, I did a bunch of refactoring and moved a tiny bit more messaging-related code into the existing, but barely-used, `msg` namespace. The most public-facing api change here is that `no_messages` is renamed to `msg::suppress`. -------------------------------------------------------------------------------- d6aadd2fae | Aidan Holm | 2020-07-19 14:19:20 +0800 Fix clouds being drawn under monsters/items (Yermak) This should have been part of 5ef36ef8; oops! -------------------------------------------------------------------------------- 11c2b627af | advil | 2020-07-18 12:56:18 -0400 Change turns_by_place to use auts (PleasingFungus) Misnamed, but such is life in crawlcode. -------------------------------------------------------------------------------- e71225c77c | advil | 2020-07-18 12:26:16 -0400 Modify turns_by_level, enable for alpha games This is for data collection for clock tuning purposes. This doesn't quite do what we'd wanted in that it doesn't have full level-by-level detail but it's still extremely informative. This means that the window into slow places like vaults 5 / zot 5 is only indirect. Modifications: show raw turn counts instead of percentages, directly show the number of levels per place. I just replaced xp_by_level, which isn't needed any more, so morgues don't really change size. -------------------------------------------------------------------------------- f1efd62670 | Edgar A. Bering IV | 2020-07-17 23:12:35 -0400 Make Zin hate Wereblood (jfcaron) -------------------------------------------------------------------------------- 1d9a9cd4fa | Edgar A. Bering IV | 2020-07-17 17:12:02 -0400 Allow training evocations with a spectrat weapon -------------------------------------------------------------------------------- f11124cc91 | Edgar A. Bering IV | 2020-07-17 17:10:52 -0400 Trigger the spectral brand on hit (hellmonk) This is to avoid tedious "swap for an on demand blocker" issues as well as "keep out for a renewing blocker" issues. -------------------------------------------------------------------------------- 20a70addb1 | advil | 2020-07-17 16:07:12 -0400 Lower the spell fail polynomial cap This was introduced in cef5c758032e to deal with potential overflows in low strength / heavy armour scenarios. However, this commit didn't take into account the fact that `chance2` is signed, so while I'm not sure if an overflow was possible in practical scenarios, it was possible in principle. (CanOfWorms and I discussed this at the time but it looks like neither of us ever made the commit.) This commit lowers this cap substantially so that this polynomial is always dealing with pretty sane values. Resolves #1420 -------------------------------------------------------------------------------- 601c79e3d9 | advil | 2020-07-17 10:05:38 -0400 Don't load removed spells on ghosts This handles only full-removed spells, but there is fixup code that should handle other cases. -------------------------------------------------------------------------------- dfc9a0e579 | Kyle Rawlins | 2020-07-17 09:26:39 -0400 Adjust debian build instructions Switch to using `oldstable` for examples, fix a copy + paste error. -------------------------------------------------------------------------------- d2331e51f2 | Edgar A. Bering IV | 2020-07-17 00:58:34 -0400 Don't generate manuals of removed skills -------------------------------------------------------------------------------- fe224cc0de | Nicholas Feinberg | 2020-07-16 20:30:57 -0700 Fix player background icons (ardl) It'd be great if we had an assert that the length of recommended and non-recommended background icons were both equal to the number of backgrounds. -------------------------------------------------------------------------------- a24b09dfbc | Kate | 2020-07-17 03:58:45 +0100 Adjust Gozag potion lists Don't offer potions of flight since they're uninteresting in combat, and add lignification as an occasional possibility. -------------------------------------------------------------------------------- 12be3fcb38 | Kate | 2020-07-17 03:58:45 +0100 Don't give Formicids useless starting items They could be given potions of haste and scrolls of blinking, since uselessness was checked with the item unidentified. -------------------------------------------------------------------------------- d03b2cc482 | advil | 2020-07-16 20:58:00 -0400 Updated removed_spells -------------------------------------------------------------------------------- b0d7edea47 | advil | 2020-07-16 20:32:20 -0400 Disable cursor validity checks on windows This obviously isn't ideal, but I can't figure this out with the limited tools / speed I have in my VM. Probably what is going on is that one of the lower-level windows-specific drawing calls is leaving the cursor in an odd state before a viewwindow call. This change should be basically safe in that the problem isn't in the higher level code, which at this point is quite heavily exercised on linux/mac. -------------------------------------------------------------------------------- 19ad421082 | advil | 2020-07-16 20:32:19 -0400 Fix actions retries (alexjurkiewicz) -------------------------------------------------------------------------------- b49d02c8f5 | Edgar A. Bering IV | 2020-07-16 19:59:41 -0400 Don't autopickup arrows for Transmuters any more -------------------------------------------------------------------------------- 9a97dfeeb7 | Edgar A. Bering IV | 2020-07-16 19:24:51 -0400 Allow charge to bypass terrain effects on intermediate squares Processing the moveto effects for intermediate spaces creates a lot of technical complexity as well as a lot of special cases that are difficult to communicate to the player unless we go with all (which is a prompt/check/code headache) or only the destination (clear, single prompt for target location, opens up new tactics): will noxious bog or clouds in the interim effect me? What about traps? Which ones, why and how? This commit goes with the second option: only apply the destination terrain effects. The safety from danger is mentioned explicitly in the ability description, and flavoured as rolling fast enough to avoid the dangerous effects of terrain. The destination effects may include getting webbed or netted; in this case the attack is aborted (so roll into webs or net traps at your own risk). -------------------------------------------------------------------------------- 37a9400bf0 | Edgar A. Bering IV | 2020-07-16 19:04:17 -0400 Forbid Hob and Charge while netted or webbed These abilities (unlike others) are supposed to be movement-esque, not magical. Movement is forbidden while netted or webbed, so block these too. -------------------------------------------------------------------------------- f31ff04d85 | Edgar A. Bering IV | 2020-07-16 18:32:16 -0400 Don't let Ru try to sacrifice removed Charms They're already gone, buddy. -------------------------------------------------------------------------------- 33516b1736 | Edgar A. Bering IV | 2020-07-16 15:56:43 -0400 Don't remove fixup spells from the library (Shummie) c881fc3179 introduced compatibility code to fixup removed spells regardless of tag-minor status; unfortunately this resulted in spells with a replacement being removed from newer saves. -------------------------------------------------------------------------------- a50eacd245 | advil | 2020-07-16 15:32:55 -0400 Tweak windows console code Includes a refactor of clrscr into a _sys version and a generic version. -------------------------------------------------------------------------------- a598ecdb3d | Edgar A. Bering IV | 2020-07-16 14:18:35 -0400 Fix a crash in battlesphere targeting -------------------------------------------------------------------------------- 4c0e6339b2 | Edgar A. Bering IV | 2020-07-16 14:15:56 -0400 Handle Engulf, Bog, and cloud trail for Rolling Charge Engulf breaks on move, and should definitely break on charge. Rolling charge is flavoured as a move, not a blink, so it should leave appropriate trails. -------------------------------------------------------------------------------- 2b0ca819d0 | Edgar A. Bering IV | 2020-07-16 14:00:24 -0400 Refactor some sequencing in move_player_action This commit extracts some movement effects (escaping Engulf, Noxious bog, and Xom cloud trails) to their own functions from move_player_action, and re-sequences their calls to apply them correctly: on moves that actually move, regardless of whether you've swapped with a monster. -------------------------------------------------------------------------------- 3a799e3adc | Edgar A. Bering IV | 2020-07-16 12:04:22 -0400 Correct order of barbs/ozos removal in charge -------------------------------------------------------------------------------- 8c663eea8a | Kate | 2020-07-16 03:42:18 +0100 Staticify some more functions -------------------------------------------------------------------------------- 25a19abd72 | Kate | 2020-07-16 03:16:39 +0100 Staticify a function -------------------------------------------------------------------------------- ee15e7bf93 | Edgar A. Bering IV | 2020-07-15 20:30:37 -0400 Rename MainiacJoe in the CREDITS -------------------------------------------------------------------------------- 0fd6188fbd | Edgar A. Bering IV | 2020-07-15 20:15:38 -0400 Apply barbs to Palentonga charge (Yermak) -------------------------------------------------------------------------------- 07f4068f90 | Goratrix | 2020-07-15 20:09:06 -0400 Fix fleeing Harold speech Bug reported by Mintice in Discord, the speech shows yells with at signs around it. I suppose the intention here was to have the verb randomized as per the _yells_ list. -------------------------------------------------------------------------------- 0fb1eaa16f | Edgar A. Bering IV | 2020-07-15 19:49:34 -0400 Revise Beastly Appendange Beastly Appendage has two issues at present. The first is a charms-like "always cast this low level spell for marginal benefit", the condition isn't quite always, but any melee character without boots or a helmet who isn't using other forms should use this (as should any Op). The second is that the possibilities of Horns and Talons are not balanced against eachother, so the player is incentivized to re-cast until the better aux is granted. This commit addresses both of those, while buffing the spell slightly to address concerns that Tm is too weak without Sticks to Snakes as a crutch. Beastly appendage now melds aux armour slots, weapons, and shields and gives Horns 2 and Talons 2 (Op keep tentacle spike 3). Two level 2 aux attacks was selected over a single level 3 so that the spell synergizes better with Wereblood. -------------------------------------------------------------------------------- 5743907206 | Edgar A. Bering IV | 2020-07-15 19:49:34 -0400 Start Artificers with a spectral club The spectral ego uses evocations, which keeps with the theme of an "evocable" start. Without weapon skill the club is still hard to use, and the boost from the brand is limited. Even with evocations and weapon training a spectral club quickly falls off. From a gameplay point of view, this should give Ar some skill-based survivability tools that aren't permanent consumables. From a flavour stance this is really cool. From a new-player experience I worry that it will mislead new players into sticking with Maces & Flails; the hope is the starting description and skill training will be sufficient to steer past the flashiness. -------------------------------------------------------------------------------- 65aa84ea10 | Edgar A. Bering IV | 2020-07-15 19:49:34 -0400 Charming item 🔔: Spectral ego Re-introduce spectral weapons as a weapon ego. The ego is flavoured as drawing out the ancient tree spirit from the wood the weapon is made out of, and the strength of the spectral weapon scales with evocations skill. The brand spawns on staves, clubs, giant clubs, and giant spiked clubs as these are "woody enough" flavour wise. Mechanically, staves are 2handers with good base damage, the spectral ego offers a tradeoff of brand for having a spectral weapon; a similar statement can be made about giant (spiked) clubs, with the additional remark that in both cases the shield slot is restricted. Clubs getting the rare spectral brand is partly flavour and partly fun, even at 27 evo a spectral club doesn't hit that hard (7 base dam). Randarts of any weapon type can roll the brand, but it is limited to two-handers. Brand scrolls never give the brand, which should keep it relatively rare. Monsters wielding a spectral ego weapon get a spectral weapon (thanks gammafunk for not deleting the supporting code when Asterion lost the spell). Spectral weapon doesn't work great on monsters because of monster AI, but the limited weapon family should keep it to monsters that are better at catching the player out in the open (Spriggans and staves). Spectral ego icon by CanOfWorms. -------------------------------------------------------------------------------- d6f7365598 | Edgar A. Bering IV | 2020-07-15 19:49:34 -0400 Generalize weapon brand adjective usage -------------------------------------------------------------------------------- ddd54418cc | Edgar A. Bering IV | 2020-07-15 19:49:34 -0400 Charming item 🔔: Salamander Hide Armour The Salamander hide has been on the "unrands to revise" list for a while. Ring of Flames is too flashy for a mundane item, this commit moves the effect to the Salamander hide, giving it rF++, rC--, a fire enhancer, and a ring of clouds and losing +Rage. Trog doesn't currently hate this but they probably should. -------------------------------------------------------------------------------- bf280b6766 | Edgar A. Bering IV | 2020-07-15 19:49:34 -0400 Charming item 🔔: Scarf of Shadows Re-implement the Darkness effect as a scarf ego. This ego also currently gives 1 spell de-enhancer, since reduced LOS is very strong and allows more spells to be in range at the edge of LOS. If that makes this item too weak it can be removed. The scarf slot was chosen for this effect because it seems like a better fit compared to the amulet slot, mostly flavor wise. The effect could work equally well as an amulet, but it seems like a better tradeoff with the other cloak alternatives than the other amulet alternatives. Shadow ego icon by CanOfWorms. -------------------------------------------------------------------------------- 3813eac32f | Edgar A. Bering IV | 2020-07-15 19:49:34 -0400 Charm dispersal 🔕: Remove the Charms school, skill, and Skalds With the remaining charms spells moved out of the school, there isn't anything for the skill to be useful for. In designing the forthcoming charm-effect-items it became clear that for the most part they will not scale with skill; for those that do, we already have a magic-item-interaction skill: Evocations. In addition to removing the skill, the school is removed (it was still used for monster spells to tag them as buffs, but all true buffs are also flagged with selfench) from spschool type and miscasts. (Some of the miscast flavour lines are preserved in Hexes miscasts.) This also means removing the Book of Battle (now mostly empty) and Charm randbooks. Removing Charms as a school of magic leaves the Skald start without its core identity: using Charms magic to enhance melee. From a fundamental design perspective, there are already several backgrounds that much better embody the use-magic-to-melee better: Warper (positioning), Transmuter (forms), Enchanter (debuffs), Hedge Wizard (magic grab bag). Without a separate magic school for their identity, Skalds don't have much in the way of a background concept. It is possible that the resulting charm items might make for an interesting adventurer starting kit of some kind, but that is probably better done by adding them to a chance in a wanderer start. -------------------------------------------------------------------------------- 1eb17cf853 | Edgar A. Bering IV | 2020-07-15 19:49:33 -0400 Charm dispersal 🔕: Spell removals This commit removes the remaining spells in the charms school: Infusion, Shroud of Golubria, Spectral Weapon, and Ring of Flames, as well as Darkness. They are all removed for similar reasons: in general if one was using them it was a "cast once then start fighting" or "always keep this up it's for the best" situation. Neither option fits well with how crawls MP system works tactically. Some of these effects (Spectral Weapon, Ring of Flames, and Darkness) are cool and we don't want to lose them, so subsequent commits will reintroduce them as items. For this reason, their supporting code is left intact by this commit. Infusion offered a "trade MP for a bit of bonus melee damage"; this could maybe be restored as an amulet, but its hard to see if such an amulet would be competitive against the other options in the slot. For now, it gets the axe. Shroud of Golubria offered "trade 2 MP for effectively +10 HP"; we already have an item that uses MP to increase effective HP: guardian spirit! So shroud gets the axe. The name is freed up and could make a cool unrand armour name with some kind of translocations flavour. -------------------------------------------------------------------------------- 80901a9d07 | Edgar A. Bering IV | 2020-07-15 19:49:33 -0400 Remove Sticks to Snakes This spell was overpowered and broken beyond redemption. Its continued existence was the result of flavour nostalgia and a lack of initiative, but uncapped unlimited non-abjurable allies for 2mp that swarm and constrict really does not fit in modern crawl. It's time to say farewell. The previous commit reflavoured Song of Slaying as a transmutation, so Wereblood replaces S2S in the transmuter starting book, giving the book a complete focus on melee enhancing spells. -------------------------------------------------------------------------------- 4d17e5cfac | Edgar A. Bering IV | 2020-07-15 19:49:33 -0400 Charm dispersal 🔕: Move Song of Slaying to Tmut and adjust Song of Slaying's effect is nice: you make noise but you punch harder, the noise draws more dudes, you get a nice spiral, but press your luck too long and the effect ends. This commit moves the spell to Transmutations and reflavours it "Wereblood": transforms some of the caster's blood into that of a were-beast, giving them a slay bonus on kills. The noise is reduced to only trigger on a chance based on the bonus, instead of continuously throughout the duration (still loud casting noise as well). Wereblood spell icon by CanOfWorms. -------------------------------------------------------------------------------- 8bcf005466 | Edgar A. Bering IV | 2020-07-15 19:48:23 -0400 Simplify Battlesphere targeting and spell schools This commit simplifies the targeting & triggering of Battlesphere to make it work better with positional magic. The battlesphere is still synced to the player's conjurations, but now picks a random target that the caster can see to fire at and is triggered only by conjurations school spells (except Battlesphere and Servitor). -------------------------------------------------------------------------------- b15d068683 | Edgar A. Bering IV | 2020-07-15 19:47:57 -0400 Charm dispersal 🔕: Move Battlesphere to Conjurations only Battlesphere is in a bit of an awkward place with the positional magic changes. Unlike other charms the MP cost of battlesphere is relevant, as its use depends on subsequent casts and it could end up in a less than useful position. -------------------------------------------------------------------------------- ce404f1eac | Edgar A. Bering IV | 2020-07-15 18:24:56 -0400 Charm dispersal 🔕: Move Excruciating Wounds to Necromancy only Excruciating Wounds was on the borderline. The noise made it a bit impractical to cast before every fight, but with sufficient spellpower stairs and retreating to cleared areas could tediously be used to get the effect for minimal cost. This changes EW to be single-school, as well as reduces the casting noise. In exchange, EW prevents unwielding the weapon for the duration and applies a wizardry penalty (currently the same as spider form). The reduced noise reduces the incentive for retreat-casting and the inability to voluntarily cancel the wizardry penalty makes the cost for use ongoing instead of one-time, which is a more interesting decision. -------------------------------------------------------------------------------- 8d63b166cd | Edgar A. Bering IV | 2020-07-15 18:24:34 -0400 Charm dispersal 🔕: Move Death's Door to Necromancy only Death's door is very much not an "always on" charm, it's very powerful but with major downsides. It works as a continued effect in the Necromancy school, raised to level 9. -------------------------------------------------------------------------------- e3db891996 | Edgar A. Bering IV | 2020-07-15 18:24:34 -0400 Charm dispersal 🔕: Move Swiftness to Air only Swiftness as a charm has tradeoffs, so works well as a spell effect with tactical limitations. If it is too strong as an Air only spell it can pick up a level or a new second school. -------------------------------------------------------------------------------- b20c95032b | Edgar A. Bering IV | 2020-07-15 18:24:34 -0400 Charm dispersal 🔕: Move Ozocubu's armour to ice only Ozo's Armour has a good tradeoff: you get the bonus as long as you don't move. This is fine as an ice only spell, like ramparts. This commit also changes Ozo's to work in all armour with an ER based penalty to its bonus. Currently the penalty is ER/2, meaning that in crystal plate max power Ozo's grants only 2 AC. Training Ozo's to maximum power in CPA is sub-optimal outside of megazigs where everything is available; even then 2 AC that can be kept only when not moving is sufficiently marginal that the spell shouldn't be a no-brainer. If this is wrong the ER restriction can be restored. If Ozo's armour is too powerful at L3 single school the level can be bumped. -------------------------------------------------------------------------------- a73497bf3f | Kate | 2020-07-15 20:34:00 +0100 Merge terrain destruction veto tags in vaults Having multiple veto tags for different types of terrain destruction was redundant, since for any feature where one would be used, they were all applied. -------------------------------------------------------------------------------- 1a376705da | Kate | 2020-07-15 20:33:24 +0100 Adjust Palentonga glyph and genus From 'r' to 'H', and give them their own genus. -------------------------------------------------------------------------------- e2f3d4a7ca | advil | 2020-07-15 14:25:14 -0400 Exclude load_games.py from lint Sort of too bad because this is one of the few files that was passing, but something weird is happening with flake8-isort -- it seems to be producing an error for a missing blank line, but when I add the blank line running `isort` removes that line. Some day someone should do a real lint pass sorting out this stuff but it is not me, today. (In this case the solution may be not to use flake8-isort?) -------------------------------------------------------------------------------- 2e24376507 | Alan Malloy | 2020-07-15 11:06:20 -0700 Don't leak information about lig potions (#12317, andrew) -------------------------------------------------------------------------------- c881fc3179 | advil | 2020-07-15 12:23:14 -0400 Fixup library spells unconditionally (hitemv+hard) This code was originally added specifically for the positional magic changes, but 61946d8 used it as a more general removed spell fixup to handle confuse. However, the library calls in particular were conditioned on an earlier minor tag (from 688896fa), whereas the memorized spell calls were not -- and so the fixup never got called for games started after the original minor tag, and confuse could still exist in someone's spell library. There's minimal cost to not conditioning on the minor tag, so move this more towards generic removed spell code than positional-specific code. -------------------------------------------------------------------------------- 9343652e2b | Nicholas Feinberg | 2020-07-15 08:39:07 -0700 Break ozo's armour on charge (hellmonk) -------------------------------------------------------------------------------- 6a4b283d67 | advil | 2020-07-15 10:57:23 -0400 Fix a bad vector index in apportion (Nasst / 12316) The actual fix is moving the final terrain check inside the while loop, but I added a whole bunch of comments and some minor restructuring to this code in the process. (This fix is somewhat different than the patch in 12316, because I do in the end think using the pop_back step better reflects apportion logic -- I have changed some comments based on this.) -------------------------------------------------------------------------------- 187c3b9b96 | Nicholas Feinberg | 2020-07-14 20:39:08 -0700 Remove debug code -------------------------------------------------------------------------------- 273fa06577 | Nicholas Feinberg | 2020-07-14 20:36:02 -0700 Stop drowning palentongas (Shummie) If we hit something en route to the intended target, our movement would be along a ray directly to the new target, which wouldn't necessarily take the same path as the ray that we did sanity checking on. -------------------------------------------------------------------------------- a6d9778b44 | Nicholas Feinberg | 2020-07-14 19:16:14 -0700 Tweak barding description -------------------------------------------------------------------------------- fa14c3a25b | advil | 2020-07-14 19:22:23 -0400 Revert "Give in to a compiler issue on CDO (maybe)" This didn't work, and in a way that means I'll need to rethink this more. This reverts commit be9b07e65a8d7cb6b9ee379de3f568df01f9a6d1. -------------------------------------------------------------------------------- be9b07e65a | advil | 2020-07-14 19:05:29 -0400 Give in to a compiler issue on CDO (maybe) Making the class constexpr triggers the following error on CDO trunk builds: sorry, unimplemented: calling a member function of the object being constructed in a constant expression So, just make the constructor not constexpr. -------------------------------------------------------------------------------- 4e7fcc93f0 | advil | 2020-07-14 17:32:15 -0400 Remove old death by lava/water code This code is mostly preempted by other checks elsewhere (e.g. untransforming over dangerous terrain is handled directly), but in very rare occasions, usually because of a bug, something allows this code to run and then there's an instadeath. Just replace it with an emergency flight activation. -------------------------------------------------------------------------------- 6162d163db | Nicholas Feinberg | 2020-07-14 08:41:41 -0700 Make charge sometimes trigger SW It still seems to work poorly at longer ranges, but I'm not sure why exactly. -------------------------------------------------------------------------------- 7149c5b0fb | Nicholas Feinberg | 2020-07-14 08:11:45 -0700 Fix charge targeter messaging (Silurio) It's actually still slightly wrong (some double messages are printed if you really want), but not as wrong. -------------------------------------------------------------------------------- b37399546a | Nicholas Feinberg | 2020-07-14 07:57:54 -0700 Re-describe bardings (gammafunk) -------------------------------------------------------------------------------- aa853452ce | Nicholas Feinberg | 2020-07-14 07:44:38 -0700 Don't make hooves knock bardings off (Lightli) -------------------------------------------------------------------------------- f84a588162 | advil | 2020-07-14 09:21:53 -0400 Update Makefile for cmd-name.h Unchanged since enum dispersal, looks like. -------------------------------------------------------------------------------- 59b798a730 | mainiacjoe | 2020-07-14 01:26:47 -0400 Replace Artificer starting Short Blade skill with Armour Artificers have neither an in-game reason to start with a particualr weapon (UC for Tm, dagger for En) nor a thematic reason (dagger for Assassin). Starting with Short Blades skill presents an opportunity cost for an artificer looking to use what the dungeon has given, and steers a newer player away from this all important practice. This commit moves the starting shortblades skill to defenses. Artificers now start with Armour 2/Dodging 1 or Armour 1/Dodging 2 based on aptitudes, like AK and CK. Everything old is new again, so this returns Ar to starting with a club (a weapon notable mostly because one wants to switch away from it) and changes the short description to better communicate to the player that Ar is "starting with wands" not "set-up for a wand game". [ Committer's note: Closes #1484. Squashed, rebased, reworded the commit message, and fixed whitespace. ] -------------------------------------------------------------------------------- addc565eac | advil | 2020-07-13 23:38:31 -0400 Fix a tag_upgrade issue -------------------------------------------------------------------------------- 5d5748465d | advil | 2020-07-13 23:33:16 -0400 Fix another off-by-one error with depth ...this one a consequence of fixing the first. -------------------------------------------------------------------------------- 56c0efdb29 | advil | 2020-07-13 23:33:10 -0400 Do something with centaur barding in makeitem test Not sure if there's a mor general way to handle this... -------------------------------------------------------------------------------- 966fc6e4c8 | advil | 2020-07-13 23:32:09 -0400 Revert "Fix delver" This reverts commit b4063fc362ffa7302d3482877cd671f3131acbbd. -------------------------------------------------------------------------------- 3b374d4560 | Edgar A. Bering IV | 2020-07-13 22:29:26 -0400 Update the changelog -------------------------------------------------------------------------------- b4063fc362 | Nicholas Feinberg | 2020-07-13 18:43:54 -0700 Fix delver Classic off-by-1. -------------------------------------------------------------------------------- 565c65d36c | Nicholas Feinberg | 2020-07-13 18:12:53 -0700 Upgrade DE's Bow apt (hellmonk) Gives another (largely orthogonal) playstyle option and give bows fans a new option now that centaurs have ridden away. -------------------------------------------------------------------------------- 0eac133917 | Nicholas Feinberg | 2020-07-13 18:10:24 -0700 Rework Centaurs into Palentongas Centaurs are a classic, flavorful race, but their implementation was one-dimensional and didn't encourage the fun tactical gameplay that Crawl specializes in. If players really want to kite monsters using innate movespeed, there are other species that offer more interesting tradeoffs. But: still, it seems like there's fun design space in the idea of a 'fast-moving large race'. How about this? Palentongas are a two-armed, four-legged, scaled mammal species the size of a horse. Their special power is the ability to curl into a ball and launch a rolling charge at enemies, dealing extra damage proportionate to the distance traveled. This is a dynamic way to start fights (as long as you don't mind some extra noise!), and in larger engagements can let the player ping-pong between enemies for huge damage. It's also extremely fun against phantoms. Palentongas have flat melee apts, slightly weak spell apts (with some preference given to schools that seem more interesting), and fairly weak ranged apts. (Players with good throwing or slings skill would be forced to ask themselves "do I do more damage with 2-4 ranged attacks than I do by charging?", which doesn't sound very fun.) Like centaurs, they have +3 base AC and extra HP, along with an aux attack - an upgraded tail slap instead of hooves. The tail slap does the same damage as hooves 3 (10), but has a coinflip chance instead of being guaranteed, since I didn't want to emphasize melee *too* much. They also have sInv, to avoid bad moments when you know where an invisible enemy is but aren't allowed to charge at them. Like centaurs, they wear bardings (which have been merged into a single item type, shared with nagas). The Black Knight's barding is no more. Stats skew towards strength and away from dex, to give the 'large race' feeling. As with centaurs, Palentonga have deformed body and bad armour/dodging apts. In the Lore, Palentonga are an up-and-coming power, displacing the orcs, trolls, and ogres of the eastern wastes. Their generals ride elephants into battle, goading them forward with spiked ankuses. Art is pending. -------------------------------------------------------------------------------- b5e148f2df | Nicholas Feinberg | 2020-07-13 17:59:30 -0700 New background: Delver Shaft traps are fun. What if you had a background that started shafted all the way to D:5, and needed to find their way back up to survive? To make it fair, you start with a nice set of consumables: a wand of digging, ?mapping, ?fear, ?fog, and !haste. In practice, I found that this was usually enough to avoid sudden centaur- or bee-based death and to make it back to the top, and that it was a pretty fun and distinctive start. -------------------------------------------------------------------------------- 3d11bbfad5 | Kate | 2020-07-13 04:01:15 +0100 Remove the book of Beasts There weren't enough summoning spells to support all three of the books of Callings, Beasts and Summonings being sufficiently distinct, so remove the book of Beasts and add Summon Hydra to the book of Summonings. -------------------------------------------------------------------------------- 1fcefbe3cb | Kate | 2020-07-13 04:01:15 +0100 Remove Summon Butterflies It's never really been a good spell design to allow easily filling LOS with junk to block enemies - move it to just be a cosmetic Xom effect. -------------------------------------------------------------------------------- a89f556fec | Kate | 2020-07-13 04:01:15 +0100 Adjust Summon Greater Demon hostility Since this was a rare use-case for abjuration which is now gone. Greater demons now always start out friendly, and tier-1 demons aren't guaranteed to turn hostile, but the check to make demons fully friendly instead of temporarily charmed is slightly more difficult. -------------------------------------------------------------------------------- 602cf09890 | Kate | 2020-07-13 04:01:15 +0100 Don't offer sacrifice summoning after sacrificing love -------------------------------------------------------------------------------- 2ad3f57c50 | Kate | 2020-07-13 04:01:15 +0100 Prevent training summoning under Sacrifice Love Also lets it give extra piety in cases where summoning skill had already been trained. -------------------------------------------------------------------------------- 2f081d995b | Kate | 2020-07-13 04:01:15 +0100 Remove the Aura of Abjuration and Recall spells These are the only summoning spells that don't actually summon something, and neither is especially useful. Killing the summoner (or teleporting away) has been the best way of abjuring things for some time, and recall is already built in to the gods that make it relevant with long-duration/permanent allies. -------------------------------------------------------------------------------- aeb647976c | Kate | 2020-07-13 03:59:33 +0100 Remove unused trap code -------------------------------------------------------------------------------- 73c0fb6129 | advil | 2020-07-11 20:46:08 -0400 Add some tag version #ifdefs to mutation.cc -------------------------------------------------------------------------------- aa2aba8d75 | advil | 2020-07-11 20:33:08 -0400 One missed carnivorous case -------------------------------------------------------------------------------- eb112998cb | advil | 2020-07-11 20:25:23 -0400 Really remove fast/slow metabolism plus a whole bunch of yak shaving in tags.cc, and some hints cleanups. (Sorry for the messy git history, v.1 was an accidental push.) -------------------------------------------------------------------------------- a06e7940fc | advil | 2020-07-11 20:07:57 -0400 Revert "Remove fast/slow metabolism" This reverts commit 7e3f34eca08d2c5ca19d0023e59b142e9b6108aa. -------------------------------------------------------------------------------- 7e3f34eca0 | advil | 2020-07-11 20:05:31 -0400 Remove fast/slow metabolism plus a whole lot of tags.cc yak shaving -------------------------------------------------------------------------------- db952e5dbc | advil | 2020-07-11 19:25:10 -0400 Don't let Xom add to weight 0 innate mutations (Lightli) Other code paths check weight differently than this but Xom uses the weight calculations in _accept_mutation, and they provide a small chance of adding on to any innate mutations that are weight 0. One could imagine that this might have once been intended (because Xom) but it's not written in such a way that makes me think this is likely; I'm also pretty sure Xom can't remove such mutations. -------------------------------------------------------------------------------- 3b0d5afba5 | advil | 2020-07-11 16:10:16 -0400 Don't write .prf files for tests It's super annoying to have this overwrite whatever you last actually did with "test the Mummy" or whatever. -------------------------------------------------------------------------------- db804b0e95 | advil | 2020-07-11 16:10:16 -0400 Don't recursively crash during tests This does actually get called even with Options.no_save set, something I would not have imagined. -------------------------------------------------------------------------------- 21ffff0279 | Kate | 2020-07-11 20:51:13 +0100 Improve descriptions of Ash's passive abilities (#12245) -------------------------------------------------------------------------------- 3af348c12c | gammafunk | 2020-07-11 09:41:30 -0500 Fix a monster equipment DES error -------------------------------------------------------------------------------- 7ed2249cc2 | advil | 2020-07-10 20:48:54 -0400 Don't crash when dropping removed foods they were incorrectly set to not be stackable. Also, fix a warning. -------------------------------------------------------------------------------- 5f58d07027 | Edgar A. Bering IV | 2020-07-10 16:20:02 -0400 Remove an unused parameter -------------------------------------------------------------------------------- ddc8f22af0 | Edgar A. Bering IV | 2020-07-10 16:20:02 -0400 Consolidate corpse handling files -------------------------------------------------------------------------------- 0d1b266048 | Edgar A. Bering IV | 2020-07-10 16:20:02 -0400 Remove chunks and all OBJ_FOOD With Ghouls transitioned away from chunk eating to heal on kills, the last food item type can be removed. A few vaults lose a bit of flavour, but for the most part are preserved with corpses or KPROP: bloody. One, the food pyramid, just didn't make sense anymore. There may still be some code clean-up to do after this commit. Chunks live on in max_monster_chunks, used for computing knockback effects, simulacra, and Hydra form vore heal. Perhaps in the fullness of time this can be cleaned up, but as its internal and not player facing it is less urgent. -------------------------------------------------------------------------------- 346c96a0f3 | Edgar A. Bering IV | 2020-07-10 16:20:01 -0400 Convert Ghouls to heal-on-kill Ghouls' chunk healing gimmick was very powerful and very flavourful. This commit attempts to preserve that flavour while paving the way for removing all OBJ_FOOD class objects. Ghouls now heal from killing the living. The exact numbers are a reduced version of the old healing from eating a single chunk, provided on a coinflip when the monster is killed. In discussion with elliptic there was some concern that passive heal on kills (without the turn penalty) could be too strong. These numbers are by no means final, and further tuning to Ghouls may be needed (apts &c.). There was a further concern that these new Ghouls would feel too much like Vine Stalkers; since the relationship to regeneration, potion healing, and MP are significantly different I don't think that will be the case in practice. -------------------------------------------------------------------------------- 979bc231ae | Edgar A. Bering IV | 2020-07-10 16:20:01 -0400 Remove butchering and eating This commit removes basically all food related commands. It leaves Ghouls in an incomplete state, neither rotting nor eating flesh, pending a revision to Ghouls in subsequent commits. Since the previous commits remove rations and eating for all characters except Ghouls, keeping two command keys reserved for a single species is not good. Keeping the eating system around for Ghouls also keeps a lot of old code around for little gain, the effect and special play can be achieved through simpler less technically intensive means. This commit also does a lot of cleanup around food related references in the codebase and handles the save compatibility removal of hunger state. -------------------------------------------------------------------------------- 256e0e0cc6 | advil | 2020-07-10 16:20:01 -0400 Remove a stray reference to nutrition (gammafunk) I guess this might now be confusing to ghouls, but it's probably ok. -------------------------------------------------------------------------------- 962a159bab | advil | 2020-07-10 16:20:01 -0400 Fix a bunch of hints mode stuff for food -------------------------------------------------------------------------------- 4edd9946b7 | advil | 2020-07-10 16:20:01 -0400 Update Jiyva text for no rations The nutrition effect was already handled by a foodless check, but a bunch of the text needed updating. -------------------------------------------------------------------------------- 0550c0020c | advil | 2020-07-10 16:20:00 -0400 Remove rations Motivations: see many, many years of discussion, experiments in forks, etc. A discussion in ##crawl-dev on 7/7/20 revealed that nearly all active devs were on board with something like this step as a followup to de-chunking (plus a surprising amount of agreement on other long-term clocks we might try, though this commit does not address any alternative clocks) This is a proof of concept commit at this point, and there are probably a bunch of things that could use further tweaking (especially the vault modifications, where my des skills are not always up to the task). For non-carnivorous species (which is to say, non-ghouls), they are marked as foodless. Ghouls stay as-is, though of course no longer get access to rations. This may need some tuning as well, since on a few ghouls I checked they did eat rations from time to time as a backup -- since now only ghouls eat chunks, the obvious knob is nutrition per chunk. I only deleted a few vaults altogether, and there could be ways of restoring some of these. In the future it may be worth considering how ghouls could be cleaned up -- most of the rather substantial food infrastructure remains in support of them. -------------------------------------------------------------------------------- 3a471323bd | advil | 2020-07-10 14:37:53 -0400 Increase size of zig permastore the easy way With zig ghost floors, the game often needs to pull a lot of ghosts at once. This commit increases the backup permastore size to the max (127) by simply copying existing permastore ghosts from pan, tomb, and depths. This is in lieu of a more involved ghost update which will take longer. I chose to include some depths bones (about 15) to give a tiny bit more level spread. It's still very high but this gives a small chance to have an xl 15-25 ghost from time to time, if the floor is built drawing on the permastore. (The average death xl for recent is 26.64 so it's possible I've lowered this too much, but the average will still be quite high.) -------------------------------------------------------------------------------- a5a89cf34b | advil | 2020-07-10 14:37:03 -0400 Let `--bones merge` respect MAX_GHOSTS The file size unfortunately uses a short, so this is meaningful when trying to generate relatively large bones files. -------------------------------------------------------------------------------- 8d1dacec00 | advil | 2020-07-10 12:10:06 -0400 Don't let level excursions affect env.old_player_pos Independent of the related bug fixed in 012bc58e2 (which had the same practical impact), this let you use a level excursion to force a monster to forget you, because it saved the wrong position after the level excursion. A bit hard to use effectively, but would have an effect on any out-of-los monsters when stairdancing on a single stairs, for example. -------------------------------------------------------------------------------- 012bc58e2d | advil | 2020-07-10 11:56:12 -0400 Don't detect gozag gold on level excursions This commit is targeting a bug where a level excursion to an unvisited level can trigger gold detection, which can happen via abyss excursions. While fixing this I noticed a similar potential issue with the shake_off_monsters call. I still think collapsing all of these modes into this call is more trouble than gain, needs some larger refactoring (again). Resolves #1461 -------------------------------------------------------------------------------- 5525a24d89 | advil | 2020-07-10 11:56:12 -0400 Add a gozag ASSERT for level excursions This may or may not lead to more crashes than I know of, so doing this as a separate commit. -------------------------------------------------------------------------------- 1effd001a9 | Nicholas Feinberg | 2020-07-09 20:34:35 -0700 Make offlevel monsters less forgetful Completely distinct from monsters forgetting about the player normally (i.e. when chasing them around a level), we had special code to make monsters forget about the player after a very long time offlevel. This came up in exactly two cases: 1. The player had wandered off and done another branch. 2. The player was doing something scummy. Neither of these things was helpful, so this logic has been deleted. Monsters still forget about you normally when you're on the level. -------------------------------------------------------------------------------- f3d04de8c1 | Nicholas Feinberg | 2020-07-09 16:29:53 -0700 Fix comment typo -------------------------------------------------------------------------------- 47e9e61525 | advil | 2020-07-09 13:27:33 -0400 Update credits -------------------------------------------------------------------------------- 6423518015 | Eugene Abramchuk | 2020-07-09 10:31:48 -0400 Adjust Sprint III cloud generators Fixes issue 12302. Existing cloud generators kill sleeping monsters in several places across the map within the first few hundred turns. This tones down aggressive cloud spawn, while keeping the danger in the affected rooms. -------------------------------------------------------------------------------- d5f3108e62 | Nicholas Feinberg | 2020-07-08 18:11:16 -0700 minislime_mu tweaks - Replace the ration with gold. It was originally a royal jelly, which was a pretty good joke, but the ration isn't a good joke and we don't have a royal jelly ration tile. Gold is at least a good ref to TRJ's description. - Despoiler the vault's walls. They've been spoilery since they were added (766f9b2f52f45f, over 10 years ago) about 3/4ths of the time and there's really no reason for them to be! -------------------------------------------------------------------------------- daab700853 | Nicholas Feinberg | 2020-07-08 18:03:41 -0700 Make Storm card electric (WiseOldWolf) Broken in 86364c1113e. -------------------------------------------------------------------------------- cd7d158533 | Nicholas Feinberg | 2020-07-08 18:00:48 -0700 Give Hedge Wizard a starting dagger Further emphasizing their more hybrid role and making them a bit stronger after the stat changes. -------------------------------------------------------------------------------- b32a1a6195 | Edgar A. Bering IV | 2020-07-08 16:25:42 -0400 Make lemures true demons They didn't have demonic holiness previously! -------------------------------------------------------------------------------- b87c5ff4f8 | advil | 2020-07-08 11:14:40 -0400 Fix a couple of minor formatting issues in INSTALL.md -------------------------------------------------------------------------------- 75e6479846 | Edgar A. Bering IV | 2020-07-08 09:21:11 -0400 Double food generation The recent food changes have resulted in a tighter hunger clock than desired. There is ongoing work in progress to remove rations and eating outright, but it is significantly involved. This commit is a stopgap to ensure trunk remains playable. -------------------------------------------------------------------------------- 7253cd193c | Edgar A. Bering IV | 2020-07-07 22:41:23 -0400 Give Necromancers "corpse sense" LOS-wide corpse using necromancy spells aren't allowed to peak in stacks and instead spend MP. They do this even absent any visible items, which can be frustrating. Since monster inventories are displayed now, concealing stacks seems like a relic that should be addressed. Separate from that, it's plenty flavourful that skill with the dark arts allows the user to sense fresh death, so this commit aborts casting these spells if no appropriate corpses are available. -------------------------------------------------------------------------------- efd35565e4 | Edgar A. Bering IV | 2020-07-07 22:41:23 -0400 Reduce the duration of Infestation scarabs Long-lived unncapped allies are very strong, even at Level 8. This commit reduces the lifetime of scarabs slightly as a part of an overall nerf to necromancy summons. This one is less severe because Infestation is L8. -------------------------------------------------------------------------------- 26e00d9157 | Edgar A. Bering IV | 2020-07-07 22:41:23 -0400 Adjust Death Channel Another long-lived-uncapped-ally generating spell and part of Necromancy's overpowered nature. This commit reduces the summon duration to 5 (from 6), it could possibly go lower or pick up HD power scaling. This commit also times out spectrals on expiration of the effect, requiring continued MP investment for momentum play longer than a single cast. -------------------------------------------------------------------------------- ef8ed0b0f2 | Edgar A. Bering IV | 2020-07-07 22:40:12 -0400 Nerf Animate Skeleton and Animate Dead Animate Skeleton (and to a slightly lesser extent Animate Dead) are absurdly powerful: low level spells that grant depth-scaling long lived allies with a summon cap determined only by the quantity of corpses found. This power was granted independent of spellpower, so minimal training was required to get full advantage of the spells. Miscasts put a bit of a brake on AD, but because AS is level 1 this wasn't a serious obstacle. This commit addresses both the long-lived and power scaling issues. Both spells now create minions with a summon duration of 4 (like simulacrum) instead of 6, allowing them tactically and some amounts of momentum but not the complete snowball of yore. Because of this duration reduction, AS is freed from its location constraints, and raises a single skeleton in LOS to make it more usable mid-fight. Both spells now care about spell power and create their minions with hd scaled by power, specifically minion_hd = mons_hd * (100 + pow) / 300. Animate skeleton is capped at power 50, meaning an hd cap of 1/2 monster hd at max power. In practice this means some early skeletons are HD 1 which might be too severe, a lighter scaling could be applied, but AS is level 1 and the skeletons retain the attack of their base monster. Animate Dead has a power cap of 200, so with a training investment can reach a place similar to its old power level; if this is too strong, a power cap of 150 can be applied. -------------------------------------------------------------------------------- 86c4727016 | Edgar A. Bering IV | 2020-07-07 17:52:42 -0400 Timeout FAKE_ABJURATION allies on level change Stairdancing with conventional summons was removed many moons ago. It's time that snakes and undead meet the same fate, for the same reasons. -------------------------------------------------------------------------------- 083ca260ac | Edgar A. Bering IV | 2020-07-07 17:44:43 -0400 Add two new lua hooks for abilities and spellcasting chk_ability_choice and chk_spell_choice are used to provide ability/spell letters in advance to answer the spellcasting/ability activation prompts. This provides for more robust lua to cast spells and use abilities automatically, handling targeting either with the targeting callbacks or CMD_TARGET_* commands, for a keymap-independent automation experience avoiding the headaches of sendkeys. -------------------------------------------------------------------------------- 6f375c6936 | Edgar A. Bering IV | 2020-07-07 17:44:43 -0400 Fix some ldoc formatting -------------------------------------------------------------------------------- b77f264828 | Nicholas Feinberg | 2020-07-07 13:24:51 -0700 Fix amulet of the acrobat Broken in a7dbce93e49. -------------------------------------------------------------------------------- d0a5a5182f | advil | 2020-07-07 13:32:07 -0400 Remove one more unused abil flag -------------------------------------------------------------------------------- b5465dcac6 | advil | 2020-07-07 13:32:07 -0400 Further clean up abil flags, light rewording As far as I can tell there is no reason to keep old flags around as this bitfield is never serialized. -------------------------------------------------------------------------------- 2ea7b29654 | advil | 2020-07-07 13:32:07 -0400 Reword DD heal cost for no hungering "This ability costs: nothing" is somewhat incoherent with the next line, so custom-handle this case. -------------------------------------------------------------------------------- 4ff2f76d10 | advil | 2020-07-07 13:32:07 -0400 Remove ability/evoke+hunger interactions Reasons: (i) hunger is mainly used as a secondary cost for things that already have some cost or other gating that is actually impactful on a tactical level (MP, cooldowns, piety) (ii) the costs assigned to abilities were really all over the place (so consider this balancing them to 0), and (iii) given the absence of spell cost the relatively idiosyncratic choices here are not very intuitive at all and quite hard to keep track of. I guess the most controversial change here would be berserk, which doesn't have an initial cost at all now. On the other hand, it already has a cooldown, passing out effects, etc. that already provide gating and a *lot* of tactical balancing tools if tweaking is needed. If it needs strategic balancing, I would recommend piety (perhaps heroism-level or lower), but it's not clear to me if it really needs this. The one remaining food cost I have left is for staff channeling (energy / wucad mu). I'm not sure it's ideal that this stay either, but I don't have enough of a sense for how channeling is currently balanced (if it is) in order to adjust. Sif channeling is consistent with other god abilities. -------------------------------------------------------------------------------- f040af64e7 | Aidan Holm | 2020-07-07 23:18:45 +0800 Remove needless use of viewwindow -------------------------------------------------------------------------------- 26cf38f501 | Aidan Holm | 2020-07-07 23:15:22 +0800 Inject custom rendering into viewwindow() A longstanding source of rendering bugs in crawl is the accretion of various bits of global state used to draw various parts of the main UI view, all interacted with in various ways both from viewwindow itself and from the parts of crawl that alter rendering (e.g. rendering zaps, highlighting summoners, drawing beams, etc.). Good examples of this are anything that uses view_add_tile_overlay in conjunction with viewwindow(). The result is that each part of crawl that does any rendering at all is extremely brittle, since it must depend on this complex global state, and has to know what the current state of that global state is. This makes each piece of rendering code work fine most of the time, but inevitably break when used from a different context which violates these assumptions. It also makes some things difficult to implement or very inefficient because multiple viewwindow calls are required. One of the worst offenders: directn. The direction chooser's drawing code draws beams and highlights summoners. It used to do this via a complicated series of calls to viewwindow() that was required in order to add tile overlays, then writing directly to the screen to overwrite the console output with the required alterations. The new code works by allowing the injection of custom render behaviour into the viewwindow() call. This allows any kind of custom rendering, instead of limited functions hard-coded directly into viewwindow(), while at the same time limiting the scope of these modifications; there is no global scope. You also don't need to understand the viewport rendering system; simply implement a type and provide an instance, and viewwindow() will call its callbacks when needed. You don't need to add tiles to a global buffer or blit directly to the screen; just modify the provided crawl_view_buffer. A nice side effect of this is the near eradication of the tiles_only parameter to viewwindow(). The only remaining use is in tileweb.cc, where it is required to prevent scribbling over the console map display while panning the tiles vbuf. One possible approach I am considering is to inject the rendering behaviour of the base map itself, but that's a change for another commit. -------------------------------------------------------------------------------- 3bab7db1b1 | advil | 2020-07-07 09:43:39 -0400 Remove troll extra extra hunger Trolls already have fast metabolism, and we think this little extra boost is probably a remnant of regen having a hunger cost. 5/16 chunkless trolls so far have starved, so even relative to these small numbers it seems like this is maybe a bit punitive. -------------------------------------------------------------------------------- f801a56046 | Nikolai Lavsky | 2020-07-07 09:13:58 -0400 Fix a leftover scarf of cloud immunity (Yermak) As a followup to f75c35ca, this commit replaces a scarf of cloud immunity with a scarf of repulsion in the Cloud Mage wizlab. -------------------------------------------------------------------------------- 3ccbfcd516 | wheals | 2020-07-07 09:01:40 -0400 Fix warning on console builds. And add an underscore for code style. -------------------------------------------------------------------------------- ac5b586cd3 | wheals | 2020-07-07 08:47:01 -0400 Remove corpse/chunk types. RIP corpse_thingy -------------------------------------------------------------------------------- 172849303e | wheals | 2020-07-07 08:29:48 -0400 Improve ranged weapon warnings on the sidebar. Only show "launcher" if the monster has ammo for the launcher, and show "missile" if the monster has a thrown weapon but no launcher. -------------------------------------------------------------------------------- 9ecf74a097 | wheals | 2020-07-07 07:18:48 -0400 Remove MSLOT_ALT_MISSILE on the next version bump. Was added 86528534 just in case, and then never used. -------------------------------------------------------------------------------- 1848e9ed2a | wheals | 2020-07-07 07:06:57 -0400 Add a note when acquiring items. Now that the items are pre-identified, it's some nice information to put in the chardump. -------------------------------------------------------------------------------- 29f007ebfe | Alan Malloy | 2020-07-06 18:10:28 -0700 Don't crash when putting amulets on from the floor (Flugkiller, #12307) -------------------------------------------------------------------------------- 1af32d979d | Byrel Mitchell | 2020-07-06 14:54:25 -0400 Previously, phial of floods did three things: a) It fired a Primal Wave at the target b) It created a pool around the target c) It waterlogged monsters in the pool Primal Wave deals damage, potentially knocks back a tile, and creates its own pool. This led to phial of floods creating two different overlapping temporary pools, one waterlogged and the other not. This commit consolidates everything into Primal Wave. Phial no longer manually creates its own pool; instead player-created Primal Waves now scale with power like the Phial pool did, and apply waterlogged appropriately. This commit also reworks Primal Wave's pool generation. Previously, it created the center tile manually, and then randomly added tiles on a 2-radius circleLOS ring to it. I switched it to use the Phial pool generation method which uses a fair distance_iterator to fill the pool from the center. The results are fairly similar without the weird spoilery effects of circle-LoS math. This commit also incidentally solves the issue where the actual target of the phial could be pushed out of the pool by the primal wave and miss getting waterlogged. Now that we silence based on the Primal Wave pool (which was always centered on the pushed-back monster) you're guaranteed to at least waterlog your target (if it's vulnerable.) -------------------------------------------------------------------------------- ccf7159315 | Aidan Holm | 2020-07-06 22:31:55 +0800 Render direction chooser rays onto vbuf This commit replaces direct blitting to the screen via putwch on console, and the use of an additional tiles buffer on tiles, with the new console and tile APIs for adding overlay tiles to the dungeon view. This isn't as good a semantic fit as it was for zaps; those are clearly a part of the game simulation state, whereas this is reusing the same overlay buffer just to simplify rendering. And now with that in mind, perhaps zaps should be rendered by having a list of explosions and other environmental effects in env? Anyway, the result of this commit is that almost all rendering of the dungeon view now goes through the vbuf, and that uses of the ugly is_tiles hack for viewwindow is now almost entirely removed; slowly but surely, the entangling of tiles and console rendering is being undone. -------------------------------------------------------------------------------- 64743ecae6 | Edgar A. Bering IV | 2020-07-06 10:17:55 -0400 Remove melee hunger This is paired with the removal of spell hunger and chunk eating. Abilities still have hunger, which makes their strategic costs more relevant. If this is too relevant, they can lose hunger costs as well, and the prevalence of rations adjusted to keep an ok food clock. There have been reports that D:1-7 are a bit tight hunger wise even for non-degenerate play; if melee hunger removal doesn't fully address this an additional starting ration can be handed out. -------------------------------------------------------------------------------- 2964c8cf50 | advil | 2020-07-05 22:34:09 -0400 Conditionalize you.on_current_level in load_level Previous commit will mess up excursions -------------------------------------------------------------------------------- a02c8d4030 | advil | 2020-07-05 22:31:13 -0400 Fix full pregeneration (alexjurkiewicz) This was actually broken in 1937b064fbca (in more subtle ways than a crash), and the ASSERT in 93d59993c00 revealed that it was broken. -------------------------------------------------------------------------------- 790f60d850 | Nicholas Feinberg | 2020-07-05 16:33:35 -0700 Remove unused AF_HUNGER (vt) -------------------------------------------------------------------------------- f798f81529 | Nicholas Feinberg | 2020-07-05 16:22:51 -0700 Remove hungry ghosts They were never a good monster, just sort of a funny joke. (See some of the vaults that I'm removing and tweaking here.) Now that hunger is startlingly real, hungry ghosts are just a vicious, unfun trick for anyone dumb enough to melee them, in the same category as the jellies and pulsating lumps of old. There's no redeemable core to them, so let's bid them adieu. -------------------------------------------------------------------------------- 523353da42 | Nicholas Feinberg | 2020-07-05 15:58:56 -0700 Lint -------------------------------------------------------------------------------- a7dbce93e4 | Nicholas Feinberg | 2020-07-05 15:56:08 -0700 Remove some amulet attunement "acrobat and "reflect no longer need 'attunement' logic, since they take 5+5 turns to swap. "gspirit doesn't need to drain mp, either (except for deep dwarves). "regen and "mpreg probably don't need the attunement logic either, but I'm unsure - is there some hypothetically optimal play that involves swapping them while resting...? -------------------------------------------------------------------------------- 5e5ef3fa74 | Nicholas Feinberg | 2020-07-05 15:56:08 -0700 Make amulets armour-slow -------------------------------------------------------------------------------- bad5f93c06 | Nicholas Feinberg | 2020-07-05 15:56:08 -0700 Add delay on amulet removal -------------------------------------------------------------------------------- b2248e6a10 | Nicholas Feinberg | 2020-07-05 15:56:08 -0700 Split up some ring equip code -------------------------------------------------------------------------------- 1b87330c0f | Edgar A. Bering IV | 2020-07-05 17:02:31 -0400 Don't grant nutrition for hydra form devours (kate-) This prevents some possible hypothetical optimal incentives to cast it if you're low on rations to eat up popcorn monsters stashed for later. -------------------------------------------------------------------------------- 7084942c32 | Edgar A. Bering IV | 2020-07-05 17:02:31 -0400 Remove eating related options auto_butcher_max_chunks was added for non-Ghouls; since Ghouls want as many chunks as possible maintaining the option only for Ghouls is unreasonable. easy_eat_chunks simply does not make sense: species that eat only eat one kind of food now. -------------------------------------------------------------------------------- 8c33d26e57 | Edgar A. Bering IV | 2020-07-05 17:02:31 -0400 Uncouple Ghoul rotting from hunger state And prevent Ghouls from eating rations. A further food simplification; Ghouls have their own "clock", the rot clock, controlled by chunks. Coupling the opaque hunger state clock to the speed of the rot clock was an extra layer of complication and mostly not noticable for ghouls: by the time a Ghoul was in a low corpse area they could have a fat stack of rations and remain above the threshold. If the clock on Ghouls is too loose, the rot clock can be accelerated. -------------------------------------------------------------------------------- a69f94b37a | Edgar A. Bering IV | 2020-07-05 17:02:31 -0400 Simplify eating related code and interface Now that only ghouls eat chunks, a lot of internal complicated code regarding chunks and deciding when and why to eat them can be deleted. Good god food conducts also don't make sense, so they're removed. The restriction on cannibalism remains for hydra form for flavour reasons, but could be removed for further simplification as it isn't a significant mechanical impact (there's no way to violate it now and incur penance). This commit also makes the "eat" menu a thing of the past, press e to eat if food is available, no prompt or consideration, a ration on the floor will be eaten first. Ghouls still have rations available, but a subsequent commit will pin their rotting rate (instead of making it hunger dependent) and prevent them from eating rations. The option `auto_eat_chunks` is replaced with `auto_eat` which does what it promises: automatically eating if it makes sense to do so (Hungry (or rotted), not in danger, food available). Some butchery and eating options remain, a subsequent commit will clean these up. -------------------------------------------------------------------------------- 5ea7c316c7 | Edgar A. Bering IV | 2020-07-05 15:42:13 -0400 Remove chunk eating for most species Ghouls retain the ability because that's their thing. With spell hunger removed food conducts become a vestigal part of crawl that can be used to tweak the food clock for different species. Spriggans, with their move speed, seem to be the only ones that require this adjustment, accounted for by MUT_HERBIVORIOUS' nutrition penalty on rations. Trolls lose their flavorful fast metabolism gourmand combo, which is a shame and perhaps could be restored, but in practice it didn't confine gameplay much for non-Gozag trolls. They retain fast metabolism 1 to account for their regeneration. Hydra form now allows devouring up to Engorged for all species that can transmute. -------------------------------------------------------------------------------- 5530ec33b9 | Edgar A. Bering IV | 2020-07-05 15:42:13 -0400 Remove spell hunger Spell hunger was meant to serve as a backstop limitation to medium term use of magic and the use of magic in conjunction with certain god abilities. However, except for very high level spells cast with low intelligence it was rarely relevant in the tactical scale. The spell hunger mechanic comes with a design cost: it necessitates a wide difference in food clock costs between magic and non-magic combat skills, leading to chunk eating and the attendantly loose food clock. Removing spell hunger paves the way for removing chunk eating, coming in the next commit. -------------------------------------------------------------------------------- af96a1410f | gammafunk | 2020-07-05 14:32:01 -0500 Refactor DES For vaults that were recently changed due to trap changes, reglyph to use non-predefined glyphs, simplify NSUBST, and fix statement alignment. -------------------------------------------------------------------------------- 06cef45bd2 | gammafunk | 2020-07-05 14:32:01 -0500 Remove the 'known' trap designation Traps are always known to the player, and the 'known' term was supported as a no-op since so many vaults still used it. This commit removes parsing of it and removes all occurrences of it DES/lua and the documentation. Additionally clean up some trap code that referred to traps being known. -------------------------------------------------------------------------------- 4630968f27 | gammafunk | 2020-07-05 14:32:01 -0500 Rework vaults with trap effects through glass The following vaults have been adjusted to work better now that traps no longer fire out of los nor behind transparent walls that block translocations: bailey_polearm_2: Add shallow water so that players and monsters alike can get on and off the 4 turrets surrounded by water. box_level_dp: Remove the teleport traps, since these will no longer cause the central box monsters to disperse. Instead, the player will have to fight the large mass of monsters inside. I considered adding some new Zot trap placement but the layout of this vault makes it just too easy to lure monsters away from any central trap placement. Perhaps adding randomized traps in the central area would work a bit better, but for now it can do without the traps. Also replace the runed door with a normal one, since without teleport dispersal, it doesn't make sense to contain monsters inside. grunt_tough_drop: Replace transparent stone with iron grates, allowing the teleport/dispersal "drop" effect to work for this vault. ziggurat_pillar_centre_drop: Make this have diggable grates. Players and monsters can affect each other using smite targeted things through these, and grates also allow the teleport trap to work if a monster uses it in LOS of the player. -------------------------------------------------------------------------------- 826ad36590 | gammafunk | 2020-07-05 14:32:01 -0500 Have traps require LOS_NO_TRANS A number of vaults put monsters and traps behind glass, but the vast majority of these only intend the traps to be relevent when the player enters the vault. Traps triggered by monsters in these vaults when the player is safe on the other side of glass generate a lot of message spam. Hence this commit makes monster trap activation require LOS_NO_TRANS to reduce this spam. A couple of vaults do depend on monster trap usage behind glass, and these will be reworked in a subsequent commit. -------------------------------------------------------------------------------- 55556182f2 | advil | 2020-07-05 13:57:54 -0400 Remove a dubious string::reserve call in websockets In my profiling this is doing *way* more harm than good in the context of _send_map and _send_everything, and a very large map send drops from 4-500ms to under 100ms when I remove it. This is obviously very dependent on stdlib implementation but my guess is that trying to micromanage memory allocation in fairly small increments like this is always going to be a bad idea. It's possible that a larger reserve call would do some good before sending the whole map, or before _send_everything. Also, a minor simplification for appending a single character. -------------------------------------------------------------------------------- c3c9feb471 | Nicholas Feinberg | 2020-07-05 08:37:23 -0700 Fix a copy-paste error -------------------------------------------------------------------------------- 0bf9a7b534 | Nicholas Feinberg | 2020-07-05 08:33:21 -0700 Remove an archaic variable -------------------------------------------------------------------------------- 6a0ef731d2 | Nicholas Feinberg | 2020-07-05 07:48:26 -0700 Simplify -------------------------------------------------------------------------------- b271ac0e06 | Kate | 2020-07-05 03:10:57 +0100 Let Absolute Zero under Gozag still create gold Instead of the ice statue, since everything is supposed to turn to gold. Fixes #1438. -------------------------------------------------------------------------------- 62faa89a7e | RojjaCebolla | 2020-07-04 15:36:42 -0400 Prevent draconians from getting armour troves Mostly useless unless there's gauntlets of war, boots of running, etc in the trove. -------------------------------------------------------------------------------- cce8fa8613 | Edgar A. Bering IV | 2020-07-04 15:08:57 -0400 Future save compatibility guards -------------------------------------------------------------------------------- 2b0a3cef20 | Umer Shaikh | 2020-07-04 14:55:27 -0400 Make Spider ambiently quiet With the aim of encouraging monsters swarming the player, as web sense tried to do. -------------------------------------------------------------------------------- 405e0b396a | Umer Shaikh | 2020-07-04 14:55:27 -0400 Correct an outdated comment -------------------------------------------------------------------------------- 4b951ffc51 | Umer Shaikh | 2020-07-04 14:55:27 -0400 Remove web sense Many of the remarks in the previous commit removing blood sense apply here. Web sense is in a somewhat better place (it's attached to a clearly mechanically relevant feature, and it's at least revealed in the in-game description for webs). But its gameplay effect is mostly to incentivize something that doesn't need further incentive, namely, not stepping into webs when monsters might be nearby. And it is still a spoilery mechanic with a minor gameplay effect that dubiously justfies its added complexity. This commit removes the web sense flag and the logic handling the property. -------------------------------------------------------------------------------- 19b40d30b1 | Umer Shaikh | 2020-07-04 14:55:27 -0400 Remove blood scent Blood scent was a very obscure mechanic. As far as I can tell, it is not revealed explicitly in game at all. Since it primarily affects how certain out-of-los monsters might notice and track you, it is very hard for an unspoiled player to notice the mechanic by playing. It is attached to a feature, blood spatter, which is easily assumed to be purely cosmetic. It is flavourful, but that's not much good if no one knows about it; and even if it were revealed (say, in monster descriptions), it is so minor that likely most players would ignore it anyway. Mechanically, the gameplay it produces overlaps considerably with noise. This commit removes the blood scent flag and the logic handling the property. -------------------------------------------------------------------------------- cddaf0775b | Umer Shaikh | 2020-07-04 14:55:27 -0400 Simplify some pathfinding code Commit d63ab3c5 ("Simplify monster intelligence") made it impossible for mons_tracking_range to return a value of 0 (signifying no range restriction, for highly intelligent monsters). Therefore there is no need for conditionals checking to see if that value is greater than 0, and this commit removes some of the special handling for that case. (Probably a more thorough pass can find more of this.) -------------------------------------------------------------------------------- 395417ec19 | sdynet | 2020-07-04 14:39:09 -0400 Rework the Exile card Remove the function of self banishing. This effect is too powerful and dangerous. The risk of self banishing is gone, so the chance of this card appearing is made a little higher. [ Committer's note: Added save compatibility for Shaft removal, tweaked code formatting. Exile's self-banishment was a double edged sword that was challenging to wield, situations where either outcome (a lot of banishes or self banishment) are good enough to make Exile a worthy gamble are exceedingly rare---and the unworthy gamble isn't that fun. Closes #1235 ] -------------------------------------------------------------------------------- ccd700ba56 | sdynet | 2020-07-04 14:39:08 -0400 Remove the Shaft card This card has a similar effect as an exile card. They both send their enemies to other places. I don't think it's necessary to have two cards with roles like similar. Also, In the last floor(and Tomb with Ziggurat), which is the most dangerous section for the player, this card has no effect and instead becomes a deadly trap card that wastes one turn. Of course, you can't use exile cards in Abyss, but there are far fewer places that are ineffective and there is a very low probability that you can get this card. -------------------------------------------------------------------------------- 4694d0fe3b | Aidan Holm | 2020-07-04 13:59:28 +0800 Fix crash when playing hints mode on local tiles This was crashing because the tutorial cursor tile is not in the main tilesheet. The call to pack_cursor() above already handles both checks, and adds the tile to the correct buffer, so this code can just be removed. I suspect the reason this didn't crash before was because previously the tile ranges overlapped, and so a completely different tile was getting added to the main buffer. -------------------------------------------------------------------------------- 75a3d40d47 | Kate | 2020-07-04 01:48:52 +0100 Fix some messaging for enchantments applied out of LOS (#12288) -------------------------------------------------------------------------------- d5f9112cba | RojjaCebolla | 2020-07-03 20:39:18 -0400 Make necro a major sac, and charm a moderate sac In its present state, charm is not a major sacrifice. Its most powerful spells are dual-school with Hexes or Necromancy, but being barred from those schools has a larger impact because those schools have further powerful spells, some of which are single-school. It could make sense for charms to be a major sacrifice if/when the school has some heft to it once again. Necromancy, on the other hand, like conjurations or summoning, can be your school of choice for the whole 3 rune game. Unlike charms, it does not require a weapon, nor significant investment in other schools. -------------------------------------------------------------------------------- a22346179c | advil | 2020-07-03 11:33:19 -0400 Explicitly set the cursor region to GOTO_CRT for map view I think this is a better general fix than 899df634c; it's just that right now only webtiles (that I know of) happens to trigger a `viewwindow` call during map view while the map is up. But since it happens as a side effect often, it may be best to be prepared. -------------------------------------------------------------------------------- 5bf1febfd2 | advil | 2020-07-03 11:32:26 -0400 Save cursor position before clrscr This is yet another thing that can potentially leave the cursor somewhere very odd -------------------------------------------------------------------------------- a75df8a29b | advil | 2020-07-03 10:58:33 -0400 Run tests for webtiles in gh actions -------------------------------------------------------------------------------- 899df634c5 | advil | 2020-07-03 10:51:33 -0400 Quick fix for crashing map view in webtiles This may not be exactly right, but it stops the crashing for now. -------------------------------------------------------------------------------- 5c87645ba0 | advil | 2020-07-03 09:35:47 -0400 Use a smarter cprintf in output.cc cprintf is not region aware, and so can easily leave the cursor outside of the region it is writing to. One way it can do this is because if it prints right up to the edge of the screen, it will wrap to the very beginning of the next line. If the starting region is the mlist, this is guaranteed to happen and leave the cursor in an invalid position. This commit switches out cprintf for a region-aware version that will wrap relative to the current region. (This existed but wasn't widely used and needed some sprucing up.) This commit also adds a bunch more ASSERTs, and minorly fixes up some of the monster pane logic. -------------------------------------------------------------------------------- 6b68d4d4d6 | advil | 2020-07-03 09:35:47 -0400 Set cursor region on fakecursorxy This was apparently a major factor in "invalid" cursor positions. Basically, as far as I can tell, write_char_at leads to changes in wherex() and wherey(), even without a cgotoxy call, and so all the other checks will flag the results as invalid unless the region is updated. This also makes the region value consistent after cursorxy regardless of options. -------------------------------------------------------------------------------- 9d1cb7d701 | advil | 2020-07-03 09:35:47 -0400 Try to fix flash + input interactions once and for all (12292) I've tried previously to do some variant of this (RAII cursor state restoring) in the past and it's always led to inexplicable crashes, but this time maybe I've gotten it right. Basically, what was happening in various ways is that redraw calls would lead to moving the cursor out from under the input code when it goes to draw the current input string, and it would try to draw at coordinates that are invalid for the current region. One way this could happen is by setting a flash on the strong `warning` which always appears in the annotate prompt (found in Sentinel's rc file, see discussion in https://crawl.develz.org/mantis/view.php?id=12292&nbn=3#bugnotes). Flashing calls viewwindow, which tends to leave the cursor in the mlist. This commit ensures that viewwindow, flash, and a few other things will always restore the cursor, and it also slightly improves the cursor position sanity checking. It addresses several past related crashes, such as d21a89c53800 (where now I've concluded that setting the cursor region without moving the cursor is a bad idea, and probably led to different out of bounds errors down the line). Also, prevent flashing at the main menu. -------------------------------------------------------------------------------- 2520fe3e76 | Nicholas Feinberg | 2020-07-02 23:05:20 -0700 Unbrace -------------------------------------------------------------------------------- e96aa7da28 | Alex Jurkiewicz | 2020-07-02 22:36:41 -0700 Make the Crypt monster list tougher Remove shadows and wights entirely, they are complete popcorn by this point. Push the placement weights earlier for flying skulls, necromancers and wraiths. These are all very on-brand but still quite easy. -------------------------------------------------------------------------------- 16eed42cc8 | Umer Shaikh | 2020-07-02 22:31:53 -0700 Plug an information leak in summoner highlighting During the do_look_around loop, placing the cursor over an invisible or out of los monster highlighted the summoner. This commit makes the highlighting code call can_see to make sure the character should know about the summon. (A leak with respect to invisible monsters in los remains if you scan with the cursor while scrying without sinv. This is leaked anyway in that case by the monster description in the message log area, and there are other leaks with respect to invisibility while scrying. I've left this alone here on the grounds that it is part of a bigger, separate problem with scrying and invisibility, and deserves a more general fix.) -------------------------------------------------------------------------------- 76ffd63272 | Nicholas Feinberg | 2020-07-02 22:20:46 -0700 Remove panned pan spells -------------------------------------------------------------------------------- ef67e44054 | Anders Papitto | 2020-07-02 22:18:13 -0700 Reword hailstorm description to be less hand-wavy -------------------------------------------------------------------------------- a486cdfe0b | Nicholas Feinberg | 2020-07-02 22:16:49 -0700 Fix vampires' drinking problem (blerg) Fix various bugs introduced by vampires becoming permanently hungerless: - Allow Killer Klown pies to give Vampires -Potion. - Let vampires quaff from the (i) menu. (blerg) - Don't make the -Potion status light darkgrey for vampires. - Make AXED_GOD_PAKELLAS work correctly for vampires. -------------------------------------------------------------------------------- 19e2f27c09 | Aaron Golden | 2020-07-02 21:56:28 -0700 Get rid of MSG_NO_ENERGY canned message. This canned message was used both for when the player is too hungry to cast a specific spell and for when the player is too hungry to cast *any* spells. It was confusing in the "any spell" case, because "You don't have enough energy to cast that spell." suggests that some specific spell was attempted. When it happened to me I was convinced that I had some macro attached to 'z' by mistake. The patch removes MSG_NO_ENERGY and replaces both uses of it with more specific messages: "You don't have enough energy to cast that spell." for the case where a specific spell was tried (same as before) and "You don't have enough energy to cast any spells." for the case where no specific spell was selected. -------------------------------------------------------------------------------- 0ad9533087 | Nikolai Lavsky | 2020-07-02 21:54:11 -0700 Update `restart_after_save` default in the options guide The default value was changed to `true` in 750a858e. [skip ci] -------------------------------------------------------------------------------- af96914860 | Byrel Mitchell | 2020-07-02 21:53:12 -0700 Fix foxfire attacking out of LoS Currently a foxfire will attack a monster it's aggroed to that is just outside LoS (while the foxfire is in LoS.) Since a foxfire attacks 5 times per turn for 1 damage, this is actually somewhat usefully abusable in the early game vs 0 AC monsters (you can get 3-4 extra damage out of a foxfire by manipulating this.) This change makes it follow the rules of normal summons and refuse to attack monsters out of player LoS. -------------------------------------------------------------------------------- bb1397d0b4 | Alex Jurkiewicz | 2020-07-02 21:51:13 -0700 Tweak pan lord summoning spell allocation Previously, all caster pan lords had a 50% chance to get summon (greater) demon. Change this so only caster pan lords without an AoE spell get to summon demons, and furthermore make demon summoning exclusive with summoning other types of monster. This shrinks the spell set of pandemonium lords (help to differentiate one pan lord from another) and reduces instances of pan lords glaciating their own allies. -------------------------------------------------------------------------------- 0a47d3a03e | Alex Jurkiewicz | 2020-07-02 21:51:13 -0700 Adjust pandemonium lord spells Previously, 75% of pan lords were given spells, and the other 25% had their base stats buffed. Add the chance for a single spell to the 25% case, using a new spell list. This list of unique spells is based on movement: either closing the gap to the player or messing with their positioning. -------------------------------------------------------------------------------- f39bf5dfa7 | Alex Jurkiewicz | 2020-07-02 21:51:13 -0700 Add more melee attack types for pandemonium lords Previously they could select one of a number of brands. This change allows them to make use of attack flavours, for additional effects like trample, engulf, drain stats, etc. Also adds some (uncommon) customisation of pandemonium lord attack types. This changes the description of the pan lord's attack (from "hit" to "punch", "trunk-slap", etc), which is a cosmetic tweak only. -------------------------------------------------------------------------------- 96db1bde8c | Alex Jurkiewicz | 2020-07-02 21:51:13 -0700 Add more spells for pandemonium lords * Conjure Ball Lightning (re-added after its removal in 2014 -- I think it plays alright as a very rare conjuration) * Blink Range * Sentinel Mark * Dimension Anchor * Teleport Other Also remove shadow creatures. It was a waste of spell slot for players escaping on the orb run. Perhaps pan lords could use a "summon pandemonium residents" shadow-creatures-esque spell...? -------------------------------------------------------------------------------- 738cd00d82 | Nicholas Feinberg | 2020-07-02 21:07:51 -0700 Add a new altar vault Our code specifically bans shallow and deep water mimics in vaults, but not lava mimics. Someone could take advantage of that... -------------------------------------------------------------------------------- a111339ca7 | Byrel Mitchell | 2020-07-02 21:07:01 -0700 Fixed TSO stabbing comment TSO blocks all stabs, not just on intelligent monsters. -------------------------------------------------------------------------------- fb6fbf8b4e | Nikolai Lavsky | 2020-07-02 21:01:39 -0700 Fix description of amulets of reflection After 324b7566, amulets of reflection lost their plusses, and as a result no longer have a part of their description that mentions the shielding bonus. -------------------------------------------------------------------------------- f02c06f108 | Byrel Mitchell | 2020-07-02 20:57:35 -0700 Rename Spiny Frogs to Cane Toads There's a handful of reasons why these amphibians make more sense as cane toads than 'spiny frogs'. 1.) Spiny is an actual mechanic in the game, and spiny frogs don't have it. 2.) Spiny frogs have way more AC and less EV than other frog-genus monsters, which is one major difference between toads and frogs. 3.) The spiny frog tile is the typical color for toad camouflage, rather than frog, and has what appears to be warts on its side. 4.) This is an Australian game, and it makes sense for their 'bullfrog' equivalent to be the ultimate mundane frog-genus monster. These are in order of descending importance; 1 has the potential to mislead players, and 2 is more accessibly indicating AC/EV. 3 and 4 are more aesthetic and so not very important (or objective.) -------------------------------------------------------------------------------- da07880ab8 | Kate | 2020-07-03 02:05:05 +0100 Fix demon pronouns (And other description tweaks.) -------------------------------------------------------------------------------- 6c8a0bf695 | gammafunk | 2020-07-02 11:40:40 -0500 Fix a broken vault Replace the slaves in the Grated Community vault with lemures, and remove the slave theme from the one novelty store. The store can be rethemed to something more creative later. -------------------------------------------------------------------------------- 02840eae70 | Aidan Holm | 2020-07-02 23:56:33 +0800 Fix zaps being rendered under items/clouds on local tiles (Goratrix) This issue was caused by zaps being added to the main tile buffer before the tiles for the foreground (items and clouds). The fix is to pack the overlay tiles in two stages; although the tiles are in the same buffer, the order of the tiles within the main buffer is reversed, and the display order is now correct. This didn't happen on webtiles because it already used the same two-pass strategy out of neccessity: see cdd0e279bb for more. -------------------------------------------------------------------------------- 80609ef61d | Nicholas Feinberg | 2020-07-02 08:54:56 -0700 Enact the 13th Amendment The intended Pikel gameplay is pretty cool. You fight a tough guy with some tough pals, but if you kill the boss, his pals become your pals. Neat! Unfortunately, this didn't quite work as intended. Pikel's former slaves would wander around the level killing enemies without giving you any XP, meaning that players would often kill the slaves to avoid their unwanted 'help'. (Yikes!) Or they'd just kill the slaves to eat their chunks and animate their corpses, which, very flavorful, but also double yikes. So, let's send slaver Pikel straight to hell. His pals are mostly unchanged mechanically but have been renamed, rethemed, and resprited to minor demons, 'lemures'. (They're back!) Instead of trading in humans, Pikel is now cutting deals with the forces of Hell. Very thematic, very lore-friendly, and no more worries about encouraging annoying and unfun gameplay, since these lemures poof straight out of this world as soon as Pikel eats it. -------------------------------------------------------------------------------- 246d2780dc | Nicholas Feinberg | 2020-07-02 07:33:53 -0700 Fix Death Knight description (ShyWoof) They haven't been able to summon the dead since 0464229dc3bf, five years back. -------------------------------------------------------------------------------- f7aefb7b05 | advil | 2020-07-02 10:19:50 -0400 Fix ignition rendering Pretty simple in the end -- ignition bypasses a bunch of drawing code in beam.cc and goes its own way, and so needed a corresponding swap of update_screen to viewwindow for those found in cdd0e279bb9e. -------------------------------------------------------------------------------- 66bac3cce0 | Nicholas Feinberg | 2020-07-01 21:30:27 -0700 Rename Assassin -> Brigand If you see that you're playing an 'assassin' with a dagger, your playstyle is very obvious: you sneak around and stab unsuspecting enemies. But that's not what Crawl's Assassin is! If you want to stab monsters after the first few floors, you want to be playing an Enchanter, Earth Elementalist, or someone else with the ability to incapacitate foes. Crawl's stealth mechanic isn't meant to support 'purely mundane' stabbing, but the Assassin's very powerful theming is extremely effective at convincing new players otherwise, and then frustrating them when it doesn't work. A Brigand ia more brutish figure, an outlaw who leaps from the woods with an axe and chops you up. They're not sneaky in the same way that an Assassin is, and so, I hope, won't encourage the same confusion. Other considered names: 'ruffian', 'thug', 'skirmisher', 'brigand'. -------------------------------------------------------------------------------- 35b0e8a925 | Nicholas Feinberg | 2020-07-01 17:54:39 -0700 Give Cj Wz's old stat spread Conjurers are as close to anything in this game is to a 'pure caster' start. As long as backgrounds have different starting stats, they might as well have the max-int start. -------------------------------------------------------------------------------- e3f92733ed | Nicholas Feinberg | 2020-07-01 17:44:14 -0700 Rename Wizards to Hedge Wizards Wizards are a weird background. Their name and starting stats both point towards a 'pure magic' playstyle, but their starting book is quite poorly suited to such an approach - they aren't well-equipped to 'blast' foes, and are much better advised taking advantage of their imps and mephitic clouds to do a little backstabbing. This playstyle seems fine and distinctive, so let's make it clearer to players. Renaming them to 'hedge wizards' shows that they aren't expected to be masters of 'high magic' (pure blasting), as does tweaking their stat spread closer to skalds'. (If we want the extremely high-int spread to be on some background, Cj would be a reasonable choice.) -------------------------------------------------------------------------------- 60f854e704 | Nicholas Feinberg | 2020-07-01 17:36:48 -0700 Tweak D imps (hellmonk) - Shift shadow imp weight down slightly, and don't spawn them after D:10 or so. (Crawl has plenty of popcorn.) - Remove Crimson Imp spawns entirely. They're an awful enemy - not dangerous, just tedious. - Replace them with a mix of white imps (dangerous but beatable) and ufetubi, which are basically hounds. Seems fun to experiment with them in a context where they have at least a tiny chance of accomplishing anything. -------------------------------------------------------------------------------- 3d63440f56 | advil | 2020-06-29 21:39:34 -0400 Don't let hints global state persist across restarts If you end a game in hints mode with a restart option in place, and then load a game that would trigger certain unseen events (first item is a good one), then the global state in `Hints` would lead to the hint message being shown in the loaded game regardless of game type. (While doing this fix I also notice that `Hints` has a bunch of uninitialized state outside of hints mode...seems to be benign but this could use some future cleanup.) -------------------------------------------------------------------------------- dbaac098b9 | advil | 2020-06-29 21:39:34 -0400 Use last game type for startup menu, cleanup This is aimed at fixing a specific bug: with `restart_after_save`, if you start a new game and then save, the name is (unexpectedly) cleared. This is because of the static variable used here. However, this change generally does a better job of selecting the default main menu for a number of restart cases. The one thing I'm not sure about is that if a sprint or tutorial game ends, it returns you to the submenu instead of the main menu. This commit also refactors a lingering static variable as a member variable. -------------------------------------------------------------------------------- b10996a73c | advil | 2020-06-29 21:39:34 -0400 Fix a format specifier -------------------------------------------------------------------------------- 4a859bdc29 | advil | 2020-06-29 21:39:34 -0400 Fix epilogue reloading I still don't fully understand this bug, but under some circumstances, despite the changes to caching in 50bb873abc7, vdefs contained mapdefs that did not have the epilogue. (The easiest way to reproduce was to save after a level with an epilogue is generated but before entiring, fully quit crawl, reload the game, and enter the level. Restarting to the main menu after saving wasn't enough.) This fixes the issue by fully loading the vault to fill in the epilogue, which seems non-ideal, but I infer that it may be expected from other cases where load() is called. It may be worth revisiting just serializing the epilogue... This was leading to a lack of milestones/entry announcements for wizlabs when the epilogue reload failed. -------------------------------------------------------------------------------- 420014ea04 | Kate | 2020-06-29 21:20:46 +0100 Revert "Add a trunk reminder for the 0.25 tournament" This reverts commit 31f1466007b369fdd3d8e59a93af978609af72b8. -------------------------------------------------------------------------------- 49b1be5409 | gammafunk | 2020-06-29 13:49:29 -0500 Fix loot in nicolae_gauntlet_exit_dead_adventurers These DES item definition errors were introduced when I reworked this map's loot after it was adapted for the Gauntlet. They unfortunately didn't cause fatal loading errors, otherwise they'd have been caught sooner. The map has been working, but only when none of the dead adventurer sets containing errors were chosen. -------------------------------------------------------------------------------- 5ef36ef8a8 | Aidan Holm | 2020-06-30 00:11:50 +0800 Fix clouds being invisible This was broken at cebdf1d4ef. The check removed in this commit doesn't make much sense; before, all cloud tiles were on the [main, player] sequence, but the check is for the [floor, wall, feat, dngn] sequence. -------------------------------------------------------------------------------- 644bcb522d | advil | 2020-06-29 10:05:52 -0400 Seed stability fixes for heliophobic_arrival_battle_scene This vault had two issues: (i) in the vault code, the number of rng calls depended on player species (so could affect the seed differently depending on whether the player is a corpse species). This is easily fixed. (ii) the corpse generation code actually generates, places, and kills a monster, which does all sorts of stuff; but the main impact is that it will along the way generate weapons depending on species, which leads to substantial differences in rng rolls per species. This is a kind of weird and deep gotcha for corpse placers (though it mostly shouldn't matter in terms of seed stability, unless a vault designer is trying to place a player-based corpse), so I've just isolated the rng for corpse generation in a subgenerator. (As a side note, `; nothing` in a monspec is not helpful here, because that turns out to generate the monster with gear and then take it away.) -------------------------------------------------------------------------------- 24f6d3962c | Nicholas Feinberg | 2020-06-28 09:38:07 -0700 Give full XP from banishment Balancing effects by XP reductions is not a fun way to balance. Lucy's Banishment ability and distortion weapons already have several tradeoffs and balance knobs to tweak - they don't need to use XP reduction. -------------------------------------------------------------------------------- a5a6b74a87 | Nicholas Feinberg | 2020-06-28 09:38:07 -0700 Don't reduce beam range on hit Most beam spells (except zap/lbolt) had their range decreased by 1 for each target they hit. This made their targeters misleading and added extra complexity, in exchange for... reducing the best-case effects of the spells? The only player spells this affects are Bolt of Magma and Starburst. Starburst already has plenty of tactical complexity involved in good positioning, and Bolt of Magma doesn't need the nerf. On monster spells, it's even more irrelevant. Remove the range-reduction mechanic entirely. -------------------------------------------------------------------------------- c55fa27978 | Nicholas Feinberg | 2020-06-28 09:38:07 -0700 Adjust CBL (hellmonk, minmay) Conjure Ball Lightning had a number of very drastic breakpoints. Going from 99 to 100 power increased damage by roughly 60% (!!), and smaller breakpoints appeared at 50, 150, and 200 power. Simplify the whole thing by conjuring a fixed number of balls (3) and only varying their HD. Damage should be very similar at 75 and 125 power (about 60 and 114 -> 105 damage respectively, across all balls). At 0 power (somewhat unrealistic), damage goes from about 36 to about 40. At 200 power, damage was about 170 and is now around 175. CBL no longer scales at all between 0 and 36 power, but that seems OK, since characters would very rarely cast at power that low. This does not affect monster CBL. -------------------------------------------------------------------------------- e5b478ad6b | Nicholas Feinberg | 2020-06-28 09:38:07 -0700 Remove Evocations contribution to MP (hellmonk) It has been quite a long time since MP was meaningfully relevant to evocables. Training up Evo to enhance your mp-linked wands or your +Blink effects is literally possible, but seems like an corner case that's not worth the extra complexity. -------------------------------------------------------------------------------- df61995f76 | Nicholas Feinberg | 2020-06-28 09:38:07 -0700 Let statues regen 1d0f57cbceb778139 removed statues' ability to regen without explanation, and it does nothing to make them more interesting or enjoyable enemies. All that non-regenerating enemies do in Crawl is encourage the player ot use unfun, scummy behavior like repeatedly tossing stones and running away until the statue has been chipped to death. If gargoyles, lightning spires and oklobs can regen, there's no reason that statues shouldn't. -------------------------------------------------------------------------------- 8c06f40e08 | Nicholas Feinberg | 2020-06-28 09:38:07 -0700 Code cleanup -------------------------------------------------------------------------------- 6c731b1208 | Nicholas Feinberg | 2020-06-28 09:38:07 -0700 Remove elf bailey Baileys have a few fun gimmicks. There's a focus on orcs, with a few related pals (goblins, hobgoblins, gnolls), and some tactical terrain - letting monsters use polearms and ranged weapons to cause trouble. Elf Bailey has none of that. Instead, it has a pile of very out-of-depth enemies in a series of featureless circles. The theme is fun, and you can imagine a bailey that used elves as 'bosses' (orc-elf alliance!), but that vault would need to be designed essentially from scratch. (This may return if Deep Baileys become extant.) -------------------------------------------------------------------------------- 01bf09ea82 | Nicholas Feinberg | 2020-06-28 09:38:07 -0700 Mark !stab useless under TSO (Yermak) -------------------------------------------------------------------------------- 65f4f23bcf | Nicholas Feinberg | 2020-06-28 09:38:07 -0700 Remove an unused tile -------------------------------------------------------------------------------- a43b032afb | Nicholas Feinberg | 2020-06-28 09:38:07 -0700 Mark Gnoll as simple Gnoll removes the manual skilling system, something so complex that we normally automate it. It's also quite versatile and powerful. It's a great way for beginners to experience the game's content. This reverts commit 09a6a6ccbd1c6e3428c88a5b07a1a6b2d67f9368. -------------------------------------------------------------------------------- 099a46c217 | advil | 2020-06-28 12:00:28 -0400 Optimizations for drawing many gold piles These optimizations hit points that are the heaviest special cases (as revealed by profiling) for gozag characters in situations with lots of enemies, e.g. megazigging. They lead to measurable improvements but things are still not exactly fast. This commit is treating the symptoms, not the problem; the problem is that viewwindow is called many, many times and each time it is called rebuilds just about everything that is displayed, leading to some kind of fairly bad polynomial penalty. For example, on a test gozag char that is on a megazig 13, with ~130 items in view and only about 10 cells stepped on, `stash_annotate_item` alone gets called 145000 times via several different code paths when doing a full autoexplore to pick up items; when just standing still and hitting esc there are still hundreds to thousands of viewwindow calls. (So the reason special casing gold in that function helps is because a big proportion of these items are gold piles.) The real solution therefore should be to figure out how to not rebuild this information on every single viewwindow call, and/or to call viewwindow less. One starting point might be moving the show_init call elsewhere (this entirely tears down and rebuilds map knowledge every time). However, getting such a change right across all build targets is not easy. This commit may look like yak shaving, since gozag megazigging is not extremely common, but the reason I'm focusing on it is that when someone is megazigging on a server, the resulting cpu impact is quite noticeable across everyone else currently playing to the point of causing mass timeouts occasionally on a busy server. In my testing, which is not representative of server scenarios, there is a 20% absolute speedup with this commit (on a debug build) but cpu usage also suggests that the resulting rendering code paths become more io-bound, so hopefully this will lead to better sharing. -------------------------------------------------------------------------------- 2360561ed3 | Aidan Holm | 2020-06-28 23:03:58 +0800 Don't block mesmerise shading for non-firewood monsters The intended behaviour of allow_mon_recolour is to prevent recolouring on console output only, but this was then used in the expression for mesmerise_excluded, which is used for tiles rendering as well. -------------------------------------------------------------------------------- a3df7015a9 | Aidan Holm | 2020-06-28 23:03:58 +0800 Make screen cell's colour non-tiles-only In one of those happy coincidences so rarely encountered in crawlcode, it turns out that the cell->colour property is never used for rendering tiles, only for console output. Conditionally adding that property requires adding a lot of conditional compilation to view.cc's methods; while I agree that this appears ugly, it has the nice side effect of revealing that these functions would probably be a lot cleaner if they were entirely split in two. -------------------------------------------------------------------------------- 2d21376a7d | Aidan Holm | 2020-06-28 23:03:58 +0800 Make screen cell's flash_colour property tiles-only flash_colour is not used for console output at all; instead, cell->colour is set to the flash colour directly. This commit makes that clear by conditionally compiling the flash_colour property. The resulting behavour is the same as before, but the conditionally-compiled logic in draw_cell is also much more straight-forward. -------------------------------------------------------------------------------- e806f45234 | Aidan Holm | 2020-06-28 18:32:37 +0800 Remove TOUCH_UI minimap zoom functionality This is mostly dead; we don't support TOUCH_UI builds at the moment, since we don't support the Android version. -------------------------------------------------------------------------------- cdd0e279bb | Aidan Holm | 2020-06-28 18:24:08 +0800 Render dungeon zaps onto vbuf This commit merges the rendering of zaps into the vbuf. Previously, these were rendered separately via add_overlay() and clear_overlays() on tiles, and blitted directly to the output buffer on console. That approach had a number of issues. First, resizing the local tiles window when zaps were shown caused them to vanish; this was easy to reproduce when resizing the window while unlocking the entrance to Zot. It involved global state that had to be kept in sync with vbuf updates. It was also a poor fit for the game semantics; zaps are caused by in-game elements that are part of the game simulation, so they should be rendered in the vbuf, unlike objects like cursors that are part of the UI. This commit has a number of parts. First, the calls to draw zaps were replaced with new interfaces that are implemented in view.cc. There is still some static state here, unfortunately, but this allows zaps to at least be rendered to the vbuf. Next, zaps are rendered into the vbuf, at the bottom of draw_cell(). Actually drawing this vbuf requires minor modifications to rendering code: on local tiles, overlays (and all other tiles for each cell) are sorted by virtue of the fact that the local tiles renderer must pack each overlay tile into separate per-texture buffers. Webtiles has no such restriction, and so we must render overlays from different textures in two steps to get the desired effect (zaps on top of everything). -------------------------------------------------------------------------------- 9d760929e6 | Aidan Holm | 2020-06-28 18:24:08 +0800 Remove texture property from tile_def struct This commit was somewhat tricky. Simply removing the texture property from the tile_def struct definition alone led to almost all code compiling cleanly, since most use sites did not provide a ymax value, and so the texture ID provided was then inserted into the ymax field! This led to bugs in the inventory (and elsewhere) where only the top few pixels of each tile was shown. The most reliable way to weed out all instances where this happens was to temporarily delete the ymax field as well, and then add it back after converting all tile_def construction sites. -------------------------------------------------------------------------------- cebdf1d4ef | Aidan Holm | 2020-06-28 18:24:08 +0800 Unify tile indices into one sequence Previously, tile indices were arranged into multiple sequences, so a dungeon tile and a gui tile might have the same integral value. This potentially saved some tile index space, but we can have a maximum of 65,536 tiles before we run into size limits, and we're not currently close. On the other hand, this overlap required specifying tile IDs and textures in pairs for almost all GUI code, which was redundant. This commit upgrades the get_dngn_tex function into get_tile_texture. A lot of code unfortunately still works by checking which range of tiles (i.e. which texture) a tile id falls into; I have converted these to use get_tile_texture where reasonable. -------------------------------------------------------------------------------- afd660ec27 | Aidan Holm | 2020-06-28 18:24:08 +0800 Move pack_cell_overlays() call to vbuf load time Previously, overlays were cleared and recalculated every time the buffers were repacked; needlessly, since things like waves and wall shadows do not change unless the vbuf changes. This means that we can now avoid clearing any overlays already added by the code producing the vbuf. While none are currently set, this should be useful later for eliminating the tiles.add_overlay() hack. -------------------------------------------------------------------------------- e9f284f29a | Aidan Holm | 2020-06-28 18:24:08 +0800 Remove dead code -------------------------------------------------------------------------------- f7f0333ad6 | Alex Jurkiewicz | 2020-06-28 18:23:40 +0800 Enable console E2E/stress/lua tests ('make test') on GHA We only enable console builds for major 34, since they fail on major 35 (TODO?). We also only enable them for console builds, since the current test harness relies on that. -------------------------------------------------------------------------------- f0f09c352e | Alex Jurkiewicz | 2020-06-28 18:12:07 +0800 Pull out ccache setup to an external action -------------------------------------------------------------------------------- 9c6a28c82c | Alex Jurkiewicz | 2020-06-28 18:12:07 +0800 Print compiler version -------------------------------------------------------------------------------- 6e0b0f9901 | Alex Jurkiewicz | 2020-06-28 18:12:07 +0800 Simplify failure reporting. IRC colour is hard. You can't embed the raw ASCII sequences into YAML, so we have to generate them dynamically. -------------------------------------------------------------------------------- ea2bf45e0a | Alex Jurkiewicz | 2020-06-28 18:12:07 +0800 Install GDB for FULLDEBUG runs Lua tests can crash. -------------------------------------------------------------------------------- b94faee717 | Elliot Dronebarger | 2020-06-28 17:53:38 +0800 Fix segfaults when casting spells from wizmode (11889) In wizmode, attempting to cast summon mushrooms (a monster-only spell) causes a segfault. This is because it's targeted on a foe, which is a nullptr for wizmode monster casts. -------------------------------------------------------------------------------- 33945c58c8 | Gittourarmy | 2020-06-28 17:36:48 +0800 Show full name for orc resurrection prompt Previously, the players don't know the role of the dead orc if the one is blessed, when they use resurrect. For example, if you tried to resurrect Borug the orc warlord, then you will see only Borug. The point is, if there is another orc corpse that you don't know the role (possibly, just orc) and has its own name, then player can make mistakes. This fix may help Beogh players to use their ability in intended way. -------------------------------------------------------------------------------- ea8168b82c | Goratrix | 2020-06-28 17:34:33 +0800 Fix scarf of harm not working Commit 19c8d55 added harm to scarves, but used the 'wearing' function, which is only valid for getting jewellery subtypes. Need to use 'wearing_ego' to get the scarf ego instead. -------------------------------------------------------------------------------- 49ad78631c | advil | 2020-06-27 18:48:43 -0400 Optimize some default autopickup lua code Currently these functions are called a *lot* if there are many items on the screen (potentially multiple times per item on the screen every step), and so some of the heavier calls here (mutation check, item name) ended up being hotspots in profiling. -------------------------------------------------------------------------------- 2bcdb00447 | advil | 2020-06-27 14:15:38 -0400 Fixup in case a bug leaves a player in a wall Obviously this shouldn't happen in the first place, but when it does, the game is pretty much stuck without manual save file repair (needing both admin and dev work) because of an ASSERT in movement.cc. This commit fixes up such games on load, by moving them preferentially to seen stairs. (The reasoning is that when this happens, the crash is likely to have put the player at an arbitrary position). By doing this on load, we should still get crashes that lead to this. This is specifically aimed at this game: https://crawl.xtahua.com/crawl/morgue/sentinel/crash-sentinel-20200627-151113.tx t where a crash during a level excursion stuck the player kind of randomly (based on actual pos) on the level being viewed. The crash and setup for this are addressed in other commits. I'm doing this generally because I have manually fixed several games that get into this state somehow or other in the past. -------------------------------------------------------------------------------- 4fa7a6a692 | advil | 2020-06-27 14:15:38 -0400 Add some sanity checks for flashes/more Right now, if a flash happens during a level excursion, it can trigger a screen write out of bounds error. This is a low-level check to prevent this from ever happening, though I think the bug is probably in how viewwindow is called during map view excursions. (To replicate, set a message flash color for `warning` and write an annotation with `!` while off-level in map view.) -------------------------------------------------------------------------------- c8bb81158d | advil | 2020-06-27 14:15:38 -0400 Fix a case where certain crashes could save during an excursion "should be safe" eh -------------------------------------------------------------------------------- 93d59993c0 | advil | 2020-06-27 14:15:38 -0400 Crash when trying to save the game during a level excursion Doing this is really, really bad because you.pos is affected by the excursion (among other things). However, this is a standalone commit in case it needs to be quickly reverted for some reason I hadn't anticipated. (An alternative would be to just returnin this case.) -------------------------------------------------------------------------------- d8a95b691d | Nicholas Feinberg | 2020-06-24 08:12:00 -0700 Remove an unused var Unused since 486a359f . -------------------------------------------------------------------------------- 824cf5ae89 | Kate | 2020-06-23 23:12:15 +0100 Don't allow Sif channeling to be dispelled Since it's a divine ability. -------------------------------------------------------------------------------- 8f6dc4e0a5 | advil | 2020-06-23 15:32:35 -0400 Don't allow stacking from empty decks This leads to negative deck sizes and easily triggerable crashes, aside from stacking in ways that should be impossible. -------------------------------------------------------------------------------- 95b6527cb0 | Alan Malloy | 2020-06-22 12:54:05 -0700 Don't count plants when deciding whether to hailstorm (rchandra) Fixes Mantis issue 12290. -------------------------------------------------------------------------------- 9ce4ed413a | Kate | 2020-06-22 19:41:17 +0100 Reword some amulet messages for consistency -------------------------------------------------------------------------------- 55676f130a | Kate | 2020-06-22 19:41:17 +0100 Don't display gourmand on the % screen Since it's now Troll-only, and shows in their mutation list. -------------------------------------------------------------------------------- 2d08d87adb | gammafunk | 2020-06-22 10:11:19 -0500 Checkwhite -------------------------------------------------------------------------------- 758bcdf570 | advil | 2020-06-22 11:06:48 -0400 Git ignore sublime text metadata -------------------------------------------------------------------------------- a21c3c7a71 | advil | 2020-06-22 10:49:50 -0400 Make a few macro calls more ctags friendly Some versions of ctags struggle with `<` comparisons in a macro like this, apparently parsing them as template-related rather than operators. Adding parens fixes the issue on my ctags version. -------------------------------------------------------------------------------- ef3e9dd61f | advil | 2020-06-21 14:55:08 -0400 Remove an ASSERT for unlinked temporary items This was added in 0de8e755f4 as a diagnostic for hep abyss issues. It didn't get immediate results, but a crash for this case has finally shown up: https://crawl.kelbi.org/crawl/morgue/poncheis/crash-poncheis-20200621-183042.txt What seems to be happening is that that the player got pulled into the abyss away from their ancestor, and the ancestor died ("Matia has departed this plane of existence.") Somehow, at this point, cleanup didn't happen. I'm removing the ASSERT for now because apparently once a game gets into this state it keeps crashing. I *think* that without this check, the game will work but print unlinked temp item errors. -------------------------------------------------------------------------------- 486a359f8a | Aidan Holm | 2020-06-21 23:56:07 +0800 Remove unnecessary tiles.update_tabs() call As far as I'm aware, the purpose of this call is to switch to the map commands tab when the map is opened. viewwindow() already calls this, however, so it can be safely removed. Admittedly, if/when viewwindow is refactored to not unnecessarily update tabs, this feature might break, but that's a small price to pay for cutting away at the mess that show_map() has turned into. -------------------------------------------------------------------------------- a1c194d6e7 | Aidan Holm | 2020-06-21 20:04:04 +0800 Remove tautological comparison -------------------------------------------------------------------------------- ebf84c8062 | Aidan Holm | 2020-06-21 20:01:04 +0800 Fix inadvertent copies in loops -------------------------------------------------------------------------------- fd584523ee | Alex Jurkiewicz | 2020-06-21 17:45:01 +0800 Remove some vestigial blade branch logic -------------------------------------------------------------------------------- 8d2668ac79 | Alex Jurkiewicz | 2020-06-21 17:45:01 +0800 Delete mottled draconian on TAG_MAJOR_VERSION upgrade -------------------------------------------------------------------------------- 56b65ceb29 | Alex Jurkiewicz | 2020-06-21 17:45:01 +0800 Remove two obsolete mutations from TAG 35 -------------------------------------------------------------------------------- 65d16368d8 | Alex Jurkiewicz | 2020-06-21 17:45:01 +0800 Fix Pan entry placement in TAG_MAJOR_VERSION 35 -------------------------------------------------------------------------------- 3dc428ba9b | Alex Jurkiewicz | 2020-06-21 17:45:01 +0800 Remove references to Forest and other removed things These could be put in TAG_MAJOR_VERSION sections, but it seems easier to simply remove them. -------------------------------------------------------------------------------- 294706da8a | Aidan Holm | 2020-06-21 16:51:51 +0800 Fix cells out of LOS darkened for mesmerise on local tiles This webtiles-only behaviour was added in e8b24553 for unclear reasons. However, it's best to apply it unconditionally. At this point, mesmerise_excluded can be true for cells outside the LOS region because MAP_WITHHELD is apparently not cleared between redraws. -------------------------------------------------------------------------------- 980489766d | Aidan Holm | 2020-06-21 14:32:56 +0800 Remove global crawl_view buffer There's no need to keep it between frames, except as an optimization, and I'm not convinced that malloc can't handle an allocation every viewwindow() call (we're not running at 60fps...). Even if that were somehow an issue, the correct solution is to pass in a view buffer to fill out, so that the caller controls the lifetime and visibility, and then keep that passed-in instance static and private to the file. The puttext() call in redraw_console_sidebar() can be safely removed, since that function only needs to redraw the sidebar, not the dungeon view. -------------------------------------------------------------------------------- 8a085aef40 | Aidan Holm | 2020-06-21 14:32:56 +0800 Extract _viewwindow_should_render() helper function -------------------------------------------------------------------------------- 49e1a6fa64 | Aidan Holm | 2020-06-21 14:20:59 +0800 Extract map tile updating from show_update_at() Previously, show_update_at() would update map knowledge at a given location, and then update the tiles for that cell (stored in env), or mark it for an update on Webtiles. Now, it only updates the map knowledge. This should allow updating the tiles into a separate buffer, which should then allow separating layered rendering (the | command) from show_update_at(). -------------------------------------------------------------------------------- 5a2483679f | Aidan Holm | 2020-06-21 14:20:58 +0800 Remove unused checkerboard animation -------------------------------------------------------------------------------- 7a3809fd8f | Aidan Holm | 2020-06-21 14:20:53 +0800 Remove unused slideout animation -------------------------------------------------------------------------------- 09c6a6c846 | Aidan Holm | 2020-06-21 14:15:20 +0800 Extract view_dungeon() function This commit splits viewwindow() roughly in half, extracting the rendering logic that determines visual output to a new view_dungeon() function, which produces a newly allocated crawl_view_buffer. The remainder in viewwindow() is mostly concerned with updating global state, e.g. updating map knowledge and then pre-rendering the in-view tiles (env.tile_fg etc), as well as rendering the resulting crawl_view_buffer produced by view_dungeon() to either the console (via puttext()) or to the display / web. -------------------------------------------------------------------------------- 5ee47661b9 | Elliot Dronebarger | 2020-06-21 14:08:07 +0800 Add habitat information to monster description popup (#11224) This allows players to see whether monsters can move through water or lava. -------------------------------------------------------------------------------- 31e9aea6bc | Alex Jurkiewicz | 2020-06-21 13:58:15 +0800 Trolls and Kobold want unlimited chunks too -------------------------------------------------------------------------------- d5eb6995ac | Elliot Dronebarger | 2020-06-21 13:44:55 +0800 Added SDL_image to dependency requirements in INSTALL.md Most distros package SDL2 separately from its child libraries (SDL2_image, SDL2_ttf, etc). Adding this to the dependencies for other OS distributions to reduce confusion. -------------------------------------------------------------------------------- 4d60c92aeb | Alex Jurkiewicz | 2020-06-21 13:44:13 +0800 Document python-is-python3 for Ubuntu We are stuck in a limbo of supporting ancient webtiles servers with Python 2 installed only as 'python', and also newer OSes where Python 3 is only available as 'python3'. Ideally the Makefile can try all three names for Python automatically and use the first it finds. But until someone adds this behaviour we should document the correct approach. -------------------------------------------------------------------------------- 8c18429211 | gammafunk | 2020-06-16 01:11:56 -0500 Update the Debian dependency list Python 2 is no longer installed by default on Debian systems, so we either need to require the python package (and hence Python 2) or install the Python 3 yaml package. Seems more prudent to do the latter as Python 2 has reach EOL. Add python3-yaml to the dependencies for the crawl package. -------------------------------------------------------------------------------- 7ccd015ce0 | Aidan Holm | 2020-06-15 23:36:21 +0800 Remove broken flash_monster_colour() function This didn't work on any platforms, and only ever supported non-webtiles console. It also used a copy-pasted chunk of viewwindow and its callees that I'm trying to remove in order to refactor viewwindow(). -------------------------------------------------------------------------------- b3e1a4005a | Aidan Holm | 2020-06-15 23:35:19 +0800 Remove declarations for deleted functions -------------------------------------------------------------------------------- 012c83cef6 | advil | 2020-06-15 10:35:03 -0400 Don't call show_init from viewwindow off-level The easiest way to trigger this was fixed in 726680df4ae, but `viewwindow` is still needed to handle local tiles resizing in map mode. This is a quick fix to just prevent `show_init` altogether while on a level excursion, but the real fix probably involves better refactoring as described in the comment. -------------------------------------------------------------------------------- 07d1592867 | advil | 2020-06-15 09:28:40 -0400 Fix a crash for elemental staff fallbacks This is the flip-side of 64415b183b0; if items roles an enhancer staff, and upgrades to the elemental staff, it then tried to generate a lajatang as a fallback. This is the simplest patch for this code path; it just overrides this and generates an enhancer staff. (Via other code paths, a lajatang would still place.) These staff/weapon issues suggest a bigger refactor but I will leave that for later. -------------------------------------------------------------------------------- 47e9afce7f | advil | 2020-06-14 23:43:42 -0400 Adjust some catch2 tests After be553b73, process_map_command no longer clamps the coordinates, because this function uses a return of -1,-1 to indicate that the coordinates need to be recalculated. The clamping now happens as part of the map logic itself. This commit does the clamping explicitly, which is a bit more trivial but at least exercises known_map_bounds. -------------------------------------------------------------------------------- d6c187ff35 | advil | 2020-06-14 23:14:24 -0400 Crash if show_init is called off-level This may be too aggressive, hence putting it in a separate commit. It's possible that the call to `show_init` from viewwindow should be conditional on you.on_current_level? Or ideally, called from somewhere else rather than as a side-effect of viewwindow... -------------------------------------------------------------------------------- 726680df4a | advil | 2020-06-14 23:13:06 -0400 Don't call redraw_screen while off-level This call was happening any time the level map was exited, and it is triggering viewwindow, which triggers show_init, which updates map knowledge at the player position. A dedicated player could use this to fully map any visited level by exiting map view on the level to be mapped while moving around a fully mapped level. This bug was introduced in e98a5be7b87 which removed the scope protecting the level excursion object; the immediate fix here is to restore the scope. I'm not sure that this fix eliminates all ways of causing this... Resolves #1433 -------------------------------------------------------------------------------- be553b73f1 | advil | 2020-06-14 19:20:59 -0400 Fix timing for map view cursor clamping Because `process_map_command` uses -1,-1 to signal that the cursor position should be calculated from map bounds, it is wrong to clamp the cursor to map bounds at the end of this call. (Even worse, when the command is a level change, it uses the bounds for the current level.) This fixes the issue with stair destinations not working right with [] in map view. Resolves #1452 -------------------------------------------------------------------------------- a645b5fb18 | advil | 2020-06-14 16:48:19 -0400 Minor tweaks to levelgen item debug msgs -------------------------------------------------------------------------------- 64415b183b | advil | 2020-06-14 16:47:53 -0400 Fix some crashes with fallback randarts for staff of battle A weapon can be upgraded to an unrand enhancer staff (e.g. staff of battle), changing object type. In the case where this unrand had already generated, the code for finding a fallback randart wasn't handling this case correctly (setting OBJ_STAVES as the base type, but a weapon sub type), and crashing. This commit fixes a few other issues with fallback randarts for enhancer staves as well, and does a bit of code cleanup. Example crash: https://crawl.xtahua.com/crawl/morgue/ventricule/crash-ventricule-20200614-18273 4.txt -------------------------------------------------------------------------------- abc7bfb7dc | Nicholas Feinberg | 2020-06-14 12:37:02 -0700 Fix cloud generators triggering on load Cloud generators are set to trigger when entering a level (so we can start with some initial fog), but the same event was also fired when we loaded a save. Disable that. -------------------------------------------------------------------------------- 09a6a6ccbd | Nicholas Feinberg | 2020-06-13 19:56:00 -0700 Revert "Pasty desc" Oops, wrong repo. This reverts commit 6d82f5e594e19892eecbf24d037a23944c5f14b4. -------------------------------------------------------------------------------- 6d82f5e594 | Nicholas Feinberg | 2020-06-13 19:53:38 -0700 Pasty desc -------------------------------------------------------------------------------- 31f1466007 | gammafunk | 2020-06-12 15:10:27 -0500 Add a trunk reminder for the 0.25 tournament -------------------------------------------------------------------------------- 0742823d39 | Edgar A. Bering IV | 2020-06-12 12:41:29 -0400 More credits for 0.25 (oops) -------------------------------------------------------------------------------- 35acc811ca | gammafunk | 2020-06-12 02:43:07 -0500 Changelog updates for 0.25 release First attempt at finalizing release highlights and update the debian changelog. -------------------------------------------------------------------------------- 850bfe61e3 | advil | 2020-06-11 15:03:48 -0400 Fix an interaction of fallback randarts and acquirement (12277) I hadn't fully understood one of the ways in which acquired objects could interfere with unrand generation. After this commit, unrands that place outside of levelgen (acquirement) or in the abyss or a trove should always cause later instances of that unrand to simply be replaced with a fallback randart, and have no other effect on item generation during levelgen. Before this commit, unrands that were forced by vaults would be correctly replaced with a fallback if they had already been acquired, but unrands that were placed randomly (e.g. by | in a vault; Slime:5 was a good place to check) could be affected by previous acquirements in a way that had unpredictable results for those items. I'm pretty sure that this bug had no impact on item generation (or levelgen more broadly) outside of those specific grids. This commit may change some seeds as I'm adding a subgenerator the will impact certain rare cases of unrand placement (mainly for uniques who can come with a special unrand). These uniques may need further testing. No save compat for this, so upgrading will lead to the same behavior as games from before this commit would have. -------------------------------------------------------------------------------- eefc223169 | gammafunk | 2020-06-11 08:12:42 -0500 Don't warn about blocked LOF for Starburst Starburst is essentially untargeted, but its tracer beams were generating line of fire warnings whenever any of its 8 tracer beams had line of fire blocked from player to a location at spell radius away. Some beams might hit a monster even if others have LOF blocked. The tracer beam target locations aren't important in any way as they just exist to let the tracers hit the entire spell radius. It might be nice to give the LOF prompt if all beams that might hit a monster have blocked LOF. That would require some significant refactoring, so for release, this commit removes the warnings specifically for Starburst. -------------------------------------------------------------------------------- 2f47209187 | gammafunk | 2020-06-11 07:44:47 -0500 Fix some target prompts under Fedhas Fedhas completely protects allied plants from the effects of Airstrike, Shatter, and tin of tremorstones, but players currently receive incorrect penance warnings when using these effects. Add the relevant Fedhas ally checks so that the attack prompt won't be triggered for these cases. Fedhas currently doesn't protect allied plants from player Freeze, but the prompt correctly warns them in this case. Freeze and intentional melee attacks are the remaining exception where we do apply Fedhas penance, but there's no reason for these exceptions to exist that I'm aware of. It would easier to centralize the prompting logic in bad_attack() if all attempts at harming a Fedhas ally by the player were prevented. This can be addressed in a future commit, but the fixes in this commit will be enough for release. -------------------------------------------------------------------------------- 059e62fbdb | advil | 2020-06-09 16:44:55 -0400 Don't crash on level excursion in the abyss -------------------------------------------------------------------------------- 18c3a0dd01 | advil | 2020-06-09 15:19:21 -0400 Fix pregeneration for upgrades where branch size changes Pregeneration was using the current branch depth, rather than branch depth from the save. (It's possible that saves this old should be automatically treated as `classic` levelgen mode, too.) -------------------------------------------------------------------------------- 1937b064fb | advil | 2020-06-09 14:55:14 -0400 Sanity check for pregen: is the generated level what was requested? Currently, if a save from before some branch shortening is upgraded to a version with pregeneration, and the player enters a level that no longer exists, the pregenerator will generate the complete sequence and save the last map (zig:27) as the no-longer-existent level. This commit prevents the possibility of saving the incorrect map for pregeneration. An upcoming commit will handle save compat for the specific bug. -------------------------------------------------------------------------------- 6c07f0ee8d | shummie | 2020-06-08 15:58:22 -0400 Change = to == in checking crawl_state.type Every game is displaying the seed, whether or not it's a custom game since the statement evaluates as true. -------------------------------------------------------------------------------- 00fb324cd0 | advil | 2020-06-08 13:57:00 -0400 Show seed for seeded play with welcome message This is because of reports of players forgetting that they had a seed set in their rc file. This also prints it on the "welcome back" message, not sure if that's too repetitive. Also, tweak this message a bit. -------------------------------------------------------------------------------- d69c119aaa | advil | 2020-06-08 13:46:28 -0400 Tweak how seed games are displayed in ?v and chardump Consolidated code between these two. This doesn't matter so much for chardump, where the first line also says "Seeded", but it's a good reminder for players looking at their seed in ?v. I've heard of players forgetting they were starting a game in seeded mode (e.g. when setting it via the rc) so there's maybe more telegraphing of this mode that could be done somewhere. -------------------------------------------------------------------------------- 79b31b8662 | advil | 2020-06-07 13:22:15 -0400 Fix viewmap catch2 even more -------------------------------------------------------------------------------- eb7e7872c2 | advil | 2020-06-07 12:52:56 -0400 Fix catch2 tests for map panning / clamping -------------------------------------------------------------------------------- 5c1c449dd3 | advil | 2020-06-07 10:40:24 -0400 semicolon -------------------------------------------------------------------------------- b07082dc69 | advil | 2020-06-07 10:33:32 -0400 Restore map view clamping behavior (elliptic) ca36f614e438 conditioned clamping on `map_bounds` instead of `known_map_bounds`, the behavior before this commit. I think this was unintentional, and it leads to weird behavior on unexplored levels in console (e.g. lets you move the cursor outside of the screen, restores to known_map_bounds when you move outside of regular map_bounds). This commit restores the previous behavior for `X` where you can't scroll beyond known map bounds. As a side note, this is inconsistent with `x`, where you can, which is kind of messy. TBD how this commit interacts with the test in bd17af9. (cherry picked from commit 1ad37275098a3c43d7ffebdb0209a1e8a00158e0) -------------------------------------------------------------------------------- 15ccc7ae60 | gammafunk | 2020-06-06 23:44:54 -0500 Use correct DES syntax for wand charges The correct field to set is "charges", not "plus". Fix this in gammafunk_dig_for_victory. Also remove a reference to max wand charges in the DES documentation. -------------------------------------------------------------------------------- 45f243fec8 | advil | 2020-06-06 12:23:29 -0400 Changelog tweaks -------------------------------------------------------------------------------- d53d4cd058 | advil | 2020-06-04 12:26:18 -0400 Allow excursions from the abyss Abyss does excursions on purpose; they are used to place features from other levels that have generated. -------------------------------------------------------------------------------- 379118c2f8 | Nicholas Feinberg | 2020-06-04 07:47:40 -0700 Remove the manual ID system We call set_ident_type whenever a skill manual is generated. This accomplishes the following: - Culls identical items from your shopping list (except manuals don't get culled by this). - Allows you to start training the relevant skill. This is a bug, since this occurs during item generation, not pickup or even when you see the item or enter the level! - Potentially takes a note about identifying the manual (again, a bug if it ever occurred). - Requests autoinscribe (except that inscribes everything in the current level later, not the level the manual is being generated in, so it doesn't work). - Potentially identifies other pack items of the same type (but manuals can never do that). - Checks to see if any other items in your shopping list have had their price changed by being ID'd, like a potion going from 'blue fizzy' to '!XP'. This can't happen, but it *can* cause the game to try to visit a new level midway through generating a different one, causing uninitialized item interactions and crashes. Absolutely none of these are useful, so remove them. At some point, someone else could take a look at manual autoinscription, but if it hasn't worked properly in years, it's probably not a high priority... -------------------------------------------------------------------------------- c4d14cd842 | advil | 2020-06-04 01:16:39 -0400 Crash rather than do excursion during levelgen I'm pretty sure this will almost always crash anyways, because it will try to save the level in an incomplete state, but we really don't want it to even try. -------------------------------------------------------------------------------- 0e6732e0a6 | Nikolai Lavsky | 2020-06-03 15:32:08 -0400 Don't pick up duplicate tins of tremorstones By default, autopickup ignores tins as all other misc and dangerous items. But in case the player has `autopickup_exceptions` for them, duplicate tins should be ignored. -------------------------------------------------------------------------------- 98f9fe671c | advil | 2020-06-03 15:27:26 -0400 Remove a stray bolt of fire This really should come with some sanity checking for vault-placed spellbooks, but I'm just doing the quick fix for now. Resolves #1442 -------------------------------------------------------------------------------- 55d99e38fc | advil | 2020-06-03 15:27:26 -0400 Consolidate code for applying game_scale This moves the state out of Options (except for initial setup) and does the scale calculation in one place; I lumped this in with other density-related code. As a side effect, this commit tweaks the timing of when game_scale is initially applied: it will take effect after the initial loading screen is displayed. This heads off a bunch of opengl errors that (I think) were caused by game_scale being applied before device_density is fully initialized. Also, improve some opengl error messaging for debug builds, constexpr-ify HiDPIState. -------------------------------------------------------------------------------- edd8c26f91 | advil | 2020-06-03 15:27:26 -0400 Let tile_filter_scaling=false work on mipmapped textures Did you ever get the sense that this setting didn't do much? That's because it didn't. (All dungeon textures, UI textures, probably more are mipmapped.) This makes high scale values lead to pixellated graphics. -------------------------------------------------------------------------------- a07a990f65 | advil | 2020-06-03 15:27:26 -0400 Fix font glitches at very high device density The code that loads in the glyphs was relying on face->bbox to give the max glyph sizes. Which it does, but insensitive to device pixel scaling. Coincidentally, the values worked up through 4x scaling, but no further. This uses the actual correct advances in pixels. One open question: does this affect font rendering at lower scale values? I'm pretty sure the answer is no -- that it just affects how efficiently glyphs are packed at more typical scale values. -------------------------------------------------------------------------------- c699729d39 | advil | 2020-06-03 15:27:25 -0400 Add a global scaling option for local tiles OS support for high-dpi rendering varies widely, but the sizes of UI elements are very hard to adjust for higher-resolution displays where high-dpi is not supported. This commit adds a coarse global scaling parameter that mimics high-dpi behavior, scaling by a value from 1-8. I'm not sure if there's any current devices out there that would need 8, but 2 and 3 work reasonably well for my 2k ultrawide monitor, so I expect that even 4 will be usable for a 4k monitor without high-dpi support. This is mostly implemented at a very low level by exploiting existing high-dpi code; it would be nice if this could be consolidated to be done entirely at the `WindowManager` level. -------------------------------------------------------------------------------- 20b394cb32 | Aidan Holm | 2020-06-01 23:45:23 +0800 Fix anti-reckless-fighting command Previously, this commit used crawl_state.prev_cmd to determine the previous command. This was incorrect; the deceptively-named prev_cmd is actually always set to the current command before process_command even runs. This commit adds a prev_cmd argument, which is set to the right value when called in main.cc. Unfortunately, process_command is also called from many other places for increasingly dubious reasons. I've added a default value of CMD_NO_CMD for that case, since it's clearly not appropriate to have all these functions accessing crawl_state.prev_cmd. If it actually does become important for these process_command calls to pass a correct value for prev_cmd, there should be a single wrapper function that takes one command_type and calls real_process_command with both current and previous commands, maintaining the state locally. -------------------------------------------------------------------------------- 4f279345d9 | advil | 2020-05-31 20:32:27 -0400 Restore note about pasting to local tiles seed selection This was lost in 04990682366a as part of improvements to the seed selection menu (since no button corresponds to [p] and pasting is more generally possible in local tiles text input). However, I think it's still useful for players to have a reminder that pasting is possible at this screen, and describe the way in which it may not behave as expected. -------------------------------------------------------------------------------- b98801ac91 | advil | 2020-05-31 19:28:41 -0400 Don't print "levelgen mode: deterministic" This is the default now and present in basically all morgues on all servers, no need to mark it explicitly. -------------------------------------------------------------------------------- fe7b5d5a6f | Aidan Holm | 2020-05-30 18:06:00 +0800 Remove strange FLYING flag compat code Removing this seems to work fine; tileidx_cloud() was only ever stored in env.tile_cloud and env.tile_bk_cloud, and all the places where that's used seem relatively non-suspicious. TILE_FLAG_FLYING was presumably added so that clouds were not displayed half-immersed in water (as a monster tile would be displayed), since apparently they used to be rendered on the same 'layer' (i.e. on tile_fg, rather than on tile_cloud). -------------------------------------------------------------------------------- ae4997d50b | Aidan Holm | 2020-05-30 18:05:59 +0800 Refactor feature extra tiles handling This commit groups data for feature descriptions together. Preivously, titles and descriptions were separated from tiles. This commit also fixes the display of the disjunction tile; it was never a cloud, so the previous code never worked properly. Unfortunately, since this code cannot access the packed_cell, we are limited to showing a fixed tile for disjunctions, not the tile that is present at the described map cell. -------------------------------------------------------------------------------- 682f2c3f2f | Aidan Holm | 2020-05-30 18:05:57 +0800 Make some tile picking code unconditional -------------------------------------------------------------------------------- 50178cf780 | Nicholas Feinberg | 2020-05-29 15:15:05 -0700 Fix some no_tele_into shops (minmay) It was still possible to blink into them and get soft-locked. Instead, add a helpful escape hatch! -------------------------------------------------------------------------------- 11e0b32562 | aaronegolden | 2020-05-29 14:39:16 +0100 Fix up some typos in the docs folder. (#1434) * Fix some typos in god_creation.txt. * Fix a typo in the quickstart guide. * Fix typo in monster_creation.txt. * Fix some typos in mutation_creation.txt. * Fix some typos in patch_guide.txt. * Fix a typo in tiles_creation.txt. * Fix a typo in translation.txt. Co-authored-by: Aaron Golden -------------------------------------------------------------------------------- 58eb27aeba | advil | 2020-05-29 08:50:07 -0400 Tweak dispreferred newgame colors on local tiles At darkgray, these read to newer players as unselectable, I think due to standard UI conventions (noticed this here: https://www.reddit.com/r/dcss/comments/gspvkg/i_made_a_review_of_dcss_let_me_kno w_what_you_think/). Adjust them to be only slightly darker than the preferred colors. This may now be too subtle? What might be better is to provide a key with these menus. -------------------------------------------------------------------------------- 9e0bf03589 | advil | 2020-05-28 17:48:56 -0400 Fix an unused param warning -------------------------------------------------------------------------------- ae26e8c9cb | advil | 2020-05-28 17:34:18 -0400 Temporary check to bridge a change in client.js client.js is served in a way where its browser cache isn't invalidated by changes, and so the lack of an updated version was causing many problems with this line. Kind of ugly, but having this around for a while is simpler than dealing with a lot of people having trouble with browser caches. (client.js should probably have some kind of versioning so that changing it doesn't go so poorly?) -------------------------------------------------------------------------------- c8e6c4a415 | advil | 2020-05-28 15:26:58 -0400 Fix a signed/unsigned warning -------------------------------------------------------------------------------- c29e872307 | Aidan Holm | 2020-05-29 00:10:28 +0800 Remove ability to memorize spells from their description With the introduction of the spell library, this was only ever possible by disabling autopickup and then examining a book you were standing on. -------------------------------------------------------------------------------- 56b8cd3df0 | gammafunk | 2020-05-28 02:15:38 -0500 Update the changelog -------------------------------------------------------------------------------- b080af96c6 | gammafunk | 2020-05-27 22:09:18 -0500 A tile for tin of tremorstones (CanOfWorms) -------------------------------------------------------------------------------- c929df5585 | gammafunk | 2020-05-27 01:13:21 -0500 Don't have allies avoid player line of fire In 340c9e81, monster AI was improved to avoid LOF between a monster's allies and their targets. This change had the player considered as an ally, hence summons in front of a player would try to move out of the path between the player and a hostile. This is convenient when the player wants to use a ranged attack, but doesn't work well in the more common case were allies are used for cover. This commit has the player not be considered a ranged ally by allied monsters, hence they won't avoid player LOF, but continues to allow that consideration for fellow allied monsters. There's probably no good way to predict when the player wants to make a ranged attack behind allies, so it's possible that a new 't' command is the best solution. A way to toggle this LOF-avoidance behaviour through other 't' commands might need some consideration, if something like this is implemented. -------------------------------------------------------------------------------- 1f0226971c | advil | 2020-05-26 20:24:16 -0400 Add an ugly exception for ui_state_sync -------------------------------------------------------------------------------- e22fd8933b | advil | 2020-05-26 14:34:52 -0400 Don't send ui_state_sync when not in game This fixes repeated logged warnings that were alarming to admins. This commit also tweaks some of the logic for what counts as "in game" for the javascript client, which looks to me like it was buggy. -------------------------------------------------------------------------------- 5c64649191 | advil | 2020-05-26 12:48:08 -0400 Fix a bytes/str issue in error message -------------------------------------------------------------------------------- 700258a8a8 | advil | 2020-05-26 12:37:36 -0400 Enhance an error message -------------------------------------------------------------------------------- 3ae7099c47 | advil | 2020-05-26 11:05:28 -0400 Fix accidental no-daemonize by default (johnstein) It turns out that store_true and store_false set a default. -------------------------------------------------------------------------------- 2a348b289f | Elliot Dronebarger | 2020-05-26 10:12:01 -0400 Fixed a typo in god-passive.cc Found a missing word, and added it back in. -------------------------------------------------------------------------------- f97e55dc39 | advil | 2020-05-25 16:53:42 -0400 Fix a randart name class (12270 / Flugkiller) -------------------------------------------------------------------------------- 5f92b90fa0 | gammafunk | 2020-05-24 21:09:21 -0500 Remove Lightli... ...'s lack of credit in CREDITS.txt. Thanks for your submissions! -------------------------------------------------------------------------------- 5d2c98bf94 | Edgar A. Bering IV | 2020-05-24 21:34:26 -0400 Update CREDITS.txt -------------------------------------------------------------------------------- 135ff06667 | Byrel Mitchell | 2020-05-24 17:26:24 -0400 Fixed terrain change duration not decrementing while off-floor This was most noticeable for Summon Forest, whose trees wouldn't tick down while off level. -------------------------------------------------------------------------------- e6218251f0 | Edgar A. Bering IV | 2020-05-24 16:54:55 -0400 Stimulate Xom on worship from a faded altar Closes #1413 Xom doesn't use normal piety, but thinks its hilarious when you end up worshipping from a faded altar. -------------------------------------------------------------------------------- 3fdfaa9094 | Nikolai Lavsky | 2020-05-24 16:29:06 -0400 Display Zz and ? status icons for allies Having this information on the main view is useful because confused allies can attack the player, and paralysed allies block movement. Also, since the player gets the top-tier stabbing bonus when attacking sleeping/paralysed/petrified allies, that should be indicated by the Zz's, TILE_FLAG_STAB, too. -------------------------------------------------------------------------------- 366e9434ed | RojjaCebolla | 2020-05-24 16:25:06 -0400 Add adjectives to the randart name generator [ Committer's note: split some cross-loaded history from this into other commits, tweaked and edited. Closes #1414 ] -------------------------------------------------------------------------------- 7b3c7a5917 | RojjaCebolla | 2020-05-24 16:24:25 -0400 Add verbs to some randart names Randarts can be "of the noun", let's expand that to "of the verbing noun". [ Committer's note: split out new nouns into a separate commit, removed a future goal from the commit message that isn't in line with the devteam's goals. ] -------------------------------------------------------------------------------- b168a4ef39 | Edgar A. Bering IV | 2020-05-24 16:24:25 -0400 New randart apperance adjectives (cebolla) -------------------------------------------------------------------------------- 4aaa7df55c | Edgar A. Bering IV | 2020-05-24 16:24:25 -0400 More randart nouns (cebolla) -------------------------------------------------------------------------------- 9c5a184348 | Edgar A. Bering IV | 2020-05-24 15:48:41 -0400 Typo fix (Goratrix) -------------------------------------------------------------------------------- 709782ff74 | Edgar A. Bering IV | 2020-05-24 15:23:01 -0400 Revise transmutation miscasts The polymorph effect was very flavorful, but even at minimal power a 150 aut badform was the result. Compared to other miscasts this was too intense. Reducing form duration would require a significant overhaul of player badform durations and power scaling because of how the existing codepath is set-up. Instead, since this is close to 0.25, this commit changes transmutations miscasts to increase player contamination: double existing contamination and then add the resulting miscast damage to the contamination score. Contam is still flavorful (since transmutations change the body and contamination is residual magic in the body and high contamination can cause mutation), though not as dramatic as polymorph. Possible idea for 0.26: add polymorph as a possible consequence of decontamination. -------------------------------------------------------------------------------- 750a858e70 | advil | 2020-05-24 15:08:17 -0400 Default `restart_after_save` to true What this means in practice is that saving returns to the main menu, a behavior that is much more typical for what people expect these days out of games. The option is retained for people who like the classic behavior. -------------------------------------------------------------------------------- c4d20be10f | advil | 2020-05-23 21:46:51 -0400 Comment an ASSERT (PleasingFungus) -------------------------------------------------------------------------------- 32a1ce3a9d | advil | 2020-05-23 19:55:58 -0400 Fix tiles I'm not sure why, but this assert triggers when starting up local tiles. -------------------------------------------------------------------------------- 448add79b7 | advil | 2020-05-23 15:56:04 -0400 Fix some unused function warnings for non-tiles builds -------------------------------------------------------------------------------- bc5e7ad058 | advil | 2020-05-23 15:52:45 -0400 Fix the tiles build -------------------------------------------------------------------------------- 9b8842f3ab | advil | 2020-05-23 15:22:44 -0400 Don't crash on too small terminal resize (6498) The new behavior is that a message is printed in the upper left telling the player their terminal is too small, and nothing else is drawn. This is pretty rough and ready, and there may still be glitches. In most of my testing a resize event also comes with an ESC (I'm not at all sure why) and this ends up exiting any exitable menus. You can still get glitches by resizing in menus that aren't exitable, e.g. the skill menu with no skills selected. But it's still probably better than crashing. This largely doesn't work on webtiles builds in terminal, for unclear reasons. However, that is not the main use case for this, and webtiles console is played wrapped in dgamelaunch anyways. In my testing this isn't a regression relative to current dgl behavior. (...which is a mess.) -------------------------------------------------------------------------------- d8d43ee9da | advil | 2020-05-23 14:44:04 -0400 Keep ui sizes in sync with terminal resizes (12260) Hopefully this is the right way to do it, but it stops a certain class of crashes in my testing: start the terminal with size n, shrink to some size =3 are supported now. -------------------------------------------------------------------------------- 8dcfb2fc82 | Alex Jurkiewicz | 2020-05-15 10:17:30 -0400 Convert README to markdown and update -------------------------------------------------------------------------------- ec0d3a76dc | Alex Jurkiewicz | 2020-05-15 10:17:30 -0400 Reduce log spam -------------------------------------------------------------------------------- fc79a73469 | Alex Jurkiewicz | 2020-05-15 10:17:30 -0400 Enhancements to webtiles game definitions Add support for: 1. Dynamic loading of games from games.d/*.yml files 2. Adding/modifying environment variables 3. -dir arg 4. Custom CWD -------------------------------------------------------------------------------- 38b645b55d | Edgar A. Bering IV | 2020-05-15 10:05:13 -0400 Document the auto_butcher_max_chunks default in options_guide.txt [skip ci] -------------------------------------------------------------------------------- dddbc3d8f2 | Edgar A. Bering IV | 2020-05-15 09:52:38 -0400 Restore the default auto_butcher_max_chunks = 10 But keep an exception for ghouls -------------------------------------------------------------------------------- 72af00c55a | gammafunk | 2020-05-15 06:37:27 -0500 Simplify targeter classes The shadow step targeter landing site method doesn't need to be a virtual method in the targeter base class. For uses in direction_chooser, we can do a static cast of this pointer to one of targeter_shadow_step, since we always know when our hit function was initialized with a targeter_shadow_step instance. -------------------------------------------------------------------------------- 858b6a6ff6 | advil | 2020-05-15 00:14:11 -0400 Add a placeholder fix for trap+corruption+nymphs What seems to be happening is that a trap gets temporarily removed by a nymph's flooding, then the terrain change marker gets moved by corruption without moving the corresponding env.trap entry, then the game crashes when restoring. This fix, which is not intended to be final, will instead print an error and place floor on the trap reversion. I think a real fix should either check and move the trap_def when the terrain change marker moves, or remove and recreate env.trap entries in sync with any terrain changes. The latter seems better, but I'm not sure why it wasn't implemented that way in the beginning, so there may be some issue I'm not anticipating. -------------------------------------------------------------------------------- ea6e5d949a | Aidan Holm | 2020-05-14 20:26:25 +0800 Move PrecisionMenu to its own file PrecisionMenu doesn't handle resizes well at all, and should be replaced with the new UI stuff. The only remaining user is the skills menu, but it's a complicated one... This commit just isolates it from menu.h, which is widely used (even if it's a complete mess as well...). -------------------------------------------------------------------------------- 1965fc2f32 | Aidan Holm | 2020-05-14 20:25:34 +0800 Remove ifdefs around menu tiles Less preprocessor gunk is always better, and efficiency is not really a concern (until proven otherwise). This change alone removes 1.6% of all ifdef lines! -------------------------------------------------------------------------------- dec1a2a129 | gammafunk | 2020-05-14 04:26:06 -0500 Fix log note generation for acquirement scrolls Generate log notes about finding items only if and when they are actually chosen. Previously artefacts and other notable items would falsely generate notes just by being a choice offered by the scroll. -------------------------------------------------------------------------------- 2ef1b3b3bb | gammafunk | 2020-05-14 04:23:39 -0500 Allow acquirement scrolls to be canceled We'd like to be able to back out of acquirement scrolls so that players can inspect inventory, stash, resists, etc. in order to make an informed decision. With the acquirement rework, these scrolls were uncancelable due to concerns about seed stability for any unrand items generated. If scrolls are cancelable, they must reuse the generated set of items, otherwise the player could reread the scroll to re-roll their results. If we do properly save items for a canceled scroll and any unrand artefacts are generated, we must "reserve" these unrands to prevent their generation on subsequent levels so as to avoid the scroll having to give the player a different item. My concern was that this unrand reservation would affect seed stability, but advil's recent improvements to unrand generation allows level generation to give fallback artefacts without affecting the seed results. Hence this commit allows the scroll to be canceled when read, including when it's first identified. Any unrands generated in the saved results are reserved to be out of item generation until a final selection is made. If an unrand isn't the final acquirement choice, it's properly unreserved and is allowed to generate in subsequent levels. I removed the keys for shopping list and identification items, since the player can just cancel the scroll and look at these menus normally. -------------------------------------------------------------------------------- 94ba3d2fff | gammafunk | 2020-05-14 04:21:06 -0500 Remove redundant comments and simplify The comment here is a redundant copy from the shop code. Also remove an unnecessary scope creation. -------------------------------------------------------------------------------- f4359a17dd | Edgar A. Bering IV | 2020-05-13 21:54:36 -0400 Mark !brill useless for Troglodytes Since they don't cast spells and can't use it usefully anymore. -------------------------------------------------------------------------------- 65f7fbe4a0 | Edgar A. Bering IV | 2020-05-13 21:02:49 -0400 Revert "Set auto_butcher_max_chunks default to 10" This reverts commit 9f5dfa981578c118dee96c7d59e09244e8ee7eb3. Setting defaults happens before species selection and this is a bad default for Ghouls, which makes this default a new player trap—especially considering ghouls are listed under simple. -------------------------------------------------------------------------------- 2607d5cfa1 | RojjaCebolla | 2020-05-13 15:24:28 -0400 Simplify ring plusses Put +6 on stat rings, +4 on the stronger rings, and curses are only -4, instead of somewhere between 2 to 6. Currently, 50% of rings are -2, 33% of rings are -3, and 17% of rings are -4 or more. The average cursed ring is -2.83. Making it -4 always will mildly increase the impact of wearing cursed items from the floor. -------------------------------------------------------------------------------- 0aa0c4bb02 | Edgar A. Bering IV | 2020-05-13 11:11:44 -0400 Add a TAG_MAJOR guard lost in rereflect -------------------------------------------------------------------------------- 2d2d24c1c4 | Edgar A. Bering IV | 2020-05-13 11:08:49 -0400 Add preservation and harm to shopping and debug (Implojin) -------------------------------------------------------------------------------- 112c7583a5 | Edgar A. Bering IV | 2020-05-13 07:54:34 -0700 Reflection artefact tweaks Correctly display the SH+5 for randart reflection amulets. Change the Brooch of Shielding to be an SH+8 guardian spirit amulet; it did not interact well with the new fixed plus reflection property, and having a guardian spirit + shielding amulet is more unique than a reflect amulet with 3 more SH -------------------------------------------------------------------------------- 0781489d4c | Nicholas Feinberg | 2020-05-13 07:54:25 -0700 Attune reflection amulets on HP Instead of a timed ramp up, attune them on HP like acrobat and regeneration for consistency's sake. -------------------------------------------------------------------------------- 9db49107ce | Nicholas Feinberg | 2020-05-13 07:54:01 -0700 Give piety for reflected Banishments -------------------------------------------------------------------------------- 76d6e0e762 | Nicholas Feinberg | 2020-05-13 07:54:01 -0700 Give piety for reflected poison -------------------------------------------------------------------------------- 1a06e6f6b7 | Nicholas Feinberg | 2020-05-13 07:54:01 -0700 Give piety for reflected missiles -------------------------------------------------------------------------------- 324b75660a | Nicholas Feinberg | 2020-05-13 07:53:46 -0700 Remove plusses from reflect amulets And don't autopickup "reflect. -------------------------------------------------------------------------------- 7b11d65f32 | Nicholas Feinberg | 2020-05-13 07:53:34 -0700 Revert "Remove amulets of reflection" This reverts commit ba0266bf1e409d5e43bea0c429847e88466dc8e7. This reverts commit 1529702659a5f61bd169c12671a9b1601423b43d. This reverts commit c3b2b15ad0812eb4e36560da048408bb64a9e613. -------------------------------------------------------------------------------- aaade9b9bd | Aidan Holm | 2020-05-13 20:40:30 +0800 Deduplicate weird monster type compatibility stuff -------------------------------------------------------------------------------- 97b10b9113 | Aidan Holm | 2020-05-13 20:40:28 +0800 Marshall all monster_type enums as uints This commit adds marshallMonType() for clarity. Everything else is fairly straight-forward. -------------------------------------------------------------------------------- d8ecb352c1 | Aidan Holm | 2020-05-13 20:40:27 +0800 Remove future code for marshalling monster types as shorts It's better to keep it as wide as possible, and rely on compression to reduce space usage. There's still inconsistency in how these are marshalled, but that's fixable with a minor tag bump. -------------------------------------------------------------------------------- 0139687f70 | Aidan Holm | 2020-05-13 20:40:25 +0800 Reorganize code This mostly separates the unmarshalling and the conditional genus stuff. -------------------------------------------------------------------------------- cb8d101f20 | gammafunk | 2020-05-13 01:41:21 -0500 Don't recolor statues next to damaging walls Granite statues near slimy and icy walls currently get recolored, but this doesn't make much sense, as the player can't move onto a statue. It also might mislead the player into thinking that standing next to these statues could damage them. Remove this recoloring, and also remove redundant tests for water and lava that's covered by earlier code. -------------------------------------------------------------------------------- 2efb326896 | advil | 2020-05-13 00:19:43 -0400 Revert "Disable travis notifications" This reverts commit 7f99b00658a4a79e6f92efb2b346077bf0ed5dbd. -------------------------------------------------------------------------------- 54a0b94bec | advil | 2020-05-13 00:18:50 -0400 Temporarily disable make test test pending further ... testing -------------------------------------------------------------------------------- 3431438f80 | advil | 2020-05-13 00:04:04 -0400 Run test in correct directory -------------------------------------------------------------------------------- e6544eeaff | advil | 2020-05-12 23:47:11 -0400 ... -------------------------------------------------------------------------------- 5e67357dd7 | advil | 2020-05-12 23:43:23 -0400 Try to make actions run `make test` no idea if this is the right syntax -------------------------------------------------------------------------------- cc65eb46a3 | Edgar A. Bering IV | 2020-05-12 22:42:46 -0400 Remove another too clever fallthrough in makeitem.cc This is to fix an immediate crash; refactoring this function should be high on the code cleanup todo. -------------------------------------------------------------------------------- 88e6ef3a42 | advil | 2020-05-12 21:02:56 -0400 Update makeitem.cc Stealth is the main issue that I see; there may be other things going on here though (I think this function has gotten a bit too clever with the fallthroughs...) -------------------------------------------------------------------------------- c3b2b15ad0 | Edgar A. Bering IV | 2020-05-12 19:42:04 -0400 And a few more -------------------------------------------------------------------------------- 1529702659 | Edgar A. Bering IV | 2020-05-12 19:40:31 -0400 Fix a leftover amulet of reflection -------------------------------------------------------------------------------- ac2cbc2f56 | Edgar A. Bering IV | 2020-05-12 18:55:35 -0400 Remove outdated amulet descriptions from translations These files could use further pruning for removed items. -------------------------------------------------------------------------------- 459fc583a1 | Edgar A. Bering IV | 2020-05-12 18:55:35 -0400 Remove amulets of Rage The remaining evocable active amulet, they no longer fit with the remainder of the amulet slot. Lacking a swap penalty, an amulet of rage can be swapped to by a character using a different amulet's effect when it's not needed if berserk can finish an encounter, since most current amulets swap penalties come on activation, not removal. Berserk is a powerful effect, unlimited berserk more powerful still, so I don't see a desparate need to move +Rage to a scarf. In doing so, +Berserk artefacts and Trog become a bit more special. -------------------------------------------------------------------------------- ba0266bf1e | Edgar A. Bering IV | 2020-05-12 18:55:35 -0400 Remove amulets of reflection A small plus to SH and the reflection property was a minor boost in most cases and easily outshone. Newer players enjoy the satisfaction of the reflection ego but to a point where it becomes a newbie trap: they'll take reflection over much stronger (though more subtle) amulets. They also suffer from a tedious-optimality: it's technically always good to carry one when possible while using an amulet of guardian spirit, and swap to it should your MP pool empty; or when using an amulet of rage. The previous amulet reform aimed to make the amulet slot one that the player commits to well in advance of a given fight, but the presence of a slew of older amulets hampered that goal. -------------------------------------------------------------------------------- ca3883d1df | Edgar A. Bering IV | 2020-05-12 18:55:35 -0400 Remove amulets of the gourmand With the food simplification over the years, lax food clock in general, and much stronger amulets its time to put this one to rest. -------------------------------------------------------------------------------- 8a86455914 | Edgar A. Bering IV | 2020-05-12 18:55:35 -0400 Allow Harm on randart armour Harm works as an armour property because armour swapping delay requires that a player commit to the harm effect tactically. Previously support for Harm as an artefact property was added, but set not to generate at the time and had *Drain as a corequisite. -------------------------------------------------------------------------------- 0691371e69 | Edgar A. Bering IV | 2020-05-12 18:55:35 -0400 Remove amulets of harm The previous commit added scarves of harm and explained why Harm wasn't working in the amulet slot. This removes amulets of harm as a follow-up. -------------------------------------------------------------------------------- 19c8d5534f | Edgar A. Bering IV | 2020-05-12 18:55:35 -0400 Add Harm to scarves This adds Harm as an armour ego, without the drain penalty on removal. The Drain penalty was to prevent swapping in urgent situations, but in practice players just ate the skill drain to get out of Harm when escaping. Putting it on an armour slot makes using Harm a much stronger commitment. -------------------------------------------------------------------------------- 6a14d1d4ee | Edgar A. Bering IV | 2020-05-12 18:55:35 -0400 Remove scarves of spirit shield Offering guardian spirit on a different slot in non-unrandart form offered such power combos as spirit+faith and spirit+acrobat at the price of making the scarf ego list overlap with the amulet ego list. With invisibility moved to scarf egos, there are enough scarf egos that this sort of padding isn't needed. -------------------------------------------------------------------------------- 8388af883b | Edgar A. Bering IV | 2020-05-12 18:55:35 -0400 Add preservation (rCorr) and stealth to cloaks The previous commit made the cloak ego list a bit thin. This commit adds preservation and stealth as possible cloak egos. "preservation" is reintroduced as an armour ego ego, but now it is just a name for rCorr (the player-facing name could change, but "cloak of resist corrosion" just doesn't have the same ring). -------------------------------------------------------------------------------- 97dead9f74 | Edgar A. Bering IV | 2020-05-12 18:55:35 -0400 Move invisibility from cloaks to scarves Evocable invisibility is extremely powerful, providing access to a level 6 spell without the associated spellcasting complications. It might still be op on a scarf, but on a scarf it doesn't provide AC as well! -------------------------------------------------------------------------------- f75c35ca80 | Edgar A. Bering IV | 2020-05-12 18:55:35 -0400 Remove scarves of cloud immunity Scarves of cloud immunity were a very niche effect, but the niche was occasionally useful in passing through particular vaults, which led to either stashing or an incentive to carry an otherwise unwanted item "just in case". This did not make for a good armour ego. -------------------------------------------------------------------------------- 6f112fb28d | Edgar A. Bering IV | 2020-05-12 15:25:58 -0400 Further tune down tremorstones Use a smaller step size for the stepdown, return ZAP_TREMORSTONE to being power independent so that damage scaling only comes from the number of stones thrown, and increase the XP recharge timer slightly. -------------------------------------------------------------------------------- 7f99b00658 | advil | 2020-05-12 14:42:37 -0400 Disable travis notifications I think at this point these are fully superseded by gh actions? -------------------------------------------------------------------------------- 61715709bc | Edgar A. Bering IV | 2020-05-12 13:52:33 -0400 Adjust the price of tremorstones They're permanent now, so the cost should reflect that. -------------------------------------------------------------------------------- b4f6ace0b6 | advil | 2020-05-12 13:02:55 -0400 Endless warnings -------------------------------------------------------------------------------- d75fab455a | advil | 2020-05-12 12:49:35 -0400 Fix more warnings for tag_upgrade=true -------------------------------------------------------------------------------- 05ec187f37 | advil | 2020-05-12 12:19:23 -0400 Fix a local tiles error + a few more warnings -------------------------------------------------------------------------------- 21ee38bd74 | advil | 2020-05-12 11:29:48 -0400 Fix some warnings on diverse compilers -------------------------------------------------------------------------------- a90a8e02b8 | advil | 2020-05-12 10:19:15 -0400 One more attempt to get UINT8_MAX from a header on cao/cbro... This reverts commit bfbf38f2cb72dd8d279634e992344898f6fd7b77. -------------------------------------------------------------------------------- f27dea0dad | Aidan Holm | 2020-05-12 21:17:52 +0800 Extract ScissorStack to its own class -------------------------------------------------------------------------------- 4c3fe21bcb | Aidan Holm | 2020-05-12 19:36:22 +0800 Move union/intersect methods to ui::Region class This commit also adds some tests. -------------------------------------------------------------------------------- e6b3a59081 | gammafunk | 2020-05-12 04:56:44 -0500 Update floor for features next to damaging walls (12233) When casting Frozen Ramparts, the floor tiles for features adjacent to icy walls were not updated. This is a problem for habitable features like fountains and open doors, since this indicates to the player that these tiles wouldn't harm a monster. This also applied to slimy walls, although it's less common for the player to see this. Update the packed cell code to properly modify floor tiles. Shallow and deep water are instances where updating floor tiles wouldn't help, since the water tile isn't transparent. We may need to make special "icy water" tile variants to handle this case. -------------------------------------------------------------------------------- 0c75a98c51 | gammafunk | 2020-05-12 04:56:43 -0500 Don't partly override cell cache with global data In d8832a91e, global state was more fully cached in the packed cells later used for Tiles rendering. This included the tile flavor data used to describe floor tiles of features. However the WebTiles code that handles tile flavor was not updated, and it was subsequently overriding the packed cell cache. -------------------------------------------------------------------------------- bfbf38f2cb | advil | 2020-05-12 00:25:02 -0400 Revert "Try 3b to fix compilation on CAO/CBRO" This reverts commit b6211d5327e150baf5cb89c5d09156141fa4ef52. -------------------------------------------------------------------------------- 2f40044526 | advil | 2020-05-12 00:23:27 -0400 Fix another c++11ism that is not working on CAO/CBRO -------------------------------------------------------------------------------- b6211d5327 | advil | 2020-05-12 00:14:20 -0400 Try 3b to fix compilation on CAO/CBRO This reverts commit 227e4c2ee8d22008d1552fa4821231495437bbef. (Try 4 worked, but is awful) -------------------------------------------------------------------------------- 227e4c2ee8 | advil | 2020-05-12 00:00:42 -0400 Fourth(!) try to fix the build on CAO/CBRO not an ideal solution... -------------------------------------------------------------------------------- a314768f3c | advil | 2020-05-11 23:56:55 -0400 Third try to fix the build on CAO/CBRO -------------------------------------------------------------------------------- 7cce4bb545 | advil | 2020-05-11 23:40:27 -0400 Second try to fix the build on CAO/CBRO -------------------------------------------------------------------------------- 5cf8ac06c5 | advil | 2020-05-11 23:35:05 -0400 Try to fix the build on CBRO/CAO -------------------------------------------------------------------------------- 8a05a4ca56 | Alex Jurkiewicz | 2020-05-11 21:07:37 -0400 Simplify 8c1d20324 -------------------------------------------------------------------------------- 8c1d203243 | advil | 2020-05-11 20:35:06 -0400 Make species group order stable across python versions This code would have worked in py3.6 (where dict creation order determines iteration order), but no guarantees in earlier versions. This may fix the species selection hotkey bug. -------------------------------------------------------------------------------- 4819203062 | Byrel Mitchell | 2020-05-11 17:00:58 -0400 Change the comment on max_miscast_damage to match the new miscast damage calculation. The actual math in this function was updated to calculate the max miscast damage properly, but the comment was incorrect. -------------------------------------------------------------------------------- ac5a30bc78 | advil | 2020-05-11 16:48:33 -0400 Allow clicking outside chat window to defocus focus-trap has a setting that is supposed to do this, but getting it to work ran up against what I think is a bug in focus-trap, where the returnFocusOnDeactivate setting isn't respected when the new target isn't clickable (https://github.com/davidtheclark/focus-trap/issues/103). The boolean expression here is a bit ugly, but I did it that way as a minimal change from the original logic. I have only a somewhat vague understanding overall of what is going on with focus in this library, so I hope that this doesn't have further side-effects. This library seems to be unmaintained now, I wonder if there are any alternatives to consider instead? Hopefully resolves #1243 -------------------------------------------------------------------------------- 3a3e078c59 | advil | 2020-05-11 12:58:32 -0400 Apply location effects *after* temp changing a feature ea32a606ab reordered things so that location effects were applied to monsters as a side effect before the temporary feature change took effect, i.e. using the about-to-be-replaced feature value. Aside from not applying any effects of the new feature type to a monster on the position, this caused weird things like a water nymph standing on a trap and temporarily flooding it to trigger that trap on the temporary terrain change. Some example crashes: http://crawl.berotato.org/crawl/morgue/ardl/crash-ardl-20191231-234514.txt http://crawl.akrasiac.org/rawdata/elzilcho/crash-elzilcho-20190927-225210.txt (The crash is when the terrain change reverts, and the shaft's trap info is gone.) This commit partially reverts ea32a606ab (sorry) but keeps the wall check in a more direct way. -------------------------------------------------------------------------------- 6ca9d89ac5 | advil | 2020-05-11 11:01:33 -0400 Fix a usk grand finale crash (12248) The flying chunks do damage, which can cause the original target to be dead by the time the monster_die call comes around. -------------------------------------------------------------------------------- 31286d223f | Aidan Holm | 2020-05-11 19:20:17 +0800 Fix unordered_map<> on Mac OS -------------------------------------------------------------------------------- 27f2bdb7b0 | Aidan Holm | 2020-05-11 18:41:57 +0800 Replace map<> with unordered_map<> If there's no ordering requirement, unordered_map is a better choice; it's more efficient (hash table instead of tree structure) and better documents the nature of the data. -------------------------------------------------------------------------------- ac5e0fa705 | Alex Jurkiewicz | 2020-05-11 01:55:09 -0400 Clean up notification logic After 4617b1041b and c6157ca552. -------------------------------------------------------------------------------- f0b061a3c0 | Alex Jurkiewicz | 2020-05-11 01:55:09 -0400 Remove BUILD_ALL CI config macOS and MingW builds already build submodules, so this job was redundant (and didn't work anyway). -------------------------------------------------------------------------------- 10a8c3caa8 | advil | 2020-05-10 21:41:15 -0400 Normalize @pronoun_possessive@ to @possessive@ to match do_mon_str_replacements -------------------------------------------------------------------------------- d106ae698d | advil | 2020-05-10 21:41:15 -0400 Fix spelling of @pronoun_possessive@ (u/bobloblawblogger) This was ... spelled wrong in every instance. -------------------------------------------------------------------------------- edaaef979a | Quipyowert2 | 2020-05-10 21:32:49 -0400 Fix signed/unsigned int format mismatch (%d vs %u) Fixes the following Cppcheck errors: [crawl-ref/source/rltiles/tool/tile_list_processor.cc:1006] (warning) %d in format string (no. 3) requires 'int' but the argument type is 'unsigned int'. [invalidPrintfArgType_sint] [crawl-ref/source/rltiles/tool/tile_list_processor.cc:1166] (warning) %d in format string (no. 1) requires 'int' but the argument type is 'unsigned int'. [invalidPrintfArgType_sint] [crawl-ref/source/rltiles/tool/tile_list_processor.cc:1180] (warning) %d in format string (no. 1) requires 'int' but the argument type is 'unsigned int'. [invalidPrintfArgType_sint] [crawl-ref/source/rltiles/tool/tile_list_processor.cc:1201] (warning) %d in format string (no. 2) requires 'int' but the argument type is 'unsigned int'. [invalidPrintfArgType_sint] [crawl-ref/source/rltiles/tool/tile_list_processor.cc:1260] (warning) %u in format string (no. 1) requires 'unsigned int' but the argument type is 'signed int'. [invalidPrintfArgType_uint] [crawl-ref/source/rltiles/tool/tile_list_processor.cc:1338] (warning) %d in format string (no. 1) requires 'int' but the argument type is 'unsigned int'. [invalidPrintfArgType_sint] [crawl-ref/source/rltiles/tool/tile_list_processor.cc:1624] (warning) %d in format string (no. 2) requires 'int' but the argument type is 'unsigned int'. [invalidPrintfArgType_sint] -------------------------------------------------------------------------------- 47ef49afec | Edgar A. Bering IV | 2020-05-10 19:12:40 -0400 Further revise tremorstones Tone down the damage. Using the old scattershot formula directly for the number of explosions was way too good. Further, convert them to an xp evoker with three charges and an xp debt between that of the lightning rod and the one-charge evokers. -------------------------------------------------------------------------------- 6a45855626 | Edgar A. Bering IV | 2020-05-10 19:00:42 -0400 Extract XP Evoker properties to data This commit is not strictly necessary at present, but will ease the conversion of other evokers and wands to an XP-charge model in the future. -------------------------------------------------------------------------------- bcf8c60d55 | Edgar A. Bering IV | 2020-05-10 17:46:03 -0400 Find a lost unary minus (#1395) Closes #1395 -------------------------------------------------------------------------------- 3a27ba4f8a | advil | 2020-05-10 15:18:06 -0400 More lugonu corrupt flavor tweaks * add recoloring for stone walls, metal walls. Still subject to the "resistance" check for these types. Added a few more metal wall colors, which are relatively subtle. Use existing stone tiles. This won't work with some variants, e.g. the vaults stone tiles. * add recoloring for trees; don't add new tree colors, just use dead trees as a fallback. * chance to get flavor-only corruption for tiles within los that didn't get real corruption. * add a 20% chance for floor tiles to be magenta no matter what. This isn't abyss-themed per se but I chose it because it matches the color of the corruption flash. It remains possible that some of this will need to be toned down again? -------------------------------------------------------------------------------- 7e5784328a | advil | 2020-05-10 15:18:06 -0400 Remove an old debug dprf -------------------------------------------------------------------------------- 64580d555a | advil | 2020-05-10 15:18:06 -0400 Fix a local tiles crash with removed wands Would crash on monster tooltip with a wand that had a removed spell. -------------------------------------------------------------------------------- abcb65df2b | advil | 2020-05-10 15:18:06 -0400 Adjust lugonu corrupt flavor In 2f88dcd080dc11, lugonu corrupt was changed to be localized with 100%-30% chance to corrupt inside los. Perhaps accidentally (not sure), there was a flat 1% chance to corrupt any square outside LOS. This was very slightly flavorful. This commit makes two adjustments: (i) it adds a linear chance to corrupt tile flavor only outside the immediate radius, making it much easier to see across the level that corruption has happened, and (ii) it uses fixed point math to have smoother percentage values in general. It's possible that I've gone too far and the outside-los chance could use some toning down? -------------------------------------------------------------------------------- 211953ec74 | advil | 2020-05-10 15:18:06 -0400 Fix a theoretical terrain change crash I can't replicate this, but the previous implementation should be able to crash in the following way: if there are two terrain changes of the same type on a single position (something that is possible in principle), then reverting the terrain changes at that position would delete all markers associated with that position at once. Then, the iterator over markers will have a deleted marker in its future. Instead, save up all positions with markers to be reverted, and do them last by position, outside of the marker iteration. I *think* this might be able to happen in complicated circumstances involving water nymphs over stairways and lugonu corrupt. But, that is just a theory. -------------------------------------------------------------------------------- bd17af9716 | Aidan Holm | 2020-05-11 00:16:07 +0800 Add test for map view cursor clamping -------------------------------------------------------------------------------- 5a1f09014c | Aidan Holm | 2020-05-11 00:04:46 +0800 Fix ugly code Makes it easier to read. -------------------------------------------------------------------------------- baf2e0d10d | Aidan Holm | 2020-05-11 00:04:46 +0800 Remove duplication -------------------------------------------------------------------------------- 26bcaaf216 | Alex Jurkiewicz | 2020-05-10 22:29:06 +0800 Fix CI ccache caching Current runs are giving the following error during the "post cache compilation" step: Post job cleanup. /bin/tar -cz -f /home/runner/work/_temp/17c1f8fd-a821-43cb-a606-fc036b1b78dc/cache.tgz -C /home/runner/work/crawl/crawl/$HOME/.ccache . /bin/tar: /home/runner/work/crawl/crawl/$HOME/.ccache: Cannot open: No such file or directory /bin/tar: Error is not recoverable: exiting now [warning]Tar failed with error: The process '/bin/tar' failed with exit code 2 It seems like environment variables are not supported. However, examples in the actions/cache repo show use of `~`, so we can use that instead: https://github.com/actions/cache/blob/master/examples.md#python---pip -------------------------------------------------------------------------------- ca090100c3 | advil | 2020-05-09 22:10:13 -0400 Fix map view console cursor clamping Missing negation in ca36f614e. For various reasons, this issue only came up for extremely wide/tall maps in console, so was a hard bug to spot, but it was instantiated by sprint_mu. On this map, when fully explored (e.g. via `&{`) the effect was to let the cursor move off screen in map/`X` view. -------------------------------------------------------------------------------- 01c183ff00 | advil | 2020-05-09 21:09:59 -0400 Fix an iterator validity issue in sprint_mu (12192) When the door property called its veto check and removed the marker, that invalidated the iterator used in map_markers::property_at, leading to a crash. I think this code has been broken for ~ 6 years? (The previous version used a const iterator that I think would be resilient to this.) -------------------------------------------------------------------------------- 0adbbaad2a | advil | 2020-05-09 16:38:49 -0400 Fully sync player on webtiles load (12117) To determine what values to sync, all the `_update_blah` calls require that the initial values it is provided with are already in sync with the webtiles server (they only sync changes unless forced). However, the player_info class does not initialize most of its values, and the first instance of _send_player would typically be triggered on a redraw, which does not force sync. So when the on-load player_info value of some setting matched its initial value (which is undefined / up to the mercy of the compiler), that value would not get synced until it changed, or a spectator connected. This commit ensures that the first instance of _send_player is always a force sync, i.e. sends every value. There are other ways of fixing this but this one seemed like it would be reasonably safe. This was manifesting in a very specific way in 12117, where a quiver item on the `a` slot translated to a value 0, which in several build settings turns out to be what an uninitialized uint8 gets set to -- leading to the quiver value not getting synced in this one specific case. However, I wouldn't be surprised if there were other small effects. This issue might conceivably arise for other initial sync things; it makes me wonder why we call _send_everything for spectators but not ever for the player? -------------------------------------------------------------------------------- c08aec66eb | Edgar A. Bering IV | 2020-05-09 14:45:14 -0400 Unstack tremorstones and make them indestructible Is this another circle on the merry-go-round of "damaging purple evocable that also does self damage" a la tome of destruction and disc of storms? Time will tell. Tremorstones' effect is much simpler than the two mentioned items: randomized but possible to reason about without consulting a spoiler for the chart of switch statement cases. Now that tremorstones don't have a targeter and scale with evocations, its important to give the player an opportunity to get a feel for the self damage. The self-damage also tactically limits the effect without contributing to power spiral in the same way as a consumable. Because the effect scales with evocations, there is a strategic cost in getting greater benefit from tremorstones. For all of these reasons, making them consumable no longer fits. If the self-damage is not enough of a brake against spamming, XP-based charges can be added. (Indeed, moving all evocables to XP-charging would be a good idea to help with power-spiral, but it's too close to 0.25 to do that now.) -------------------------------------------------------------------------------- 4617b1041b | advil | 2020-05-09 08:44:48 -0400 Probably actually don't message on every push -------------------------------------------------------------------------------- c6157ca552 | advil | 2020-05-09 08:39:55 -0400 I'm gonna veto this one, sorry -------------------------------------------------------------------------------- 94ad2f9d5a | Aidan Holm | 2020-05-09 20:17:17 +0800 Split compass choosing out of directn.cc This commit splits compass choosing out of the main direction choosing class. This leaves direction_chooser with only one UI loop, making it more amenable to converting to a widget-based approach. This new function also contains a UI loop, but it's much smaller. It's also possible I will temporarily remove the mouse features during conversion, since it's fairly low-impact. -------------------------------------------------------------------------------- f7bcf9115c | Alex Jurkiewicz | 2020-05-09 20:01:44 +0800 Notify IRC for every build result -------------------------------------------------------------------------------- 2fbec62c1c | Aidan Holm | 2020-05-09 18:55:49 +0800 Consolidate directn shadow-step check I don't entirely understand this code, but the way the 'main loop' is set up, the target is always changed through set_target() before any key input will be processed; so there should be no change to valid_shadow_step between when it is set and when it is checked. This means that this shadow step code can be moved together. This makes the set_target() method very simple (and ready for removal), and it gets rid of a bit of state on direction_chooser. -------------------------------------------------------------------------------- fd92ea8195 | Aidan Holm | 2020-05-09 18:29:46 +0800 Split directn command handling into separate method -------------------------------------------------------------------------------- 49e72149f4 | Aidan Holm | 2020-05-09 17:01:31 +0800 Remove direction chooser show_items_once feature This didn't seem to be making any difference in how the direction chooser was being displayed. -------------------------------------------------------------------------------- 07f64c5e97 | Aidan Holm | 2020-05-09 17:01:31 +0800 Remove switch fallthroughs -------------------------------------------------------------------------------- 8ea86301a3 | Aidan Holm | 2020-05-09 17:01:31 +0800 Decouple key input from targeting_behaviour targeting_behaviour has absolutely no business getting user input directly; it should only encapsulate behaviour for a given targeter. How a given targeter responds to a given key event (i.e. the mapping of a key to a command) is fair game, but how that key event is received is not. This was never used in practice, thankfully. This will allow refactoring the direction chooser view with widgets, and also permit testing individual targeting behaviours, since they're no longer so tightly coupled to the input system. -------------------------------------------------------------------------------- d28c3ca9de | Alex Jurkiewicz | 2020-05-09 16:58:33 +0800 Include coverage of catch2 files in coverage tracking Filtering these files out is very slow (takes nearly 20mins), and it's arguably the wrong thing to do anyway. -------------------------------------------------------------------------------- bc0df25834 | Alex Jurkiewicz | 2020-05-09 16:58:31 +0800 Add build failure notification -------------------------------------------------------------------------------- d920e8e91e | Alex Jurkiewicz | 2020-05-09 16:56:46 +0800 Add a CI job for BUILD_ALL=1 -------------------------------------------------------------------------------- ebd775692e | Aidan Holm | 2020-05-09 14:47:02 +0800 Add key_recorder_raii helper class -------------------------------------------------------------------------------- cae8493d64 | Aidan Holm | 2020-05-09 13:14:17 +0800 Extract function and add tests Noticed this one while checking set_max_size(). -------------------------------------------------------------------------------- 80a8f0c930 | Edgar A. Bering IV | 2020-05-08 21:35:26 -0400 Add optional player-relative coordinates to the Monster/Item view This was requested as an accessibility feature for players using screen readers, as the ^x screen is much easier for them to use. This treats the up direction as positive y, even though crawl's grid uses screen coordinates. However, a standard right-handed cartesian coordinate system is more familiar to most users who are not graphics programmers, so the minus sign is worth it. -------------------------------------------------------------------------------- 522354d0d9 | Edgar A. Bering IV | 2020-05-08 18:55:00 -0400 Make "Leech" a sloppy eater (tylertfb) A cosmetic addition: strong hits with Leech occasionally turn monsters into large blood explosions. -------------------------------------------------------------------------------- 74ed164fb1 | Edgar A. Bering IV | 2020-05-08 17:49:59 -0400 Remove wands of scattershot The revised tremorstone provides a simillar level of access to evocable BEAM_FRAG damage with a more interesting targeter (one more cone targeter removed!) and mechanic compared to "yet another damaging wand". -------------------------------------------------------------------------------- 39b54811f6 | Edgar A. Bering IV | 2020-05-08 17:49:59 -0400 Revise tremorstones Tremorstones were in an awkward place; the lack of scaling meant that tremorstones didn't remain relevant. The rarity and AC requirement meant that few players would find them at a time when they were relevant and could use them. Additionaly, tremorstones introduced yet another targeter to crawl at a time when we're trying to move away from targeting. This commit resolves the issues above by: 1. Scaling tremorstones with evocations. This is done by scaling the number of explosions according to the same formula as scattershot beams, and scaling the damage of each explosion (lightly) with power. 2. Manual targeting is removed and replaced by centering the tremorstones at a point distance 3 from the player closest to the center-of-mass of monsters in LOS (including invisible monsters, with ties broken randomly). This is flavored as magnetic attraction. The specific explosions are then fuzzed according to the existing tremorstone fuzzing, so the player retains a chance of getting hit. -------------------------------------------------------------------------------- acf03c893f | Edgar A. Bering IV | 2020-05-08 17:47:22 -0400 Display monster statuses in ^x This provides greater accessibility to screen-reader players and an overview elaboration for players who see "…)" in an entry on the console monster list. This display is also added to webtiles; while the icons do duplicate this information, the purpose of ^x is to be clarifying, so the information is spelled out. -------------------------------------------------------------------------------- 201186dcf8 | Edgar A. Bering IV | 2020-05-08 17:47:03 -0400 Truncate monster status info cleanly in the console HUD Instead of just chopping the string to length, chop a little short and write "…)" so the player knows there's more going on and they should consult ^x. -------------------------------------------------------------------------------- bfd0dbb5ba | Edgar A. Bering IV | 2020-05-08 17:46:56 -0400 Display wands in the monster info pane (damerell) Inspired by Stoat Soup 063ee9f9 "Add "wand" status (ebering)". -------------------------------------------------------------------------------- dc7eba7276 | Edgar A. Bering IV | 2020-05-08 17:46:56 -0400 Refactor monster_info::attributes Move monster info flag names to their own data header, convert them to a vector of player priorities for display, and re-factor the attributes method and its clients to take advantage of these new names. -------------------------------------------------------------------------------- 8d0d4bad7c | Edgar A. Bering IV | 2020-05-08 17:46:56 -0400 Refactor mons_condition_string The previous commit introduced some new architecture, but had extra logic woven in that isn't needed (the newcondition/listall boolean parameter was only false when writing a description of the scene in the chardump, but it's fine to be verbose there). This commit simplifies the "vector of structs with boolean test functions" to a map from monster_info_flags to their singular and plural display names. A subsequent commit will refactor monster_info::atributes() to use the new structure to unify the two description lines. -------------------------------------------------------------------------------- ee693632f7 | David Damerell | 2020-05-08 17:44:56 -0400 Add additional functionality to console monster list The monster list now provides information even if more than one monster of a given type is visible, can tell you more than one thing about monsters, and indicates many more statuses, most importantly whether monsters are wielding polearms or missile launchers. The additional statuses have been added in an ordering that tries to follow the original; buffs like berserk first, then incapaciting conditions like paralysis, then maluses, then largely informational material like that a monster is invisible when you have SInv. Providing this information in the console HUD brings console closer to informational parity with tiles, where this information is communicated by monster sprites and status icons. [ Committer's note: Closes #979. Subsequent commits refactor and further extend this functionality. ] -------------------------------------------------------------------------------- 8218859876 | advil | 2020-05-08 15:49:50 -0400 missed one -------------------------------------------------------------------------------- 9b6a17f00c | advil | 2020-05-08 15:09:57 -0400 Don't let abyss xp stairs overwrite exits For some reason, DNGN_EXIT_ABYSS is not a stair, and not even a branch exit technically. I suspect another past source of UI confusion with xp exits was that a player could overwrite an xp-generated exit with down stairs by fighting more, and then never get another exit. (Whereas an exit could not overwrite a stairway, though that wouldn't have come up.) This also prevents xp exits from overwriting a few other things, such as transporters. It could be worth giving a message past the xp threshold in order to cue the player that they need to move if they want something to generate? -------------------------------------------------------------------------------- e06654808c | advil | 2020-05-08 14:55:46 -0400 Try to fix cross-compiling -------------------------------------------------------------------------------- eaa01bc6cc | advil | 2020-05-08 14:26:37 -0400 Give a chance for more than one abyss xp exit to spawn The fact that the first one is an exit, and everything after that is guaranteed to be a downstair, is very confusing to players / spoilery. (At an extreme, I've seen multiple reports over time of players thinking each time the stairs generated that they simply got unlucky, and continuing to fight to generate more, sometimes over and over again. Worst for qazlal players.) This commit changes things so that after the initial exit, there's a 50% chance for downstairs vs exit. The xp ramp continues until you exit the abyss. I considered other possibilities that were less of a change like resetting the bool on level change, but they were somewhat spoilery too. I don't think there's a balancing issue here, but if anyone else does, to get closer to the previous behavior you could adjust the probabilities as the XP threshold for spawning increases. -------------------------------------------------------------------------------- 1b96fe49b6 | advil | 2020-05-08 13:33:45 -0400 Standardize conditions for including unistd.h The immediate target of this is a report of compilation failure on freebsd, but I noticed that we are all over the place in how this is conditioned. Because several of these were non-windows defines, it's possible that this could break compilation on obscure/non-supported build targets like hurd(!). Probably this should be some kind of actual posix check... -------------------------------------------------------------------------------- ab8558aff4 | advil | 2020-05-08 11:42:06 -0400 Generalize b977e01cb5bc to other penetration crashes This guarantees that a ranged attack will be attempted for penetration weapons regardless of the state of the agent. In b977e01cb5bc I used YOU_FAULTLESS as the agent for cases where reflection kills the agent, and this commit generalizes this to use YOU_FAULTLESS for all cases where the agent is gone. This is conceptually odd, but better than crashing; and I think it is more consistent behavior than alternatives like causing the penetration attack to stop at that point, or letting it continue without damaging anything. -------------------------------------------------------------------------------- ccb83ce0d9 | Benoit Giannangeli | 2020-05-08 11:31:10 -0400 New morgue section `screenshots` Notes can have an associated screenshot. For now only user notes take screenshots. They are printed out in the `screenshots` section of the morgue. A one-screenshot per turn limit is enforced. [ Committer's note: tweaked for smooth forward upgrade compatibility. Squashed an rebased. Closes #1119 ] -------------------------------------------------------------------------------- 12724d6e4b | Aidan Holm | 2020-05-08 23:20:45 +0800 Make CrawlVector::pop_back() return void (#12220) It's returning a reference to a value that was just removed. This doesn't appear to be used anywhere, so let's just remove it entirely. -------------------------------------------------------------------------------- 0d6008aee3 | Aidan Holm | 2020-05-08 23:20:45 +0800 Fix warnings These functions aren't used at all on local tiles. -------------------------------------------------------------------------------- 7446190586 | Goratrix | 2020-05-08 11:00:08 -0400 Fix gitignore for windows packages Change to wildcard matching, also add the exe, which is already excluded elsewhere with *.exe, but should be also here for consistency. -------------------------------------------------------------------------------- 94bac08340 | Aidan Holm | 2020-05-08 21:39:53 +0800 Remove DEBUG_PANE_BOUNDS Removing because (1) we're trying to eliminate all ad-hoc scribbling on the screen, (2) it should be the render system's job to provide this sort of layout debugging feature (and it does provide it, for local tiles at least), (3) this probably hasn't been used in a long time, and (4) if using this was necessary, use of a debugger would probably be necessary to, so just using the debugger itself is probably easier. -------------------------------------------------------------------------------- 5a86851f4e | Aidan Holm | 2020-05-08 21:36:23 +0800 Show names of removed monsters -------------------------------------------------------------------------------- 2c54f16f28 | Aidan Holm | 2020-05-08 21:36:22 +0800 Remove dead monster code -------------------------------------------------------------------------------- b124a90d0f | Aidan Holm | 2020-05-08 21:36:20 +0800 Add some basic tests -------------------------------------------------------------------------------- ba654730c8 | Aidan Holm | 2020-05-08 21:36:19 +0800 Re-sync axed / removed monsters -------------------------------------------------------------------------------- dd2af9e06e | advil | 2020-05-07 10:29:07 -0400 Fix a bunch of basic errors with TOUCH_UI builds No guarantees that this actually, y'know, works, but it now compiles and lets me resolve #1371. We should probably figure out some way of either supporting this code a bit better or dropping it? Are there still any downstream consumers of TOUCH_UI=y builds? -------------------------------------------------------------------------------- 643b649470 | gammafunk | 2020-05-07 06:25:57 -0500 Correct a unit test function call doh! -------------------------------------------------------------------------------- c7cb02f774 | gammafunk | 2020-05-07 06:06:30 -0500 Make a map function non-static This one is needed for unit tests. -------------------------------------------------------------------------------- 6709f3f1ee | gammafunk | 2020-05-07 05:25:26 -0500 Properly declare some map functions as static -------------------------------------------------------------------------------- ec7a518341 | gammafunk | 2020-05-07 05:24:59 -0500 Declare some tags functions in tags.h These functions are now integrated into unit tests, hence must be non-static. Before this commit, they lacked declarations in tags.cc itself and had declarations in a unit test file, but this generated compilation warnings for tags.cc. Per discussion with aidanh, it's probably a good thing if the unit tests are forcing things that need to be tested to have header declarations, since it helps clarify program structure. So we move the required functions' declarations to tags.h and remove the duplicate declaration from the unit test files. -------------------------------------------------------------------------------- 8d059310dc | gammafunk | 2020-05-07 05:02:06 -0500 Rename some static tag helper functions These static functions are renamed to follow the leading underscore convention we use in the rest of the codebase. -------------------------------------------------------------------------------- 2f7e29601a | gammafunk | 2020-05-07 04:55:13 -0500 Remove a spurious semicolon -------------------------------------------------------------------------------- 87a53962fc | advil | 2020-05-05 17:44:07 -0400 Add a hacky way of counting monster spells to removedness script (gammafunk) -------------------------------------------------------------------------------- 40c2d6565b | advil | 2020-05-05 17:21:27 -0400 Script to assess removedness I became interested in the question of how much, quantitatively, gets removed and added from each vesrion. This script is able to provide counts for various kinds of things (species, branches, spells, item types) in crawl and will work on versions going back to 0.3 (with a few caveats before around 0.10). -------------------------------------------------------------------------------- c6eaff51cc | Nikolai Lavsky | 2020-05-05 00:53:25 -0400 Update the options guide This commit updates examples, removes mentions of obsolete items and spells, and fixes some typos. Also, it adds missing entries into TOC and reorders options in TOC so they match the order of the descriptions. -------------------------------------------------------------------------------- 1e880d33e3 | Aidan Holm | 2020-05-04 23:19:39 +0800 Fix show_map() sometimes falsely choosing target (#12250) This was caused by an uninitialized variable. -------------------------------------------------------------------------------- ad7ffe8aff | Quipyowert2 | 2020-05-04 21:37:01 +0800 Fix resource leak if allocating PNG structs fails. Cppcheck complains "Resource leak: fp" at lines 254 and 260 where the function write_png returns on error without closing the file opened at the beginning of the function. After write_png returns, the file would still be open, but the pointer to it has been lost. Cppcheck errors: [crawl-ref/source/rltiles/tool/tile_colour.cc:254] (error) Resource leak: fp [resourceLeak] [crawl-ref/source/rltiles/tool/tile_colour.cc:260] (error) Resource leak: fp [resourceLeak] -------------------------------------------------------------------------------- cfae464cf3 | gammafunk | 2020-05-03 21:35:43 -0500 Remove special flag from the Sceptre of Torment This flag prevents monsters from using the weapon and additionally prevents its use with spectral weapon. There's no particular reason to disallow monster usage, since although it would harm other hostile monsters nearby, it's also very effective at tormenting and damaging the player! Additionally this flag prevented use of this weapon with spectral weapon even for undead species who would actually want to use it, due to their torment immunity. -------------------------------------------------------------------------------- cfa9253478 | advil | 2020-05-03 22:19:15 -0400 Fix a pronoun case This got moved around in editing and the case didn't follow. -------------------------------------------------------------------------------- a522a9f31c | advil | 2020-05-03 22:02:33 -0400 Fix description of what happens when attacking summons Since 3db639d1 it has been, from the user's perspective, impossible to kill most friendly summons -- they are simply dismissed on an any damage or other annoyance. This is particularly important for something like lightning spire where dismissing the summon may be tactically useful. So, improve the description in an attempt to make it clearer what will happen if you anger such a summon. -------------------------------------------------------------------------------- 041635d5d1 | Edgar A. Bering IV | 2020-05-03 17:14:05 -0400 Reduce the delay before an eldritch tentacle enters The previous delay was set after the old out-of-los attacking behavior had been accepted and chosen with the old behavior in mind. Now that the player must stick around for the tentable to work, bringing it out in 1-2 turns instead of 2-4 is appropriate. This also increases the threat of Zot-trap opened gateways. -------------------------------------------------------------------------------- f879fa1a08 | Edgar A. Bering IV | 2020-05-03 17:06:59 -0400 Improve foxfire and ball lightning target acquisition (Lici the Crawler) Create foxfires and ball lightnings with autofoes, so they come into existence targeting something the player can see; this is partly for better player interface and partly to prevent an information leak. Also prevent them from using their ability if the only target is out of player los. Again, both for preventing out-of-los attacks (foxfire already didn't do damage out of los) and information leaks. -------------------------------------------------------------------------------- 27cb841e23 | Edgar A. Bering IV | 2020-05-03 14:49:49 -0400 Prevent Eldritch Tentacles from attacking out of LOS The summon-los-restriction dates to a9662255 in 2012. The commit message seems like this is intended to apply to all summons; however, eldritch tentacles are created with an abjuration duration of 0, so the code introduced at that time did not apply the restriction to them. Four years later, in 2016, the restriction was added to FAKE_ABJRATION allies. This too did not contrain the tentacle, which is timed out with ENCH_PORTAL_PACIFIED. In the 8 years since a9662255 this oversight or bug has become an accepted quirk of the spell and not treated like a bug. It is also a source of out-of-los attacks of the kind we intentionally prevent. So, in a long overdue commit this finally constrains malign gateways to not attacking out of LOS. -------------------------------------------------------------------------------- 5a33db65c3 | Edgar A. Bering IV | 2020-05-03 14:49:49 -0400 Remove targeting from Summon Lightning Spire SLS creates a tough, immobile ally that the player can manouver around to gain maximum benefit from. However, the initial placement was targeted, which provided a way to gain maximum benefit with no cost other than the invested MP. Removing the targeted construction is a nerf. It is also in-line with the guiding ideas behind positional magic: that tactical benefits from spells should be gained by movement rather than targeting. The strength of an optimally positioned spire remains the same, but the cost of obtaining that position now includes some amount of movement instead of only MP and targeting time. -------------------------------------------------------------------------------- 9f5dfa9815 | Alex Jurkiewicz | 2020-05-03 10:23:06 +0800 Set auto_butcher_max_chunks default to 10 -------------------------------------------------------------------------------- d22f3de0d2 | Alex Jurkiewicz | 2020-05-03 10:23:06 +0800 Change auto_butcher default to always Previously the default was to only butcher when very hungry. Since butchering is so low cost, it doesn't really make sense to limit how much butchering is done by default. Expert players who use animate dead and auto explore might prefer another value for this setting, as would players using auto explore but optimising for turncount(?!) and some other use-cases. But those players should be able to change this setting in their RC file easily enough. -------------------------------------------------------------------------------- 2618fe8269 | Alex Jurkiewicz | 2020-05-03 10:23:06 +0800 Change explore_auto_rest default to true For new players, it's a much better experience for this option to be enabled, to prevent accidentally auto-exploring at low HP into an orc priest or similar. Players aiming to maximise score will want to disable this, and potentially also Ghoul/Troll characters (although it's not a major issue past the first couple of floors). But on the whole, enabling by default seems to improve more games. -------------------------------------------------------------------------------- 39f137c8b7 | Edgar A. Bering IV | 2020-05-02 17:56:55 -0400 Prevent inadvertent opening of ebering_ghost_funeral_grove (#1077) In Swamp this vault blends in and a player might fireball it open not realizing it's a ghost vault. Monster tornado is highly unlikely to interact with this vault (but might as a rare Zot trap effect or if somehow an air elemental comes in), but again preventing inadvertent opening is important for the depth of this ghost vault. [ Closes #1077 ] -------------------------------------------------------------------------------- 3419481e97 | Edgar A. Bering IV | 2020-05-02 17:56:55 -0400 Don't pain bond friendly and neutral monsters (#1204) Pain bond is flavored as an "emotional response to pain", but monsters with different alignments have no positive feelings for one another. The edge case is surprising and puts a strange disincentive on fighting certain uniques which lead to neutral mosnters existing. [ Close #1204 ] -------------------------------------------------------------------------------- f7cfe1fbb0 | Edgar A. Bering IV | 2020-05-02 17:56:55 -0400 Allow monsters to place on traps (#1283) Traps are triggered by moving into them. Forbidding monster placement on traps dates back to a simulationist restriction on monsters placing on teleport traps. The restriction that traps only fire in sight of the player means we've given up on that illusion. The code comment indicates the restriction was to be limited to teleport traps, but in actuality applied to all traps, leading to frustrations with animate dead in spider and unexpected limitations on summoning. Restricting to a special case just for translocational traps seemed unnecessarily complicated, so this commit permits placement on all traps. [ Closes #1283 ] -------------------------------------------------------------------------------- 31946683ed | sdynet | 2020-05-02 17:56:55 -0400 Improve the Cloud card The old cloud card produces clouds that damage the enemy. This effect is more suitable for deck of destruction. The new effect creates black smoke that blocks vision instead of damaging enemy. This effect differs from fog scrolls and the tomb card by placing the clouds at the monsters, not surrounding the player in protection. [ Committer's note: revised the commit message, and included the monster's cell for cloud placement. Closes #1237 ] -------------------------------------------------------------------------------- d0b4d5de99 | sdynet | 2020-05-02 17:56:55 -0400 Remove summons from the Pain card Level 2 Pain card's old effect (summon flayed ghost) was an unsuitable effect on the deck of destruction. Also, the flay effect is just another torment. New effect: cast torment that does not damage the caster. [ Committer's note: added messaging, tweaked commit message. Closes #1232 ] -------------------------------------------------------------------------------- 9fd4d98c16 | Alex Jurkiewicz | 2020-05-02 17:56:04 -0400 Add recommended jobs and species to -playable-json More information made available to the outside world. [ Closes #978 ] -------------------------------------------------------------------------------- 73108e5cc2 | Alex Jurkiewicz | 2020-05-02 17:56:04 -0400 Use the new json_mkstring(string s) function -------------------------------------------------------------------------------- 0acc9a3179 | Alex Jurkiewicz | 2020-05-02 17:56:04 -0400 Add a version of json_mkstring that accepts string Cut down on some verboseness in calling code. -------------------------------------------------------------------------------- 6329fa547d | Alex Jurkiewicz | 2020-05-02 17:56:04 -0400 Add -branch-json Dump basic branch information as JSON. The key use of this is knowing how to refer to branches when talking about morgues. Depending on the branch, you might describe a place in the following ways: * the Temple * a Sewer * an Ice Cave * Pandemonium * level 1 of the Dungeon * level 1 of the Depths Without this data being accessible, figuring out the above programatically required a hardcoded lookup table, which is duplicated work and bitrots over time as the Dungeon's layout changes. -------------------------------------------------------------------------------- 7c84a75a33 | Thom Chiovoloni | 2020-05-02 17:56:04 -0400 Add auto_butcher_max_chunks option If auto_butcher is set, and this option is greater than zero, it prevents auto-butchering from happening when you have more than this many chunks in your inventory. Defaults to zero, which is the current behavior. [ Committer's note: tweaked and polished, added documentation. Closes #628 ] -------------------------------------------------------------------------------- fd9b2de1c4 | advil | 2020-05-02 17:41:54 -0400 Explicitly install python for catch2 tests -------------------------------------------------------------------------------- adb52c904e | advil | 2020-05-02 16:58:38 -0400 Fix a directory name -------------------------------------------------------------------------------- 5fcb2d6f64 | advil | 2020-05-02 16:54:51 -0400 Attempt to install python more carefully for actions -------------------------------------------------------------------------------- 17231afb6c | advil | 2020-05-02 16:20:52 -0400 Try a different yaml package name for actions -------------------------------------------------------------------------------- f370ab6804 | Kyle Rawlins | 2020-05-02 15:53:15 -0400 Issue template tweaks This issue template already strongly guides away from requesting features, and we probably don't really want to blanket discourage feature comments anyways, e.g. UI feature requests are actually welcome IMO. I think this prohibition came from a time when the issue template was more freeform (and was copied from similar wording in mantis). If people start using github issues to request new gods or the return of mountain dwarves or whatever, we can add it back in. -------------------------------------------------------------------------------- 4d83e081dd | advil | 2020-05-02 15:25:04 -0400 Let `easy_confirm=all` allow lowercase stat selection (#1349) This is somewhat more consistent behavior, where I think someone who hadn't read the (previous) options guide wording carefully would expect this option to affect any force capitalization prompts in the game, not just y/n. I say "somewhat" because it's not entirely clear to me that stat increases form a natural class with "dangerous" y/n prompts and if I were introducing this behavior from scratch, I'd probably be inclined to have it require caps for stat increases only under `easy_confirm=none`. But, for now keep the status quo since 68cc883211 as the default behavior. Resolves #1349. -------------------------------------------------------------------------------- 237ada30ef | advil | 2020-05-02 14:52:00 -0400 Add explicit header for iswalnum (#1372) I'm not sure under what exact build conditions this is needed, but it seems to be needed for Fedora and it should be pretty safe to add. Thanks to @sagitter for diagnosing this. Resolves #1372 -------------------------------------------------------------------------------- ca36f614e4 | Aidan Holm | 2020-05-03 02:41:21 +0800 Extract coord_def clamp helper function() -------------------------------------------------------------------------------- f80317f37c | Aidan Holm | 2020-05-03 02:41:21 +0800 Don't exit map view on invalid commands -------------------------------------------------------------------------------- 0b7a428101 | Aidan Holm | 2020-05-03 02:41:21 +0800 Remove now-unused redundant map scrolling state -------------------------------------------------------------------------------- 2fe5a39f5e | Aidan Holm | 2020-05-03 02:41:21 +0800 Split viewport calculation out of show_map() -------------------------------------------------------------------------------- 235c7b5e93 | Aidan Holm | 2020-05-03 02:41:21 +0800 Extract recentre_map_target() function -------------------------------------------------------------------------------- a6a3aeff32 | Aidan Holm | 2020-05-03 02:41:21 +0800 Simplify arithmetic expressions No chance of overflow here. -------------------------------------------------------------------------------- e98a5be7b8 | Aidan Holm | 2020-05-03 02:41:21 +0800 Split command processing out of show_map() This splits a ~700 line nightmare function roughly in half. The resulting process_map_command() function is functional and pretty easy to test, although I haven't added anything too fancy yet. This should also make the remaining code in show_map more amenable to further refactoring. Exposing the relevant stuff to tests required moving quite a bit of stuff to viewmap.h. Not all of the state inside show_map() is encapsulated in the map_view_state; so far I've only included the stuff used by process_map_command(). -------------------------------------------------------------------------------- 529d17c013 | Nikolai Lavsky | 2020-05-02 14:25:37 -0400 Remove a couple of obsolete menu_colour rules -------------------------------------------------------------------------------- f09614b0b8 | Nikolai Lavsky | 2020-05-02 14:25:37 -0400 Clean up some preferred food-related code These are leftovers from when potions of blood and more types of food for carnivores/herbivores existed. -------------------------------------------------------------------------------- 968d922a6d | Aidan Holm | 2020-05-03 01:44:09 +0800 Fix targeters sometimes being too short for Barachi (#11833) in_bounds() takes an absolute pair of coordinates, but the view code was passing in player-relative coordinates. This caused ray cells to be hidden along the top and left edges, where ep.y and ep.x were zero respectively, and thus fell out of the range of valid map cells when interpreted as a grid location. -------------------------------------------------------------------------------- 364e023d31 | Aidan Holm | 2020-05-03 00:37:45 +0800 Fix high CPU usage on Windows builds (Goratrix, advil) The timer callback should return an interval for the next call, but was erroneously returning 1 (from the SDL_PushEvent call), where instead it should have just been returning zero, as the callback did prior to a840853. The return value of 1 caused the callback to be called repeatedly every 1 millisecond, causing crashes and high CPU usage. -------------------------------------------------------------------------------- 1f02ff80f2 | Aidan Holm | 2020-05-02 23:26:40 +0800 Improve save version mismatch reporting There's no reason to only show 'major version mismatch' on dev builds, even though the additional technical information is useful. This commit merges the two descriptive forms, and additionally adds a minimum_version() helper function. -------------------------------------------------------------------------------- 4357695705 | Aidan Holm | 2020-05-02 23:26:39 +0800 Add support for minor tags > 255 Previous versions of crawl serialize the minor version as a single byte, which prevents storing minor versions greater than 255. This commit adds support for eventually moving to such minor versions: values greater than 255 are stored as a byte equal to 255, and then the real minor version as a four-byte big-endian integer. This commit also consolidates some of the chunk tag reading and writing. Most of the code for reading/writing various chunks directly accessed bytes; this commit adds two helper functions for reading and writing respectively. This change is being added now because directly adding a four-byte value, while possible, breaks the save browser, causing new games to not be displayed at all in older crawl binaries. This change adds immediate support for the save browser to read files with four-byte integer minors, even though saves will continue to use a single byte. By the time we reach minor 256 (perhaps around ~3 years at the current pace), most binaries in the wild should be newer than this binary. -------------------------------------------------------------------------------- f770d9629a | Aidan Holm | 2020-05-02 23:26:39 +0800 Remove raise_custom_event() -------------------------------------------------------------------------------- a8408532f3 | Aidan Holm | 2020-05-02 23:26:39 +0800 Run timer callbacks in main thread Previously, they were run in a separate thread spawned by SDL, which makes interacting with other code difficult, since most other code assumes single-threaded access. Note that this change queues an SDL event, but only the input loop in ui.cc actually handles this event by calling the callback. This is fine, because currently the only use of this API is to show tooltips after a delay, and the callback function for that worked by queueing an SDL event, so the callback now does nothing and the actual function is performed as a side effect. This may seem like a step backwards for code clarity, but it's a necessary step to removing the input loop in tilesdl. This was previously reverted at 431bb856fd. I'm adding it now after manual testing with both a crosscompile in Wine and in a Windows VM with MSYS2, both with mingw-w64-1686. Neither showed any lag or crashes. -------------------------------------------------------------------------------- c1fa99a940 | Aidan Holm | 2020-05-02 23:26:39 +0800 Clean up describe_item() code It's no longer possible to memorize anything from the describe item UI. -------------------------------------------------------------------------------- 48f1b6f60f | Aidan Holm | 2020-05-02 23:26:39 +0800 Further break externs.h apart -------------------------------------------------------------------------------- 30cafcbba1 | Aidan Holm | 2020-05-02 23:26:39 +0800 Move map_markers struct to mapmark.h -------------------------------------------------------------------------------- d6d150f7a2 | Aidan Holm | 2020-05-02 23:26:39 +0800 Move shop_struct to shopping.h -------------------------------------------------------------------------------- 4c921ade24 | Goratrix | 2020-05-02 21:47:31 +0800 Tweak phial of floods description (Flugkiller) Change description to better indicate that only monsters hit by the initial wave will be affected by silence, not monsters that walk into the water later. Also I noticed the acrobat amulet description having a line too long, so fixing that too. -------------------------------------------------------------------------------- 62861fb195 | Edgar A. Bering IV | 2020-05-01 21:32:49 -0400 Expose "can_go_frenzy" to clua -------------------------------------------------------------------------------- 237153e625 | Edgar A. Bering IV | 2020-05-01 21:27:03 -0400 Reveal frenzy immunity in the datura targeter (12197) -------------------------------------------------------------------------------- 084fcd9360 | Edgar A. Bering IV | 2020-05-01 21:10:58 -0400 Remove a testing comment (gammafunk) -------------------------------------------------------------------------------- 568ea92cc3 | Edgar A. Bering IV | 2020-05-01 21:08:32 -0400 Display !lignification AC in the description (12224) Tree form gives a fixed AC bonus per XL, using the functions implemented to display armour changes in armour descriptions this commit displays the player's base AC after quaffing the potion. -------------------------------------------------------------------------------- d7461d2276 | Edgar A. Bering IV | 2020-05-01 13:28:06 -0400 Fix typos in changelog (pblur, Goratrix, Flugkiller) -------------------------------------------------------------------------------- ac0430677b | Edgar A. Bering IV | 2020-05-01 10:10:27 -0400 Update the changelog -------------------------------------------------------------------------------- 76b13fe646 | Aidan Holm | 2020-05-01 22:01:45 +0800 Add coord_def ostream operator This allows coord_def instances to be converted to a string, which is handy in catch2 test assert messages. -------------------------------------------------------------------------------- ff86aee0ce | Aidan Holm | 2020-05-01 22:01:45 +0800 Extract search path generation from map code Probably a good candidate for a radius_iterator or one of those things. -------------------------------------------------------------------------------- e549c88646 | Aidan Holm | 2020-05-01 22:01:45 +0800 Remove unused show_map() allow_esc parameter -------------------------------------------------------------------------------- 9575aa3b0e | Aidan Holm | 2020-05-01 22:01:45 +0800 Revert "Fix map not panning with cursor" Reverted due to this introducing a crash when adjusting the map zoom. This reverts commit 3f1e787b38e5a3a4a3bc7aab67866ffdce85acfd. -------------------------------------------------------------------------------- 497542d149 | Goratrix | 2020-05-01 20:39:44 +0800 Enable deep elf elementalist tile animation When the new tiles from roctavian were added in 16654a8, the elementalist cycle animation wasn't added, due to wielded weapon not displaying correctly. Aidanh found the reason, it's that all the variant tiles need to be listed in get_weapon_offset in tilemcache.cc. This commit enables the animation, and also reuploads the tiles, because only 3 out of the 4 originally submitted tiles were uploaded in the previous commit, and they need to be in the correct sequence. I tested it in a local windows tiles build only, working fine here. -------------------------------------------------------------------------------- 6bf7129739 | Aidan Holm | 2020-05-01 19:36:21 +0800 Fix Leda's showing muddy lava (#11115) Should this be feat_is_solid()? -------------------------------------------------------------------------------- fe5977ef6f | Aidan Holm | 2020-05-01 18:54:38 +0800 Fix map cell corruption on unmarshalling (#12218) When marshalling flags, the unsigned flags are implicitly cast to a signed integer of the size being marshalled, but during unmarshalling no cast was performed, leading to values with the high bit set undergoing sign extension. This resulted in visual artefacts. I've added casts to the marshalling code, not because they are necessary, but because I don't like the implicit behaviour and want to make it clear to the reader that this is deliberate. -------------------------------------------------------------------------------- 3f1e787b38 | Aidan Holm | 2020-05-01 16:49:46 +0800 Fix map not panning with cursor -------------------------------------------------------------------------------- adf69d5009 | Edgar A. Bering IV | 2020-05-01 02:28:52 -0400 Update the credits -------------------------------------------------------------------------------- eaba134f46 | Edgar A. Bering IV | 2020-05-01 01:23:50 -0400 Prevent attitude change for ancestors and demonic guardians Both of these allies come from unique mechanics and interact poorly with attitude changes. The remaining two possible sources of attitude changes for these monsters are: enslavement (from a hostile monster wand) and frenzy (player discord or monster datura dart). This commit prevents them from changing attitude alltogether. Incorporates and closes #1374. -------------------------------------------------------------------------------- 6492fb5f8e | Edgar A. Bering IV | 2020-04-30 23:48:59 -0400 Permit inner flame on summons Commit 3fe85ef3 allowed immolation scrolls to affect summons; the previous commit removed a degenerate interaction with teleport other. So that the two effects are consistent, this allows casting inner flame on summons. If "ready" access to suicide bombers becomes an issue, inner flame can be made to annoy allies instead. However, this was already possible with skeletons and sticks to snakes and outside of "snakebombs" created with immolation scrolls players are not going around casting inner flame on allies in place of using fireball. -------------------------------------------------------------------------------- 799ed1240d | Edgar A. Bering IV | 2020-04-30 23:01:49 -0400 Make allies annoyed by translocations other than Recall Lesser beckoning working on allies offers opportunities for tedious ally micromanagement of a kind we'd rather not allow; the targeter already doesn't think the spell applies to allies, but if it was used on them it would work without angering them. This change is partly to remove this micromanagement, and partly for consistency with the change to teleport other. Teleport other on allies could be used as a tedious combination with zombies or summons and inner flame to seed a level with bombs from the safety of the stairs. Awake hostile monsters would engage the summon or ally and suffer explosion damage, possibly resulting in a kill. -------------------------------------------------------------------------------- 3fe85ef339 | Alex Jurkiewicz | 2020-04-30 22:11:17 -0400 Let scroll of immolation affect summons Since this scroll was added in 388d670c250b25dcf88b5f54042bb083f48a9a51, the effect has been limited to non-summoned creatures. It's hard to be exactly sure why. This limitation is a little non-intuitive, and for a limited resource like scrolls, probably unnecessary. The scrolls are situational enough as-is. -------------------------------------------------------------------------------- e280b876b2 | Implojin | 2020-04-30 22:03:26 -0400 Expose player::get_noise_perception() through clua. This commit adds a clua bind for you.noise_perception(). This information has been available to players visually through the noise bar, but it wasn't exposed through clua. Noise information can be helpful for scripted decisions re: resting and retreating, so here's a bind for it. -------------------------------------------------------------------------------- fe7ed1d377 | Edgar A. Bering IV | 2020-04-30 21:32:22 -0400 Further miscast simplifications Scaling miscast damage by how badly the roll missed made the damage distribution complicated, and as a result difficult to communicate. The long tail of damage meant that in rare cases miscasts could be significanlty more damaging than the status light indicated. This commit makes miscast damage a function of the raw_spell_fail: additional miscast effects scale with the chance of failure alone. The contamination still scales with the severity of the roll, as does the threshold before additional miscast effects kick in. It also tweaks the miscast damage numbers so that the additional effect does reasonable damage at "max fail", essentially cutting off the old long tail. Finally, the description exchanges expected miscast damage for maximum miscast damage. -------------------------------------------------------------------------------- 05d4e06a41 | Edgar A. Bering IV | 2020-04-29 18:38:25 -0400 Revert "Mark Leda's as no_ghost" This reverts commit d392131cc75f18731ec8fa803f37bb1b39863f0e. Now that it can be used while flying again ghosts can keep it. -------------------------------------------------------------------------------- 437a441e8f | Edgar A. Bering IV | 2020-04-29 18:35:04 -0400 Apply Leda's movement penalty regardless of flight status (kate-) The previous string of double-reverts restores permitting flight to continue while using Leda's. This commit permits flight by the caster and applies the movement penalty to the caster regardless of flight status. This removes the edge cases around Leda's interaction with Dragon Form and Tornado, without also allowing the player to immediately cancel Leda's to escape the movement penalty using abundant sources of flight. -------------------------------------------------------------------------------- 873053edc4 | Edgar A. Bering IV | 2020-04-29 18:13:31 -0400 Revert "Revert "Allow monsters to cast Leda's while flying and remove dead code"" This reverts commit f1e2f1be51d246bff6514627603ff4b84b6e4bf8. -------------------------------------------------------------------------------- f3960b09ed | Edgar A. Bering IV | 2020-04-29 18:09:27 -0400 Revert "Revert "Allow Leda's to persist while flying"" This reverts commit e14c9e38dd7b67ed3a840f6e197e669a17d814f8. -------------------------------------------------------------------------------- d392131cc7 | Edgar A. Bering IV | 2020-04-29 17:26:04 -0400 Mark Leda's as no_ghost Ghosts are always flying, so can't use the spell. -------------------------------------------------------------------------------- f1e2f1be51 | Edgar A. Bering IV | 2020-04-29 16:57:22 -0400 Revert "Allow monsters to cast Leda's while flying and remove dead code" This reverts commit fa5a36fad76091dd4c68280d61ed62f6e8007004. The dead code is resurrected because it is again relevant to enforce the flight restrictions on Leda's. -------------------------------------------------------------------------------- e14c9e38dd | Edgar A. Bering IV | 2020-04-29 16:53:58 -0400 Revert "Allow Leda's to persist while flying" This reverts commit 9cef9ebf1155240c094acc5bb7e38d1910827b7c. Flying cancels penalties from Leda's; now that the movement penalty is restored providing an easy out when there are ample sources of flight (some permanent) is not good. -------------------------------------------------------------------------------- b679d6390d | Edgar A. Bering IV | 2020-04-29 16:24:51 -0400 Partially revert "Buff Leda's Liquefication" (elliptic) This partially reverts commit bb9abfce8d09fc878997f2ce95cdf4c4463e56a6. Removing the movement penalty as well as the melee penalty moved Leda's into the category of "obvious always cast buff spells". As mentioned in the reverted commit message, if the buff went to far the movement penalty could be restored. This partial revert restores the movement penalty (without the melee attack penalty). -------------------------------------------------------------------------------- 340c9e8194 | Edgar A. Bering IV | 2020-04-28 18:15:07 -0400 Adjust monster behavior for working with ranged allies Commit 6f887751 (in 2008 by jpeg) added behavior to have monsters of animal intelligence or higher spill out of corridors when attacking the player if followed by other monsters; additionally it made intelligent monsters (at the time normal or higher, now just human) check for an aligned monster with a ranged attack further back and move out of the way. The example from the commit message: ####. .rgo@ ####. will within two turns change to ####g ...r@ ####o In that logic this movement only triggered if walls were in the way, even though opening up lines of fire for ranged attackers is a good thing to do in the absence of a corridor. This commit changes the behavior to only check the adjacent following monnster in the corridor situation, and check for ranged allies regardless of the presence of walls in the two spaces marked with ? ###?. c..o@ ###?. has a chance of changing to ###?. c...@ ###?o if the orc moves before the centaur, regardless of the features at the ?. The decision to spill out was given a coinflip later in the development history (hard to git blame because it moved from monstuff.cc to mon-act.cc), and the choice of up or down is also randomized. In the monster intelligence simplification of d63ab3c5 (in 2015 by PleasingFungus) the intelligence component of the ranged ally check was removed, but not mentioned in the commit message as an intended effect. This is restored, so that animal intelligence monsters can be used for "cover" of sorts. Finally, this commit has monsters treat the player as a "ranged attacking ally" for the purposes of this check. It's not a sophisticated "stay out of my line of fire" behavior requested by some players and might negatively effect players who use their Hepliaklquana ancestor to block while polearming. A more sophisticated behavior could be added, but without adding an ally command (ugh) or some complicated guessing about player behavior (also ugh) it's not clear what the right move is. -------------------------------------------------------------------------------- f695395b5c | advil | 2020-04-26 12:49:02 -0400 Pointer checks for lua userdata objects This systematically adds checks to ensure that when userdata wraps a c++ object in some way via pointer, the pointer is not nullptr. On the dlua side I'm just doing this for the sake of consistency and good practice, but on the clua side this aims to prevent an attacker from using calls to the `__gc` metamethod to get crashes on demand. I kind of hate all these macros, it could probably use a refactoring to make it less brittle. -------------------------------------------------------------------------------- 39757dd64f | advil | 2020-04-26 12:49:02 -0400 Handle another potential multiple delete case The setup is slightly different but the basic problem is the same: the function `_delete_wrapped_item` is bound to the metamethod __gc on wrapped items that are available in clua, and __gc can be freely called from lua-land. -------------------------------------------------------------------------------- 7f8d8a8652 | advil | 2020-04-26 12:49:02 -0400 Guard against repeated calls to lua_object_gc (ruderubik) This call is bound to the metamethod __gc, which can be called arbitrarily from lua code (though it is always automatically called as a finalizer before lua collects the memory allocated by lua_newuserdata). This is a minimal change so that `delete` can't be called multiple times on the same pointer. (All of this code is a bit of a mess.) -------------------------------------------------------------------------------- 60a0bcd8b5 | Kyle Rawlins | 2020-04-25 22:17:38 -0400 Update SECURITY.md -------------------------------------------------------------------------------- 25f8dcc119 | Kyle Rawlins | 2020-04-25 20:32:46 -0400 Create SECURITY.md I clicked on github buttons until it suggested I add this file. -------------------------------------------------------------------------------- 681bda5bb4 | Aidan Holm | 2020-04-26 01:05:22 +0800 Add stub entries for removed spells This change lets spell_name() work again, which is important because it's used to show character action counts. Since games can span different versions, action counts for spells can still show removed spells' names. -------------------------------------------------------------------------------- c06b4bd658 | advil | 2020-04-25 11:16:38 -0400 Refactor frenzy to use a temporary attitude change The immediate target of this is interactions between discord and divine companions. `monster::is_divine_companion` checks permanent attitude for ATT_FRIENDLY, so under the previous implementation, while a divine companion was frenzied this function returned false. This could lead to all sorts of weird behavior, for example frenzied hepl ancestors that died would not be properly removed from the companions list and so would never be restored. Moreover, the ancestor cloning bug reported in https://crawl.develz.org/mantis/view.php?id=10753 was still present in trunk; this was supposed to be fixed in 0e8e6b5e25fb but this fix appears to assume that frenzy does not use a permanent attitude change, so I'm not sure how it could have worked. I've also seen unlinked item errors on a frenzied ancestor dying (though this has proven difficult to replicate) that may also be caused by this. I expect this will also remove some potential issues for beogh companions (and maybe yred companions if any of them can be frenzied). This fix doesn't explicitly repair a save file with a broken ancestor, because I'm not sure if there are any out there right now. (One was reported in https://www.reddit.com/r/dcss/comments/g6zfhu/lost_my_hep_ancestor_to_the_lvl_he x_spell_discord/ but that game is now complete.) It's possible the basic compat fixup might handle this case though? Untested. -------------------------------------------------------------------------------- 1f535e2ddc | Aidan Holm | 2020-04-25 23:12:42 +0800 Reindent code -------------------------------------------------------------------------------- 97ffa46023 | Aidan Holm | 2020-04-25 23:12:42 +0800 Add test cases for unmarshallSpells() -------------------------------------------------------------------------------- 4838036f53 | Aidan Holm | 2020-04-25 23:12:42 +0800 Remove dead spell code All of this code is no longer needed now that removed spells are removed from saves when the game is loaded. -------------------------------------------------------------------------------- 3557bf33da | Aidan Holm | 2020-04-25 23:12:42 +0800 Remove player's removed spells on load This commit filters the player's spells on load, from both their memorized spells and from the spell library. This should make it easier to remove dead code for these spells entirely. -------------------------------------------------------------------------------- 9d4679374f | Aidan Holm | 2020-04-25 23:12:42 +0800 Extract unmarshall_player_spells() function -------------------------------------------------------------------------------- 5c9e5b7a16 | Aidan Holm | 2020-04-25 23:12:42 +0800 Remove removed spells from monster spellsets This also allowed improving the fixup code for pre-flags spells, which had a bunch of code related to checking for SPELL_NO_SPELL. Since we filter these out first, this checking code can be removed. -------------------------------------------------------------------------------- aa01332a36 | Aidan Holm | 2020-04-25 23:12:42 +0800 Remove removed spells from Vehumet's gifts on load This is ugly, but of course sets don't support remove_if()... -------------------------------------------------------------------------------- 3e2dadc450 | Aidan Holm | 2020-04-25 23:12:42 +0800 Add removed spells to removed_spells() list. Huge numbers of spells were missing. Not sure how badly this will break... -------------------------------------------------------------------------------- 970948ccd0 | Aidan Holm | 2020-04-25 23:12:42 +0800 Extract unmarshall_vehumet_spells() function This CL also adds some rudimentary tests. -------------------------------------------------------------------------------- e9745dcf7e | Aidan Holm | 2020-04-25 23:12:42 +0800 Move SUMMON_SWARM out of removed spells It's still in use in the Fedhas sprint. -------------------------------------------------------------------------------- 6944ee31a2 | gammafunk | 2020-04-24 19:02:18 -0500 Fix two arrival vaults (Juliwen) The change in 3ae22969 sometimes erroneously places three additional random altars near the starting area instead of stone walls, since a shuffle is applied to the stone wall glyph. Remove this shuffle, since it only made the vault less interesting by having it place no random altar in the island area. Additionally remove a shuffle that inexplicably sometimes removed the arrival staircase, making the player arrive outside of the vault entirely at an entrance point randomly chosen by the level generator. -------------------------------------------------------------------------------- 81a31cfd23 | Aidan Holm | 2020-04-24 03:05:43 +0800 Fix crash on opening known-items menu Previous refactorings added code that aborted when invalid potion values were used, including POT_NUM_POTIONS. Unfortunately, this is used by the known-items menu to encode 'unknown potions', causing a crash. -------------------------------------------------------------------------------- fee0bf60c5 | Aidan Holm | 2020-04-24 01:52:33 +0800 Remove an unused parameter -------------------------------------------------------------------------------- 9ecea16cc4 | Aidan Holm | 2020-04-24 01:52:33 +0800 Remove more old potion code -------------------------------------------------------------------------------- 2ddb0c8792 | Aidan Holm | 2020-04-24 01:52:33 +0800 Remove is_blood_potion() -------------------------------------------------------------------------------- ffd75422ce | Aidan Holm | 2020-04-24 01:52:33 +0800 Remove code for old potion types This commit adds an CASE_REMOVED_POTIONS macro, intended to be used in switch statements, that will die() with an error for any removed potion type. It then improves the tags.cc conversion of old potions; now, *all* removed potions are converted, with a runtime crash on load guarding against forgetting to update this. This means that no saves can have these potions in the game. We follow up by removing reams of remaining cruft that's no longer necessary as a result. -------------------------------------------------------------------------------- 13a0117a0c | Aidan Holm | 2020-04-24 01:10:04 +0800 Add all_item_subtypes() This commit replaces explicit iteration over an enumeration with the use of a new helper function that encapsulates the intended behaviour, making call sites more readable and less likely to break. The function implementation is in a header file, which should allow the vector return value to be optimized away. This change permits refactorings removing old items from the game that additionally add runtime checks for old items. -------------------------------------------------------------------------------- 827379bd5b | Aidan Holm | 2020-04-24 01:10:04 +0800 Don't mark elven and mossy runes as removed They're *not* removed; sprints can (and do) still spawn them. -------------------------------------------------------------------------------- b37b1c29c3 | gammafunk | 2020-04-23 01:47:09 -0500 Fix Trog weapon gifting (elliptic) Trog weapon gifting was partially broken by 6d7e32a81, which accidentally removed the two successful random rolls needed if piety was at the 5* threshold required. This lead to excessive Trog gifts as well as it being impossible to actually reach 6*, since the gift timeout would consume most piety. This bug did not affect Okawaru weapon gifts, since the rolls were correctly applied. This code block was structured in a confusing way to begin with, so I've both fixed and refactored it to make the logic clearer. -------------------------------------------------------------------------------- 55863b0b92 | Kate | 2020-04-21 19:57:14 +0100 Don't crash when trying to describe potions Broken in 00990ba764544. -------------------------------------------------------------------------------- e42328e28c | Alex Jurkiewicz | 2020-04-22 00:22:37 +0800 Add CI jobs to test TAG_MAJOR_VERSION 35 Test with FULLDEBUG in console, tiles, and webtiles compilation modes. -------------------------------------------------------------------------------- 00990ba764 | Alex Jurkiewicz | 2020-04-22 00:22:37 +0800 Fix compilation with TAG_MAJOR_VERSION 35 Several latent issues have crept into the codebase over time, this commit fixes all of them in C++ files. There are additional changes that have to be made to text files, see util/tag-35-upgrade.py for a solution for those. -------------------------------------------------------------------------------- 239cf252b2 | Alex Jurkiewicz | 2020-04-22 00:22:37 +0800 Add util/tag-35-upgrade.py This script automates the changes required to non-C++ files for a TAG_MAJOR_VERSION 35 bump. It's the first step in automatically testing this upgrade process in CI, which is required to stop errors creeping in over time. -------------------------------------------------------------------------------- b28a33faff | Alex Jurkiewicz | 2020-04-21 19:24:05 +1000 Standardise text file TAG_MAJOR_VERSION comments This will allow us to upgrade these files with a script, rather than by hand. -------------------------------------------------------------------------------- 4e6a552925 | Aidan Holm | 2020-04-21 00:01:17 +0800 Fix missing tile in popup description -------------------------------------------------------------------------------- a6db7940a5 | Goratrix | 2020-04-20 23:45:14 +0800 Add unused unidentified mechanical trap tile (#12170) This tile is the current Pressure Plate tile overlaid with the questionmark taken from the unknown portal tile. -------------------------------------------------------------------------------- dbf7afbd95 | Emily | 2020-04-20 22:00:31 +0800 Drop support for ANCIENT_SQLITE sqlite3_open_v2 was added in 2007 (https://www.sqlite.org/34to35.html); anyone trying to build Crawl with libraries that ancient probably has other problems, and should just use BUILD_SQLITE with the submodule. -------------------------------------------------------------------------------- c0736c7dca | Emily | 2020-04-20 22:00:31 +0800 Use pkg-config for SQLite SQLite ships an upstream sqlite3.pc file these days, and Linux distributions have included one for a long time now. This allows us to remove the hardcoded FreeBSD logic and build on more systems out of the box. Systems that don't have pkg-config, or that don't ship sqlite3.pc, will cleanly fall back to building the bundled SQLite submodule as usual. -------------------------------------------------------------------------------- 30a70f5460 | Aidan Holm | 2020-04-20 20:05:52 +0800 Split teleport trap feature in two (#12170) This allows looking up permanent teleport traps in lookup-help, and also fixes permanent teleport traps being shown as regular teleport traps after magic-mapping. -------------------------------------------------------------------------------- c5703f2676 | Aidan Holm | 2020-04-20 20:05:31 +0800 Add individual feature types for mechanical traps (#12170) This commit creates individual feature types for each mechanical trap type. This fixes incorrect tiles being shown after magic-mapping, and also enables showing descriptions in lookup-help for each trap type. This is pretty important because the various mechanical trap types are pretty different, e.g. net traps can trap you for several turns. There's currently still a shared feature for teleport and permanent teleport traps. I'll address that in a separate commit. -------------------------------------------------------------------------------- e86166c523 | Aidan Holm | 2020-04-20 20:05:31 +0800 Rename trap category -> trap feature -------------------------------------------------------------------------------- 6581751b11 | riverfiend | 2020-04-20 00:38:20 -0400 Add the possibility of one more Xom demon At low XL, it's difficult for Xom to effectively kill a waitscumming mummy or vampire. This change is largely washed out at larger XLs, but should effectively create more nasty monsters to drop on low-level waitscummers. -------------------------------------------------------------------------------- e3a6afd762 | Peter Gerlagh | 2020-04-20 00:27:01 -0400 Remove autotravel water disincentive for merfolk Formerly, merfolk pathfinding would count a tile of water as having taking 2 turns to cross so that merfolk would avoid traveling through water because 'their boots would meld'. This behavior interrupted travel, but that travel interrupt was fixed in 771548fc26. This commit makes merfolk pathfinding count a tile of water as 1 turn. [ Committer's note: Closes #1343, reworded commit message to refer to the autotravel fix. ] -------------------------------------------------------------------------------- 0199dc3540 | Skrybe | 2020-04-19 23:59:56 -0400 Update layout_cellular.des -------------------------------------------------------------------------------- c0ddf3c23e | Edgar A. Bering IV | 2020-04-19 21:55:32 -0400 Don't crash when skill target set to 27 -------------------------------------------------------------------------------- 2ff8117762 | Alex Jurkiewicz | 2020-04-19 18:46:52 -0400 ci: Install PyYAML for Python 3 on macOS The CI runner environment comes with Python 3 and pip3 installed by default: https://github.com/actions/virtual-environments/blob/master/images/macos/macos-1 0.15-Readme.md -------------------------------------------------------------------------------- eca56f19ef | Alex Jurkiewicz | 2020-04-19 18:46:52 -0400 Make species-gen.py work with Python 2 & 3 Rather than requiring Python 2 installed as 'python' (which is no longer the case on some systems, like MSYS and Alpine Linux). The Makefile will auto-detect python3 and preferentially use it, falling back to python otherwise. (Thanks ebering for this suggestion.) The docs have been updated to specify Python 3 is required -- it seems simpler than explaining all this and it should be the default version assumed for "Python" going forward. -------------------------------------------------------------------------------- 270f1c643a | nirrattner | 2020-04-19 18:39:17 -0400 Prevent overtraining skill targets Currently, skill targets are not always respected when a single experience gain is large enough to push the the skill level to and beyond a skill target. This is fairly easy to reproduce when starting a new game and training only one skill with a skill target of 0.1 -- after the first experience gain, the skill will likely jump beyond 0.1 (perhaps 0.2, 0.3, etc. depending on the gain) before turning off. This change will better ensure that skill targets are respected and not overtrained. It's a minor change with an arguably negligible impact on gameplay, but some players, like myself, prefer to train to "round" numbers ending in .0 or .5 and are put off when the skills are trained beyond the set targets. Potions of Experience will ignore skill targets as in the current behavior. The interaction with the Experience skill menu and training is very cross-loaded code wise: training is called by the skill menu in this case, with very strange results if the skill menu prompt is re-invoked. Correctly handling training targets with !exp in this exact fashion will require a more extensive set of changes that don't seem worth it. [ Committer's note: Closes #1198, Squashed and rebased, tweaked interaction with potions of experience ] -------------------------------------------------------------------------------- ab441bd002 | Alex Jurkiewicz | 2020-04-20 00:51:10 +0800 Always save macros We don't need to ask the player this. It's a simpler mental model for macro changes to be always saved, rather than sometimes asking the player (during normal session end, but not eg webtiles tab close / dgamelaunch hangup). -------------------------------------------------------------------------------- 5fea3be289 | Umer Shaikh | 2020-04-19 11:39:37 -0400 Save compatibility for changes to regen items [ Committer's note: Closes #1291, squashed and reworded some messages ] -------------------------------------------------------------------------------- 4828e68a6e | Umer Shaikh | 2020-04-19 11:37:56 -0400 Make TLA and regen artefacts activate after maxing hp Currently it makes sense to swap to troll leather armour or armour with the regen+ artefact property when resting, provided one is going to rest long enough and can do so in a safe enough position. This is because the regen allows one to rest faster, helping the player deal with the clocks in the game (piety decay, nutrition, portal timers, score). Although in practice this seems to mostly be the province of speed-runners, it's often also a tedious-but-optimal tactic for normal play. This commit makes that tactic unavailable by extending the current disincentive for swapping amulets of regeneration to regen armour. Regeneration items now only affect regen rate after the player has healed to max hp with the item on. Thus benefiting from regen requires a long-term equipment choice. Deactivating a regen item on unequip is moved to an unequip_effect instead of handling it in player_reacts, on the principle that status changes that happen due to unequiping an item should probably happen there. This commit makes it so melding a regen item stops the regen bonus, but does not deactivate the item, i.e., you don't have to rest up to full to get the effect back after untransforming. [ Committer's note: added artefact names to messaging, refactored a switch statement to use comma_separated_line from stringutil instead ] -------------------------------------------------------------------------------- 0ddb669d6f | Umer Shaikh | 2020-04-19 10:36:55 -0400 Refactor some regen code Factor out the logic for activating a prop if some condition is met, which was repeated several times for activating regeneration, mana regeneration, and acrobat amulets when hp or mp maxes out. This function isn't used anywhere else, and that seems unlikely to change soon, so it's now a static function in player-reacts.cc. -------------------------------------------------------------------------------- 2d4e2cfd7f | advil | 2020-04-19 09:59:23 -0400 Simplify mac zip naming I can't think of a good reason to have a different naming scheme depending on whether it is a release or not. -------------------------------------------------------------------------------- d808e8321f | advil | 2020-04-19 09:59:23 -0400 A few more windows build cleanups (Goratrix) Also, clean up the use of `rm` a bit, add back in the overall zips target (n.b. I haven't tested this, but it doesn't appear that make clean will delete these.) The windows build process here looks like it is in need of a thorough overhaul, I have to say. For example, why are these targets invoking `make clean` instead of taking `clean` as preconditions? Why isn't the cross-compiling check a precondition? etc. -------------------------------------------------------------------------------- 363036d654 | Goratrix | 2020-04-19 09:59:23 -0400 WIndows installer package build cleanup 1. The installer package build (unlike the zip build) currently doesn't delete the build-win folder after it finishes and the folder needs to be deleted manually. There may be reason that I'm missing, but I can't think of any, as the zip build deletes the folder, only the installer build doesn't. 2. The final win packages are actually named 'stone_soup...', so update gitignore accordingly. -------------------------------------------------------------------------------- 03277fe0e5 | Alex Jurkiewicz | 2020-04-19 09:59:23 -0400 Remove unnecessary continuation -------------------------------------------------------------------------------- 449611fb78 | Alex Jurkiewicz | 2020-04-19 09:59:23 -0400 Simplify CI version detection actions/checkout only gets the most recent commit by default, which means DCSS's version detection system (based on most recent tag) doesn't work. We were faking the release version for non-release builds and loading the version from a special variable for release builds, which was a little complex. It's simpler to get the repo's full history and rely on our existing version detection logic. -------------------------------------------------------------------------------- 520075d945 | Alex Jurkiewicz | 2020-04-19 09:59:23 -0400 Update release process Re-organise the process from: 1. Tag locally 2. Build and test locally 3. Push the tag 4. Upload builds To: 1. Tag and release on GitHub 2. Builds are created automatically -------------------------------------------------------------------------------- d17ee4b226 | Alex Jurkiewicz | 2020-04-19 09:59:23 -0400 Upload release builds to GitHub releases Whenever a GitHub release is created, GitHub Actions will add the following builds: * Windows (32-bit) console & tiles zips, plus combined install * macOS console & tiles apps Also make the following changes: * Disable some unnecessary Clang builds * Rename windows package Makefile targets * Use advzip on macOS packages -------------------------------------------------------------------------------- 50c693f418 | riverfiend | 2020-04-18 19:14:10 -0500 New Hep+Dith shared overflow altar Committer's Note: Cleaned up glyph usage, simplified some statements, and tweaked wall tile placement to be a bit more symmetrical. Closes #1352. -------------------------------------------------------------------------------- 58bd18402a | Edgar A. Bering IV | 2020-04-18 17:28:10 -0400 Prevent allies from blinking near traps (Pekkekke) Since most traps target the player and the remaining remove the ally from the player's presence, make allied monsters avoid blink activities when traps are in sight. This includes blinking other monsters; making a blanket exception is easier than conditioning on trap type. -------------------------------------------------------------------------------- 0be837aa77 | Kate | 2020-04-18 20:23:08 +0100 Don't allow casting Tukima's Dance under Sac Love -------------------------------------------------------------------------------- ab8e1e778f | Nikolai Lavsky | 2020-04-18 13:05:14 -0400 Tweak lava pools in nicolae_crawler_farm Currently, this vault has a few demonic crawlers trapped behind lava, because they can no longer cling to walls. -------------------------------------------------------------------------------- c6e39c492d | Goratrix | 2020-04-18 12:54:38 -0400 Adjust Vehumet gift range Based on discussion in Mantis ticket 12221, this tweaks the range of Vehumet spell gifts to try to avoid repeated offers at gifts number 10, 11 and 12. Extending the range from 6-7 to 5-7 is a small nerf, however level 5 contains desirable spells (Fireball, LRD). To compensate, range of gift 12 (the last one before the final) is extended from 6-7 to 6-8. -------------------------------------------------------------------------------- 3ae22969f6 | Byrel Mitchell | 2020-04-18 12:47:43 -0400 Add room for tactics to arrival vaults in small.des evilmike_arrival_hilbert_curve: Pretty much regardless of which entrance you have, you're stuck with a single exit. There's no handy way of adding pillars or additional exits without messing with the hilbert curve theme, so I just added some escape hatches. evilmike_arrival_rings: Each ring has a single exit, and the internal path is split so you can't use it as an pillars. I added a second door to the outside. minmay_arrival_stair_chambers: This vault already placed statues in place of the unused entrances, which served as pillars. However, this was pretty spoilery since they're in enclosed rooms. I added windows to the rooms so a player unfamiliar with the vault can know they have that option. minmay_arrival_stone_box: This vault has a stone box with a pillar inside, so if the surrounding dungeon gen is particularly hostile you can retreat into there. However, it was not no-monster-gen (so you could get trapped in there) and there was no way for an unspoiled player to know there was useful terrain in there. I added windows and no_monster_gen to the corridor in the box. minmay_arrival_statue_studded: This vault was a single exit box. I added two side-exits. erik_arrival_orb_chamber: This vault had three problems: it was spoilery (placing a big horde of rats inside), had potentially uninteractive starting terrain depending on dungeon layout, and deviated from the layout it's supposed to evoke in order to keep the rats from being zapped on dungeon entrance. I reworked it so that you start in the orb chamber, and the rats are replaced with orb guardian statues (which your neophyte adventurer only knows as 'hideous four-limbed creatures'.) I also modified the terrain to more exactly match the hall of zot orb chamber. Selecting orb guardian statues required adding a synonym in dc-feat.txt dpeg_arrival_lava/water_altar: These vaults potentially placed an altar over a deep water/lava pool from the player, with a dice roll deciding whether the player could see it without flight. I guaranteed that it's in sight of an accessible tile to avoid rewarding spoiled players, and added a small pillar around the start to allow for tactics. dpeg_arrival_chase: This vault places 5 kobolds around some stones across deep water from the player, and some other monster across deep water on the other side of the player. The gimmick here doesn't work any more; all the placed monsters are zapped because they're in LoS. It also wouldn't work because they wouldn't pick up the stones, and I'm not sure it's a really good arrival vault concept in the first place (can 4 kobolds with stones kill a NaWr before it gets out of the vault? Or a bad NaWn roll? etc.) So I removed it. dpeg_arrival_rooms_c: This vault has a 4-tile deep water pillar which will probably be entirely replaced by shallow water due to pool fixup. So I added no_pool_fixup. dpeg_arrival_shrine: This vault was single-exit. Instead of randomizing the location of the single exit, I made it always place both. dpeg_arrival_stone_temple_mockup: This vault is single-exit. I added no_pool_fixup to ensure the 4 pools can serve as pillars. dpeg_arrival_lava_temple_mockup: This vault is single-exit. Adding pillars or additional exits might disrupt the homage (I'm not familiar with the source) so I added an escape hatch. dpeg_arrival_leaves_temple_mockup: This vault is single-exit. Adding pillars or additional exits might disrupt the homage (I'm not familiar with the source) so I added an escape hatch. zelgadis_glass_arrival_large: This vault is a single exit spiral. I cut the spiral at the center to provide a small pillar. dpeg_arrival_stonehenge_12_columns: This vault is essentially an open plane near the center; with no_monster_gen off it's possible for you to not be able to get to any of the distant pillars. I added an escape hatch near the center in case you get such a bad roll. dpeg_arrival_simpleton_b: This vault could be a single-exit room, if you spawned in the north-east room, and it's possible for none of the features in the large room to be statues. I added a couple doors to the rest of the vault from the north east room, which provides a pillar and a second exit no matter where you spawn. dpeg_arrival_prison: This vault is a single-exit room. I added a pillar. dpeg_arrival_ratfight: This vault could be a single-exit room. I made the other exit guaranteed. dpeg_arrival_houses_and_road: This vault had a single exit staring room. I added a guaranteed second exit. zaba_arrival_water: This vault had the potential that you could be spotted by a monster outside the vault which could block you into the shallow water (and if it was a gnoll with polearm or a swimmer, potentially keep you from going back and looping to another path.) I changed the exits to doors to prevent you triggering stealth checks till you're to the final room. lemuel_arrival_tunnels: This vault was single exit. I added a couple of guaranteed pillars lemuel_arrival_broad_hall: This vault's internal pillars had a 1:6 chance of not existing. Removed that chance. lemuel_arrival_behind_the_door_large/small: This vault was effectively single exit. I added a couple pillars. dpeg_arrival_pond: This vault is an open alcove with one exit. I added a small shallow water path to loop around. dpeg_arrival_rhombi: This vault has a single exit. I added some internal doors to guarantee an internal island. dpeg_arrival_arbitrary_a: This vault could be single exit. I made it guaranteed that you can access both exits, and added a small pillar. dpeg_arrival_subterranean_lakeside_camping: This vault could be single exit. I made it guaranteed that you can access both exits. dpeg_arrival_more_subterranean_lakeside_camping: It was possible for this vault to generate without a path to the exit for one of the starting locations, invalidating its placement. I fixed it so there's always a path to the exit. dpeg_arrival_erosion: With monsters generating, your starting room was single exit. I turned on no_monster_gen so you have access to the good terrain in the vault. dpeg_arrival_round_a/b: Cleaned up a meaningless shuffle line. dpeg_arrival_short_road: The starting room could be single exit into the monster-generating vault. I added another exit and a pillar to the NW starting room. dpeg_arrival_court: The starting rooms were single exit into the monster generating vault (with lots of good terrain.) I marked part of the vault near the start doors as no_monster_gen. dpeg_arrival_signposts: Added a pillar to this single exit room. onia_arrival_mini_maze/_b: It was possible to get stuck in the starting corridor. I added a corridor break which provides a pillar and ensures you can get out regardless of where a single monster spawns. onia_arrival_handbag: This vault had some cruft in it, including an escape hatch UP specified. I cleaned that up and added a small pillar and 'back door' to your nearby escape hatch to each starting location. eino_arrival_cavern_e: This vault is single-exit. I added a pillar. onia_arrival_zoo_common: It was possible to get trapped in your starting corridor by a monster just outside your LoS. I added no_monster_gen to the tiles where this would be possible. minmay_arrival_arboretum_small: Depending on what the dungeon generated, this could be a pretty nasty start. I added a couple of glass pillars. co_arrival_random_square_maze: This was a single exit vault. I made it generate three exits to the vault. sevenhm_arrival_forest_fort_small_2/4/5: These vaults were single exit and I added a second one. sevenhm_arrival_forest_fort_small_3: This vault was single-exit so I added a tree as a pillar. saegor_arrival_miasma: This vault was single exit so I added a second one. lightli_arrival_statuegarden: This vault was single exit so I added a second one. lightli_arrival_windingriver: This vault was single exit so I added a tree to serve as a small pillar. nicolae_arrival_washed_ashore: This vault is single-exit, but one of my favorite-flavors. I added some ruined pillars randomly placed on the beach to allow for tactics. minmay_arrival_shattered_statue: The first part of theis vault is single-exit, but the second room has a stuatue to walk around and two exits. I marked the vault as no_monster_gen. wander_arrival_fairy_ring: It was theoretically possible that no trees or fungus placed in this vault; I added a guaranteed tree in sight of the start. [ Committer's note: Formatted commit message to 80 cols and resolved conflicts with #1304, Closes #1327 ] -------------------------------------------------------------------------------- 4798a01ea9 | theJollySin | 2020-04-18 12:20:43 -0400 Add room for tactics in small arrival vaults Add another exit to: * evilmike_arrival_fibonacci_small * minmay_arrival_stair_chambers * minmay_arrival_widening_spiral_wide * dpeg_arrival_lava_temple_mockup Add a pillar to: * evilmike_arrival_grusome_pit * minmay_arrival_widening_spiral_narrow * minmay_arrival_loop * evilmike_arrival_sounds_zot Remove: * evilmike_arrival_sounds_zot * onia_arrival_larder [ Committer's note: Closes #1304 ] -------------------------------------------------------------------------------- 0023389d77 | gammafunk | 2020-04-18 01:30:19 -0500 A new curse skull tile (kormed) -------------------------------------------------------------------------------- d415a3ffb0 | Emily | 2020-04-18 01:50:08 -0400 Rename the book of Enchantments to Hexes It no longer contains any Charms, so the historical name doesn't make sense any more. -------------------------------------------------------------------------------- 8b45d1b2b9 | Emily | 2020-04-18 01:50:08 -0400 Rename deflection to repulsion in code and dumps Now that DMsl is gone, this function corresponds exactly to whether RMsl is active, and /deflect(ion)?/ barely appears in the codebase or output, so standardize on the simpler terminology. -------------------------------------------------------------------------------- 5ff3ae7edd | Emily | 2020-04-18 01:50:08 -0400 Remove logic for multi-level missile deflection With the DMsl spell gone, missile_deflection() can only ever be 0 or 1; change the return type to a bool and remove obsolete DMsl-handling code. -------------------------------------------------------------------------------- 2ea948a12f | Emily | 2020-04-18 01:50:08 -0400 Give monsters that had Deflect Missiles +2 EV To compensate for the nerf. -------------------------------------------------------------------------------- c449921327 | Emily | 2020-04-18 01:50:08 -0400 Remove the Deflect Missiles spell The RMsl spell was removed in 6993651381ec54b41ad219c4c6380028b2801db6, and most of the arguments for its renewal also apply to DMsl. It's true that it requires much more investment, but that also makes it much more marginal: we carry around the code and design complexity of multiple missile repulsion levels, and the notion of non-expiring "permabuff" spells, for a spell that essentially duplicates an item property but stronger, without it even being something that most characters will have any opportunity or reason to learn. After this commit, the design is crisper and easier to learn: there's one level of missile repulsion and you get it from armour, gods, or intrinsically; spells don't come into it. -------------------------------------------------------------------------------- 53a3069714 | Emily | 2020-04-18 01:50:08 -0400 Remove obsolete temporary RMsl status logic Players haven't been able to access temporary RMsl for some time now. -------------------------------------------------------------------------------- 7dfdf1ca8f | Edgar A. Bering IV | 2020-04-18 01:42:55 -0400 Add miscast effects to spell descriptions Now that miscasts are simplified the effect can fit in a sentence and be displayed to the player. TODO: Decide how to reveal average slow/poly/dimension anchor and nameless horror strength. -------------------------------------------------------------------------------- 6fc3743e77 | Edgar A. Bering IV | 2020-04-18 01:15:19 -0400 Tone down miscast effects and retool severity colors New miscast effects were... a bit too severe. This commit refactors the tuning parameters to the spl-miscast header and turns them up (larger means less severe). Severity colors are also revised, so that "safe" is only displayed only if no secondary miscast effect can happen. -------------------------------------------------------------------------------- 88dfbedd84 | Edgar A. Bering IV | 2020-04-18 01:06:53 -0400 Tone down hell effect miscasts A level 5, fail 50 miscast does 125 damage on average with the new miscast formulas, and fail was being called with random2avg(97,3) for hell effects. This reduces hell effects to level 5, random2avg(40, 3) miscasts, which do a maximum miscast damage of 100, and an average of 50. This will be further reduced by a subsequent commit toning down miscasts over all. -------------------------------------------------------------------------------- 19abc6cbe4 | advil | 2020-04-17 19:48:20 -0400 Put D:1 monsters back to sleep (#1357) 955fa49 tweaked spawn behavior on D:1 to avoid the dungeon entrance, but accidentally (based on comments at least) made them unconditionally awake at the same time, by preventing the `else` branch that put them to sleep from running. Resolves #1357, patch from @c-andy-martin in that issue. -------------------------------------------------------------------------------- 5b70d41e48 | Goratrix | 2020-04-17 11:27:29 -0400 Clarify windows package build instructions Currently INSTALL.md refers to the release guide for building packages under MSYS2, which is not very clear and also doesn't mention the zip and nsis dependencies. While users can figure this out, I think it would be good to have it explained directly in the INSTALL file. Additionally, the 'mingw64/' prefix in row 222 is not needed. -------------------------------------------------------------------------------- b22c70e859 | advil | 2020-04-16 17:26:44 -0400 Fix a typo [skip ci] -------------------------------------------------------------------------------- de7f6e42b9 | advil | 2020-04-16 17:21:10 -0400 Update credits A bunch of the server stuff was very out of date. -------------------------------------------------------------------------------- 0e9e85fc21 | Nikolai Lavsky | 2020-04-17 01:02:29 +0800 Fix the x-mode description of walls covered in ice and blood Currently, if icy walls made by Frozen Ramparts are covered in blood, then they have only the second part of a covering description: for example, "A rock wall, and spattered with blood." -------------------------------------------------------------------------------- 655279ceaa | gammafunk | 2020-04-15 19:52:09 -0500 A spell tile for Frozen Ramparts (CanOfWorms) -------------------------------------------------------------------------------- c44aebf4fe | gammafunk | 2020-04-14 12:15:15 -0500 Update Wu Jian's Whirlwind description (gressup) The pinning effect of Whirlwind was removed in 59c31d1a9, so update the descriptions of the ability in Wu's religion screen appropriately. Replace the text about pinning in the "Extra" table with a line mentioning that Whirlwind can attack multiple monsters at once. -------------------------------------------------------------------------------- 622e69b31f | Alex Jurkiewicz | 2020-04-13 21:28:31 -0400 Send DCSS processes SIGABRT rather than SIGTERM Both signals do the same thing now (controlled crash), but this is hopefully the first step in changing SIGTERM to handle the same way as SIGHUP (cleanly shut down). It was a bit off a toss-up between using SIGQUIT and SIGABRT. QUIT means "quit program" while ABRT means "abort program", so both are probably suitable. But dgamelaunch-config uses ABRT already: https://github.com/crawl/dgamelaunch-config/blob/master/utils/webtiles so we'll follow convention. -------------------------------------------------------------------------------- 398c232eb9 | Alex Jurkiewicz | 2020-04-13 21:06:43 -0400 Example webtiles systemd unit file -------------------------------------------------------------------------------- 357ffb74ea | Alex Jurkiewicz | 2020-04-13 20:45:48 -0400 Correct a step name -------------------------------------------------------------------------------- 713ffed48a | Alex Jurkiewicz | 2020-04-13 20:45:48 -0400 Fix CPU detection on macOS -------------------------------------------------------------------------------- bf642f89ba | advil | 2020-04-13 18:51:32 -0400 Fix a miscast crash If a miscast with BEAM_NEG flavour is triggered, then mons_adjust_flavoured can kill the monster and do monster_die (by way of calling drain->exp). The logic here is overall odd but we can at least fix the crash by assuming that the monster isn't necessarily alive after mons_adjust_flavoured; this could matter for other flavours too. Before this commit, replicable with arena: miscasts 5 pandemonium lord v 20 20-headed hydra delay:0 t:10 -------------------------------------------------------------------------------- d9a95f1d30 | gammafunk | 2020-04-13 17:18:57 -0500 Remove a no longer relevant Donald line -------------------------------------------------------------------------------- 40ae2d4f90 | Kate | 2020-04-13 21:24:33 +0100 Add details to the "Beogh" status light description On the off-chance that somebody forgets how it works but knows to look up the status description. -------------------------------------------------------------------------------- 43196ba697 | Kate | 2020-04-13 21:07:36 +0100 Don't print auto item slot adjustments on turn 0 As with spells being automatically assigned by the RC option, print new slots when they're assigned during play, but not on game start. -------------------------------------------------------------------------------- f7929f599a | Kate | 2020-04-13 20:39:19 +0100 Give the plutonium sword a chance to polymorph monsters again Since it was tragically lost in the rework of miscast effects. -------------------------------------------------------------------------------- a3f3f81586 | Kate | 2020-04-13 18:22:40 +0100 Use BASELINE_DELAY for some enchantment durations -------------------------------------------------------------------------------- 53dc3366b1 | Aidan Holm | 2020-04-13 23:50:13 +0800 Fix bugged acquirement menu (#12234) It looks like select() can do a number of things, including toggling, but was in this instance a no-op. I've switched it to deselect_all() for the sake of readability. -------------------------------------------------------------------------------- 34829ab59b | Aidan Holm | 2020-04-13 22:21:43 +0800 Fix another arena crash (#11894, #12238) This was another crash caused by the tiles rendering code. -------------------------------------------------------------------------------- 6f2fc6eb8c | Edgar A. Bering IV | 2020-04-13 08:56:45 -0400 Nameless horror tile (CanOfWorms) -------------------------------------------------------------------------------- a8ac3e9bb0 | Edgar A. Bering IV | 2020-04-13 07:25:55 -0400 Fix an arena crash -------------------------------------------------------------------------------- 0ecfff5982 | Kate | 2020-04-13 02:43:26 +0100 Tweak wording and fix a typo -------------------------------------------------------------------------------- 8a17258929 | Edgar A. Bering IV | 2020-04-12 19:58:39 -0400 Update spell failure coloring Now that miscasts roll a consistent damage number (for non-damaging schools this is an abstraction but reflects the degree of the miscast) we can compare the expected value of this abstract damage roll to the player's max hp. The tiers of spell danger are: tier | expected damge | colour "safe" | <= 5% max hp | LIGHTGREY "slightly dangerous" | 5-15% max hp | YELLOW "quite dangerous" | 15-25% max hp | LIGHTRED "extremely dangerous" | 25-50% max hp | RED "potentially lethal" | >50% max hp | MAGENTA While the schools with nondamaging miscasts aren't ever directly lethal, having a very long duration slow, dimension anchor, polymorph, or a very strong namelesss horror show up are probably not going to go well for the player. If this stretches the definition of potentially lethal too far, very dangerous can be brought back for RED tier miscasts. -------------------------------------------------------------------------------- 9c6f73562d | Edgar A. Bering IV | 2020-04-12 19:58:39 -0400 Implement summoning miscasts A summoning miscast now summons a nameless horror with hd = 2 * dam / 3, where dam is the usual damage roll for a miscast, capped at hd 27. These are durably summoned from spell miscasts, and have an abj_deg of 4 from other sources (spellbinder). -------------------------------------------------------------------------------- 22dff59d80 | Edgar A. Bering IV | 2020-04-12 19:58:39 -0400 New Monster: nameless horror This monster is designed to be an hd-scaled summoning miscast. The name is an Earthsea reference, reinforced by the quote. Practically the monster is giant, tanky (120 hp at 15 hd reference point, 10 AC, 2 EV), antimagic swinging (dam = hd * 2 AF_ANTIMAGIC), and has abjuration as a natural ability. -------------------------------------------------------------------------------- 8a08d0b149 | Edgar A. Bering IV | 2020-04-12 19:58:39 -0400 Refactor monster abjuration to be a true spell Monster abjuration is automatically added to monsters with certain summon spells, but the implementation was a bit of a hack. This refactors the code to use a modern spell_logic struct for abjuration. It keeps the check to abjure instead of using certain summon spells, in lieu of adding SPELL_ABJURATION to a bunch of monster spell books, but the codepath is now similar to legendary destruction instead of a different form of special casing. -------------------------------------------------------------------------------- 3e08ee0495 | Edgar A. Bering IV | 2020-04-12 19:58:39 -0400 Refactor and revise miscasts Miscast code was notoriously opaque, the array of miscast effects dizzying, and the whole soup not particularly effective at making casting dangerous spells dangerous. This commit re-writes spl-miscast.cc to simplify things significantly. Spell success chances are unchanged, the value of fail is the margin the player misses the casting roll by. Miscasting a spell now has the following effects as a function of spell level and fail: 2 * (level * level * fail + 250) contam and a roll_dice(level, level * fail) / 10 "damage" school effect. The school effects are: - charms: debuff and damage turns of slow - hexes: debuff and damage turns of slow - summoning: TODO in this commit - translocation: damage turns of dimension anchor - transmutation: damage power polymorph (malmutate on monsters) - conjurations, fire, ice, air, earth, and poison all do appropriate flavored damage (with flavor effects). Miscasts from other sources (Kiku and Veh wrath, Hell effects, Spellbinder, and the plutonium sword) skip the contam and just do a school effect. -------------------------------------------------------------------------------- c46e80e7f0 | Edgar A. Bering IV | 2020-04-12 19:58:39 -0400 Decouple Zot trap effects from miscasts and revise The Zot trap effect code was very old, wedged into the miscast system for convenient access to certain things the old miscast class handled. The effect list was long and had a highly variable impact and threat level. This commit re-implements zot trap effects directly in traps.cc with a much pruned list. The new table of effects is below, with 2/3rds of the weight spent on "evil magic" and 1/3rd on "hostile summoning" as loose categories. Evil magic (total weight 16): - lose 1 + r2a(5,2) stats (weight 4) - 7000 + r2a(13000,2) contam (weight 4) - 2 - 5 turn paralysis (weight 1) - mp drain to 0 wt (weight 2) - petrification wt (weight 1) - random2(20) turns of magic vulnerability (weight 4) Summoning (total weight 8): - word of recall 2 - 4 foes (weight 3) - durably summoned greater demon (weight 3) - malign gateway (weight 1) - twister (weight 1) These effects will need further tuning (and possible re-weighting). -------------------------------------------------------------------------------- dc3872be64 | Edgar A. Bering IV | 2020-04-12 19:58:39 -0400 Refactor malign gateway creation code Separate out creating the gateway and player spell casting setup, so that gateways can be used without a caster. -------------------------------------------------------------------------------- 1285b1578e | Edgar A. Bering IV | 2020-04-12 19:58:39 -0400 Remove miscasts from Xom effects Now that miscasts effects are focused and meant to punish spell misuse they are less useful as "random wacky junk" in the Xom effect roster. Removing the lethality margin also significantly simplifies things. Xom effects probably need a more thorough looking-at, but that is beyond the scope of this change. -------------------------------------------------------------------------------- 03a4b90f3d | Edgar A. Bering IV | 2020-04-12 19:58:39 -0400 Remove miscasts from Kiku wrath Replace them with death curses of a severity equal to the player's XL. In subsequent commits miscasts will be overhauled and simplified. While a necromancy miscast would still be thematic for Kiku, the more varied effects of mummy death curses are a better fit for the god of death. -------------------------------------------------------------------------------- fb0a38e7c0 | Edgar A. Bering IV | 2020-04-12 19:58:39 -0400 Adjust the scythe of Curses Remove the dependence on necromancy miscasts, replacing them with death curses. On wield the scythe delivers a severity 0 curse, and on hit a severity min(damage done, 27) curse to monsters of natural holiness. Also remove the item cursing. That was a flavourful annoyance more than a serious limitation considering the quantity of ?rc available to players. -------------------------------------------------------------------------------- 336ef83941 | Edgar A. Bering IV | 2020-04-12 19:58:39 -0400 Refactor and revise Mummy death curses Death curses were previously necromancy miscasts at varying power. This commit implements death curses as their own effect, separated from the miscast system. The effect list is pruned. The remaining effects scale with severity, and the weights among the effects shift with severity. Mummies use their hd for severity; for reference the hds are - guardian mummy 7 - mummy priest 10 - greater mummy 15 - khufu 18 Kiku's partial curse protection divides severity by two. If this isn't good enough, increasing the divisor to 3 should work. New curse effects: "message" - message only, shown only when the player is hit to avoid message spam "pain" - 5 + r2a(2*severity, 2) damage if not rTorm "slow" - severity turns of slow "drain" - x_chance_in_y(severity, 27) chance of 1 + r2a( severity / 3, 2) stat drain (player only) - else (severity / 27) * 100 drain "torment" - torment Effect weights are determined by linearly interpolationg between these two weight sets, with the weight of "message" not permitted to be negative. As a result, Khufu has a slightly lower chance to cause a "pain" curse, and a slightly higher chance to do slow, drain, or torment, compared to a standard greater mummy. | severity | message | pain | slow | drain | torment | | -------- | ------- | ---- | ---- | ----- | ------- | | 0 | 80 | 20 | 0 | 0 | 0 | | 15 | 0 | 40 | 20 | 20 | 20 | -------------------------------------------------------------------------------- 86a13c9327 | Edgar A. Bering IV | 2020-04-12 19:58:39 -0400 Remove dead code from chaos melee miscasts Now that chaos melee does not use miscasts and the randarts access them through their own codepath this code can be removed. -------------------------------------------------------------------------------- 47bc34da0a | Edgar A. Bering IV | 2020-04-12 19:58:39 -0400 Remove miscasts from Yred wrath Replace the single necromancy miscast with a bolt of draining. Yred's theme is unlife, not necromancy (that's Kiku). A bolt of draining is a more thematic tool for Yred to use in anger, drain life style. This also has the technical improvement of decoupling wrath from miscasts. -------------------------------------------------------------------------------- 2736e7e68b | Edgar A. Bering IV | 2020-04-12 19:58:39 -0400 Decouple distortion unwields from miscasts Distortion unwielding penalty is now: 50% teleport to monsters, 25% banishment, 25% severe contam. -------------------------------------------------------------------------------- 7d7414004a | Edgar A. Bering IV | 2020-04-12 19:58:39 -0400 Adjust Fedhas wrath Remove random elemental miscasts from Fedhas wrath to remove dependence on spell miscast and make wrath more flavourful. The elemental miscasts are replaced with a random choice of Corrosive Bolt, Primal Wave (rain throwback), or Thorn Volley. -------------------------------------------------------------------------------- f8edb28dd6 | Edgar A. Bering IV | 2020-04-12 19:58:39 -0400 Adjust Cheibriados wrath Replace miscasts in Cheibriados' wrath in two places. Miscasts are used a as a source of "random bad stuff" and its better to have "thematic bad stuff". For "very high tension" retribution, add a lot of noise and then fallthrough to the sleep and slow effects (to bring monsters to the debilitated player). For "low/no tension" retribution, deal some stat damage. The noise is given a clock flavour (Cheibriados strikes the hour.), and the stats are in line with Cheibriados' gifts. -------------------------------------------------------------------------------- 571808c64f | Edgar A. Bering IV | 2020-04-12 19:58:39 -0400 Adjust Lugonu wrath Replace the (50% translocation miscast/50% random translocation) part of the wrath with: (50% teleport to monsters / 25% banishment / 25% just summons). This is to decouple wraths from spell miscasts while keeping the most impactful translocations of Lugonu's wrath. -------------------------------------------------------------------------------- a40a96fbb7 | Edgar A. Bering IV | 2020-04-12 19:58:39 -0400 Adjust Trog wrath Remove the chance for rotting; while it was intended as "physical damage" (judging from the comments) rotting is necromantic. Replace the fire miscasts with a pure fireball, to remove the dependence of Trog wrath on miscast code. A fireball scaled with player XL is a fine "firey rage" to fit with the theme of Trog. -------------------------------------------------------------------------------- 59c31d1a9f | Kate | 2020-04-13 00:07:44 +0100 Remove the pinning effect from WJC whirlwind attacks The pinning effect allowed for near-free escapes from any enemy, without even requiring a successful martial attack. Remove the pin so that whirlwind attacks are just focused on their main function of allowing attacks against multiple targets while moving. -------------------------------------------------------------------------------- c9e437d3e5 | Kate | 2020-04-13 00:07:44 +0100 Refactor and simplify Heavenly Storm Re-implement the scaling bonus from Heavenly Storm in a similar way to Powered by Death, using a prop and cleaner way of decaying the bonus. The slaying bonus now starts at 5, is capped at 15, increases by 1 per martial attack, and decays by 1 every 20-30 aut, with the storm expiring once it reaches 0. -------------------------------------------------------------------------------- ac708d3437 | Kate | 2020-04-13 00:07:44 +0100 Clear water elemental engulfing when walljumping -------------------------------------------------------------------------------- 404d5d30d4 | Kate | 2020-04-13 00:07:44 +0100 Make WJC wall jumps only activatable via the ability Activating it by moving into a wall was extremely complicated on the code side, and on the player side it resulted in a lot of interface inconsistency for little benefit compared to just consistently treating it as a regular ability. -------------------------------------------------------------------------------- 84dc20635f | Aidan Holm | 2020-04-12 20:50:03 +0800 Revert "Shut down cleanly on SIGTERM" Reverted because the stale process handler uses SIGTERM to terminate hung processes (process_handler.py:487). Unfortunately this is not something that's easy to change, since webtiles servers generally do not restart automatically. This reverts commit 4d5fadd62c62fa2ab1704ed8f00dd03fea444a06. -------------------------------------------------------------------------------- be65d2b916 | Aidan Holm | 2020-04-12 19:17:31 +0800 Work around crash caused by early-game messaging This works around a crash caused by a Gnoll skills check during game resumption. If a gnoll had all skills at 27, a message was printed before the game had been fully restored. The check changed in this commit blocks layout changes until the game has been fully restored; this also prevented the message window from being given a size. To work around this, we explicitly give the message region an arbitrary size. Unfortunately I can't remember which parts of the tilesdl code were crashing or how to reproduce that issue. The underlying issue is that the message handling code does its own screen output. But, as with all things crawlcode, this is extremely non-trivial to fix. Fixes #1346. -------------------------------------------------------------------------------- 01bdca394d | Aidan Holm | 2020-04-12 19:11:43 +0800 Fix lint errors in util.py, and add type hints This is made somewhat more complicated by Tornado hinting some functions as accepting a str with a default of None; necessitating several type ignore comments. Some more were added to quickly deal with the forced addition of an attribute to instances of one of Tornado's classes (not a great idea...). This also removes a race condition from the FileTailer class. -------------------------------------------------------------------------------- 2f0c327db6 | Aidan Holm | 2020-04-12 17:49:21 +0800 Remove needless conditional compilation for MSVC This code removed the PURE annotation for MSVC, but there were already other instances of unguarded PUREs throughout the codebase, so these are likely safe to remove. Easy enough to conditionally undefine PURE if needed. -------------------------------------------------------------------------------- 5222f23389 | Alex Jurkiewicz | 2020-04-12 17:09:29 +0800 Fix humanise_bytes unit -------------------------------------------------------------------------------- 4d5fadd62c | Alex Jurkiewicz | 2020-04-12 15:56:57 +0800 Shut down cleanly on SIGTERM Treat SIGTERM the same as SIGHUP -- eg gracefully save and quit. When a SSH client disconnects from a remote session (eg, with dgamelaunch), the session processes receive SIGHUP. But if a local user runs eg `killall crawl`, the processes are sent SIGTERM which crashes the game. Most job control systems (eg systemd, docker) send SIGTERM, so it makes sense to handle this with the logic that already exists for SIGHUP. Don't rename any of the functions or variables relating to this, eg handle_hangup or seen_hups. That can be done in a future commit, if desired. -------------------------------------------------------------------------------- 26c3a87c45 | gammafunk | 2020-04-11 00:02:29 -0500 Adjust wall selection for Frozen Ramparts (#1330) This spell used a distance iterator to select walls in range, but that iterator requires locations to be in bounds for player movement, meaning at least two squares from the map border. This meant that the spell couldn't affect otherwise normal walls adjacent to the map boundary, as seen in #1330. This commit switches to a LOS_NO_TRANS radius iterator, letting the player affect these walls with Frozen Ramparts. The use of LOS_NO_TRANS is a new restriction, but is appropriate since we don't generally allow damaging monsters behind glass. Additionally, this commit allows the spell to work on permarock walls, since there's no reason why these should be excluded. Closes #1330. -------------------------------------------------------------------------------- 23b457fb4a | gammafunk | 2020-04-10 20:04:04 -0500 Fix icy wall descriptions The icy walls made by Frozen Ramparts have a covering description for the 'x' and 'x-v' commands that wasn't updated when the spell was changed in c9638ee9a. Update the descriptions to refer to ice instead of icicles, and expand the wall covering description to give the effect details we provide for the spell. -------------------------------------------------------------------------------- 4f93b0e1ec | gammafunk | 2020-04-10 17:18:34 -0500 A Gauntlet map with a choke point The map gammafunk_gauntlet_mixed_choke_point features mostly 7x7 arenas, but with all 9 paths leading through a central 9x9 arena. The paths start with a choice of 3 7x7 arenas that are tier 1 difficulty, leading to the central arena that has a 50% chance to be tier 2, followed by a choice of 3 7x7 arenas that are tier 2. -------------------------------------------------------------------------------- 73332aeda9 | gammafunk | 2020-04-09 01:48:48 -0500 A gauntlet map featuring an early escape option The map gammafunk_gauntlet_77_escape_option features a linear path through 5 7x7 arenas where the player may take a transporter to the minotaur after each of the first four arenas instead of proceeding. Arenas upgrade to tier 2 difficulty as early as the 3rd arena, with the loot count likewise increasing. The average total loot from all arenas is 8.75 items, which is a bit higher than the average of 7.5 for other maps, but getting all items requires completing all 5 arenas. It's fairly likely that the player will encounter a difficult arena and want to exit to the minotaur instead, but the extra loot in the later arenas might compel them to take a risk. -------------------------------------------------------------------------------- f7d8cd8a05 | advil | 2020-04-08 21:44:19 -0400 Fix some demonic rune messaging issues (12232) The main problem here was that these mpr calls weren't run from the vault epilogue. Of course, epilogues were somewhat broken until recently so fixing those was a precondition for this commit. The logic fo holy pan is still a bit odd but I think it shouldn't cause any major problems unless pan ever gets pregenerated in bulk. The rest of 12232 was already fixed in ea548f19b60. -------------------------------------------------------------------------------- 50bb873abc | advil | 2020-04-08 21:17:03 -0400 Make vault epilogues work again This mostly affects messaging when entering wizlabs, and in cases where a special panlord level generated as the first Pan level and this level got generated out of order. (Could happen on full pregen, or if a player entegered a zig before pan.) Epilogues have been semi-broken since pregeneration. They are intended to run after the player has entered the level, but before pregeneration this always happened immediately after level generation with a guarantee of full generation information kicking around. The bug is that if a level is generated and not immediately entered, its vaults get saved to disk and the epilogue is not serialized. On load, an incomplete map_def is used for the vault information that is missing most things you'd need for generation (rightly so), including the epilogue. So the epilogue code tried to run, but was always empty in this case. Rather than serialize the epilogue (which may be possible, but seems like a bit of a minefield as I don't think we serialize any lua code right now), the fix here is to run the epilogue from the current .des cache's copy of the map. Obviously this could lead to save compat issues, but this is exactly how lua code for markers is handled and the issues are the same. -------------------------------------------------------------------------------- 0472a16d6a | advil | 2020-04-07 12:23:58 -0400 Suppress builder dprf spam from main message window by default These logs are saved with the level via a message_tee and are accessible via &ctrl-l in wizmode. This is basically because incremental pregen in a fulldebug build produces a huge amount of log spam whenever any non-trivial level change happens. Hopefully this doesn't step on some workflow I'm not thinking of, but it's configurable (and could be made more configurable). -------------------------------------------------------------------------------- 633e9c3c14 | advil | 2020-04-07 00:02:33 -0400 Work around a seed stability issue in regret_index_temple_of_mockery This places different monsters depending on player species. The choices it makes can affect rng differently depending mainly on the items that come with some of these monsters (but potentially other factors as well). This commit works around the problem by placing the mocking monster when the player enters los, rather than immediately. An alternative would be to use a subgenerator (perhaps for all vaults, or for some with a specified tag), but there's not a great way to do that that doesn't have a huge effect on many seeds that I came up wuth. It still might be worth doing in trunk. (cherry picked from commit d1d2a07e1b2fd3e404ac047ccad46cef83ad69a9) -------------------------------------------------------------------------------- 14964f1db5 | Edgar A. Bering IV | 2020-04-06 12:02:15 -0400 Make distortion tacticool The teleportation effect was a "light instakill" for distortion, with a variable impact from "a bit more than blink" to "that was a tough monster I don't want ambushing me so now I've got to hunt it down". Banishment works better as a true instakill, and the remaining weights have been moved to the other distortion effects. For comparison the old weights table: 33, SMALL_DMG 22, BIG_DMG 5, BANISH 15, BLINK 10, TELEPORT 10, TELEPORT_INSTANT 5, NONE And the new weights table: 35, SMALL_DMG 25, BIG_DMG 10, BANISH 20, BLINK 10, NONE This was not a proportional distribution of weight, and if the new distortion becomes too strong with a 10% banish these numbers can be further adjusted. -------------------------------------------------------------------------------- 9dbc7a090b | Alex Jurkiewicz | 2020-04-06 23:58:22 +0800 Add a basic gitignore -------------------------------------------------------------------------------- 3c463ed35c | Alex Jurkiewicz | 2020-04-06 23:58:22 +0800 Allow editing non-existent RC files Servers no longer need to create a blank RC file for every player in every game 🙌. -------------------------------------------------------------------------------- 2cfbf905ed | Alex Jurkiewicz | 2020-04-06 23:58:22 +0800 Fix to numeric game IDs -------------------------------------------------------------------------------- 763baa6c66 | Alex Jurkiewicz | 2020-04-06 23:58:22 +0800 Improve test coverage of auth.py -------------------------------------------------------------------------------- 1f78941bf9 | Alex Jurkiewicz | 2020-04-06 23:58:18 +0800 Add humanise_bytes() helper method Pypi's humanize cannot be used, as it is 3.5+ only. -------------------------------------------------------------------------------- e1c5cbf416 | Alex Jurkiewicz | 2020-04-06 23:39:22 +0800 Remove useless ValueError catch _parse_login_cookie() handles internal ValueErrors, and the remaining code shouldn't raise one. -------------------------------------------------------------------------------- e1ddf72ad1 | Alex Jurkiewicz | 2020-04-06 23:38:53 +0800 Fix returning user auto-login Not sure what caused this change in behaviour -- possibly related to Python 3 and/or Tornado upgrade? -------------------------------------------------------------------------------- 57989bdc17 | gammafunk | 2020-04-06 02:21:30 -0500 Fix Royal Jelly spawns for Absolute Zero Just as we do for Uskayaw's Grand Finale and other means of killing the Royal Jelly, run the usual fineff to create spawns when the monster is killed by Absolute Zero. -------------------------------------------------------------------------------- 31aab680a6 | gammafunk | 2020-04-06 02:05:22 -0500 Rework Absolute Zero range and spell noise Although this spell has some fundamental limitations compared to the other level 9 direct damage spells given its single monster effect and target randomization, it does feel kind of "cheap" at the highest ranges. Deleting a monster that comes into view in a single turn may be a valid effect for such a high cost spell, but doing this repeatedly can be a bit dull. This commit limits the range of Absolute Zero to 5 and restores the original behaviour of having noise scale with spellpower. The spell makes noise 40 effect at 0 spellpower, scaling down to 0 effect noise at spellpower 200. The casting noise of 9 at the player's position will always be present. Additionally we fix the spell noise display to properly consider spellpower in the noise description. This change doesn't prevent combinations of Vehumet, Darkness spell, Robe of Night, and the Nightstalker mutation from achieving LOS range for the spell, but getting those things in the right combination is at least somewhat rare. -------------------------------------------------------------------------------- de951dce62 | Aidan Holm | 2020-04-06 00:43:26 +0800 Don't use ncurses CFLAGS on tiles builds -------------------------------------------------------------------------------- 143fc31978 | Aidan Holm | 2020-04-06 00:43:26 +0800 Refactor LUA_PACKAGE/BUILD_LUA handling Again, the high-level goal (build lua if there's no suitable system version) was obscured by the huge if-else structure. -------------------------------------------------------------------------------- 79a37018c4 | Aidan Holm | 2020-04-06 00:43:26 +0800 Detect -rdynamic support automatically The platform-specific lines obscure the high-level concept: we want -rdynamic if it's available. -------------------------------------------------------------------------------- 31213489bf | Aidan Holm | 2020-04-06 00:43:26 +0800 Remove unused platform detection code The less of this gunk, the better. -------------------------------------------------------------------------------- cbee7f0cb1 | Aidan Holm | 2020-04-06 00:43:25 +0800 Use includes relative to source directory This makes the locations of files more obvious, allows improved file navigation in Vim, and eliminates the possibility of files being shadowed from the wrong directory. -------------------------------------------------------------------------------- 0fc42ec244 | Nikolai Lavsky | 2020-04-06 00:27:08 +0800 Allow autotravel to shafts (12196) Also, fix autotravel trying to path around shafts and ignoring shorter routes. -------------------------------------------------------------------------------- 4845790874 | Nikolai Lavsky | 2020-04-05 02:11:30 +0800 Fix stash search menu not showing tiles for some dungeon features Commit 4e0c6439 introduced a couple of bugs: * the stash search menu no longer displays tiles for some dungeon features, e.g. altars; * the ?/F lookup-help finds nothing for queries like `trap`, and `.*` displays a hard-coded description of a dry fountain instead of showing a list of all features. This happens because feat_by_desc() can no longer find a feature's dungeon_feature_type in the feature description cache. Previously, all feature names stored in the cache ended in a full stop. After 4e0c6439, strings returned by feature_description() no longer end in a full stop. As a result, the cache has no feature names that end in a full stop too, so feat_by_desc() should be changed accordingly. -------------------------------------------------------------------------------- 6fb8d1b6dd | Goratrix | 2020-04-05 02:07:10 +0800 Correct meliai and hornet spectral and simulacrum To properly derive the bee spectral and simulacrum tiles from the new meliai and hornet zombies. -------------------------------------------------------------------------------- 2667425ccc | Alex Jurkiewicz | 2020-04-05 01:56:15 +0800 Fix import sorting -------------------------------------------------------------------------------- 19a9338ac1 | Alex Jurkiewicz | 2020-04-05 01:56:15 +0800 Fix isort arguments -------------------------------------------------------------------------------- ccf301f2a3 | Alex Jurkiewicz | 2020-04-05 01:56:15 +0800 Add CI for webserver -------------------------------------------------------------------------------- 32492954b1 | Aidan Holm | 2020-04-05 01:55:05 +0800 Fix spurious lint failure -------------------------------------------------------------------------------- 603da076d2 | gammafunk | 2020-04-04 00:26:41 -0500 Fix some issues in a vault The vault gammafunk_dig_for_victory used light blue coloring for transparent stone, but this is the same color used for grates. Remove most of the wall recoloring, using it only inside the vault for transparent stone that's surrounded by transparent rock. This recoloring helps to draw attention to which tiles are diggable without looking odd from the outside. Supplement the wands charges in the supplied wand of digging so that it will have enough to dig a reasonable number of times if the player is going through the vault carefully. Also supplement the loot with more good potions and scrolls, so that we're more likely to tempt people in. Finally, remove no_item_gen, since it's not necessary, fix up the no_tele_into KPROP, and realign the DES statement. -------------------------------------------------------------------------------- a8a4922b4f | gammafunk | 2020-04-04 00:26:41 -0500 Update loot in a vault Supplement gammafunk_its_a_trap with more good potions and scrolls, so that we better cover the variety of things that might tempt a player. Also properly align DES statements. -------------------------------------------------------------------------------- e9988fc0fb | Edgar A. Bering IV | 2020-04-03 11:23:51 -0400 Allow autotravel to snuff foxfires (12188) Now that there is no self damage for walking into a foxfire autoexplore should walk through them. -------------------------------------------------------------------------------- 54349f4560 | Edgar A. Bering IV | 2020-04-03 11:19:46 -0400 Add attack strength punctuation to Vamp Drain (12183) -------------------------------------------------------------------------------- 3851f72b99 | Edgar A. Bering IV | 2020-04-03 10:45:29 -0400 Refactor and revise monster target acquisition set_nearest_mosnter_foe is very old, it has its own duplication of a distance_iterator. This commit refactors the function to use a distance_iterator and adds a LOS restriction to cells considered. As a consequence, ball lightning and foxfire no longer attempt to get at monsters on the other side of clear rock. -------------------------------------------------------------------------------- 2b5350a25b | Edgar A. Bering IV | 2020-04-03 10:45:28 -0400 Prevent torpor snails from slowing conjurations (12190) Foxfires and ball lightnings are spell intermediaries, not true monsters, and should not be slowed by torpor snails. -------------------------------------------------------------------------------- b30f108f01 | Kate | 2020-04-02 20:29:13 +0100 Add a missing TAG_MAJOR_VERSION check -------------------------------------------------------------------------------- 7f8a7979f0 | Nikolai Lavsky | 2020-04-01 22:47:36 -0500 Fix stray commas in chardump notes for dungeon features After c225cfcd, notes for dungeon features end in a comma instead of a full stop. For example, "60174 | Depths:2 | Found a sacrificial altar of Ru," -------------------------------------------------------------------------------- 25a338df49 | Andrew York | 2020-04-01 15:33:21 -0500 Update god-abil.cc Add "Absolute Zero" to the list of spells Vehumet supports (and therefore, can gift, right?) -------------------------------------------------------------------------------- bc3157b2f0 | nlavsky | 2020-04-01 20:34:05 +0100 Tweak staff of Olgreb description (#1334) As a followup to 234afa57, this commit replaces an outdated reference to multiple evocable spells with a reference to OTR. -------------------------------------------------------------------------------- 890751e744 | gammafunk | 2020-03-30 19:46:51 -0500 Update the changelog Through 0.25-a0-696-g42a9e46d90. -------------------------------------------------------------------------------- 42a9e46d90 | gammafunk | 2020-03-30 15:20:50 -0500 Fix grammar in a spell description (Goratrix) For Frozen Ramparts, fix a sentence and rephrase the description of how only one wall affects a monster at a time. -------------------------------------------------------------------------------- ec580293c3 | gammafunk | 2020-03-30 14:06:41 -0500 Update the Frozen Ramparts description Give some more basic details about how the damage works. -------------------------------------------------------------------------------- c26c3c957c | gammafunk | 2020-03-30 14:06:41 -0500 Reduce the range and damage of Frozen Ramparts This spell's current radius of 3 can create a quite large number of squares in typical use cases: 9 in corridors and potentially much more than this when used at junctions of multiple paths. Reduce the radius of effect to 2, which still gives plenty of affected squares. Also reduce the portion of the damage affected by spellpower by 20%. At a max spellpower of 50, it will slightly exceed the damage of Freeze. These changes will bring the damage per cast a bit more in line for a single school, level 3 spell. -------------------------------------------------------------------------------- b2edecfc75 | gammafunk | 2020-03-30 14:06:41 -0500 Use a spell range lookup instead of a constant All of the relevant code already has access to the spell range lookup function, so use this instead of an additional constant that could get out of sync with the spell data. -------------------------------------------------------------------------------- 52d85a3de6 | Kate | 2020-03-30 19:14:22 +0100 Make Frozen Ramparts damage awaken monsters -------------------------------------------------------------------------------- 382ef09bc6 | Umer Shaikh | 2020-03-31 00:50:09 +0800 Check holiness before casting dispel undead Commit 3b7ae84e64 removed SPELL_DISPEL_UNDEAD from monsters and replaced it with SPELL_DISPEL_UNDEAD_RANGE, but forgot to update the case in _ms_waste_of_time accordingly. This resulted in monsters attempting to cast dispel undead on non-undead creatures; before they never thought that was worth trying. This commit restores the check. -------------------------------------------------------------------------------- 234afa57d4 | Kate | 2020-03-30 02:20:06 +0100 Adjust the staff of Olgreb Give it a chance to deal poison arrow-flavoured damage on hit (similar to regular enhancer staves but only checking evocations skill), and remove its chance of casting Venom Bolt on top of OTR when manually evoked. -------------------------------------------------------------------------------- 75bb5f1c00 | Kate | 2020-03-30 01:55:52 +0100 Rework staves of poison Give them the same type of resistible damage-on-hit effect as other evoker staves, instead of just a weak skill-based chance to inflict poisoning. -------------------------------------------------------------------------------- f17ce215b2 | Kate | 2020-03-30 01:55:42 +0100 Consider magical staves and pain weapons to be wizardly for Trog conducts Pain-branded weapons and evoker staves were technically permitted under Trog, but very unlikely to be useful unless converting with the relevant skills already trained, which resulted in awkward edge-cases for some types of acquirement or chances of offering nearly-useless items. Instead add a stricter conduct preventing their use, resulting in piety loss or penance for making attacks with magical staves (including the various unrand staves) or pain weapons, or for evoking their abilities. -------------------------------------------------------------------------------- efd68434e6 | Kate | 2020-03-30 01:55:07 +0100 Rework the phial of floods The combination of high direct damage and summoned water elementals made it substantially more powerful than a lot of other evokers. Remove its very powerful summons, but keep their effect of applying temporary silence by applying a "waterlogged" enchantment to enemies within the flooding area. -------------------------------------------------------------------------------- a947b41d75 | Kate | 2020-03-30 01:39:14 +0100 Remove staves of power Their effect was already provided by a ring type, and is a lot less desirable on a weapon-slot item - staves of wizardry could likewise potentially also be removed or reworked. -------------------------------------------------------------------------------- 218c6e4ed0 | Kate | 2020-03-30 01:39:09 +0100 Remove crystal balls of energy Their design was very messy and they were ultimately mostly a trap for unspoiled players. Their complicated but potentially powerful effect is much more appropriate to an unrand than to a regular evoker, and so still exists in a similar form on the staff of Wucad Mu. -------------------------------------------------------------------------------- 9d5f834e75 | Kate | 2020-03-30 01:25:55 +0100 Remove lamps of fire Of the multiple types of direct-damage-based evokers (lamp of fire, lightning rod, and now tremorstones), their effect was the most underwhelming - the complicated targeter made them difficult to use reliably and the wand of clouds also has a similar but simpler effect. -------------------------------------------------------------------------------- a6edddd4f1 | Kate | 2020-03-30 01:16:29 +0100 Remove sacks of spiders Between boxes of beasts, sacks of spiders and phantom mirrors there were a large number of consumable summon-based evokers, resulting in increased inventory load for most characters. Although the sack does have the web effect, overall it's a much less interesting set of summoned creatures than the others. -------------------------------------------------------------------------------- 2a2dd087f9 | Kate | 2020-03-30 00:33:33 +0100 Remove fans of gales Miscellaneous evocable items are currently a very overloaded item type, with many items that are worth every character carrying once found, as well as a lot of duplicated effects. This results in lots of inventory slots being dedicated to evokers, a worse interface when picking items, and a lot of uninteresting choices between similar items. Narrowing down the list of evokers substantially will allow them to have a smaller number of distinct effects, without taking up so much inventory load. The fan of gales AoE knockback is a very niche escape effect, and isn't really interesting enough to dedicate an item to - it falls into the category of evokers that end up always being carried around even though in practice it's only quite rarely useful. -------------------------------------------------------------------------------- df4e720381 | Aidan Holm | 2020-03-29 22:55:33 +0800 Remove force_article parameter from thing_do_grammar() The only cases where this was non-false was when using feat_is_trap(); when this evaluates to true, the description passed to thing_do_grammar() started with a lower-case letter, so the feat_is_trap() check was redundant. -------------------------------------------------------------------------------- 38bdf733c1 | Aidan Holm | 2020-03-29 22:55:33 +0800 Remove add_stop parameter from thing_do_grammar() -------------------------------------------------------------------------------- 4e0c6439a7 | Aidan Holm | 2020-03-29 22:55:33 +0800 Remove add_stop parameter from feature_description() -------------------------------------------------------------------------------- c225cfcdae | Aidan Holm | 2020-03-29 22:55:33 +0800 Remove add_stop parameter from feature_description_at() -------------------------------------------------------------------------------- 76631587b9 | Aidan Holm | 2020-03-29 22:55:33 +0800 Extract god_speaker() function The name of the god will need to be substituted in via the i18n system, so that different languages can change the word order. -------------------------------------------------------------------------------- 857d98e98d | gammafunk | 2020-03-29 04:30:07 -0500 Add an effect flash for Absolute Zero Flash the screen light cyan upon successful cast. It would be neat to have a more custom animation that centered on the target, but this flash will do for now. -------------------------------------------------------------------------------- 38ce9ef878 | gammafunk | 2020-03-29 04:30:00 -0500 Allow Absolute Zero to target tentacles Otherwise it can't affect things like eldritch tentacles, which seems odd. This will leave blocks of ice where the tentacle or tentacle segment died, but this seems fine. Firewood and allied and neutral monsters are still excluded, as before. -------------------------------------------------------------------------------- f3ad0b3c7c | gammafunk | 2020-03-29 04:28:02 -0500 Add range scaling for Absolute Zero Replace the spellpower-scaled noise reduction with a spell range that scales with spellpower. The range scales from 1 at power 0 to 7 with max power, with the range typically being 5 when the spell is first castable. This is a more natural way to scale the strength of the effect with spellpower, and gives some reasonable incentive to train more Ice or use spellpower enhancers. Instead of scaling the noise, give the spell a casting noise of 9 and an effect noise of 25, which is still quite loud. -------------------------------------------------------------------------------- b3b5f875f8 | gammafunk | 2020-03-29 04:26:28 -0500 Fix two bugs for Absolute Zero Don't crash when using 'Z' with no monster in LOS. Also properly consider monster invisibility for messaging and attack prompts when such a monster is targeted by the spell. -------------------------------------------------------------------------------- 0b37f7bc48 | hellmonk | 2020-03-29 04:25:45 -0500 Absolute Zero, a replacement spell for Glaciate. This level 9 ice spell targets the enemy nearest the player (breaking ties randomly and skipping firewood and tentacles) and instantly kills it, turning it into an ice block. Because it always targets and kills the closest monster, range and damage scaling with spellpower don't work. Instead, noise decreases as spellpower increases, from an ear-shattering 40 at zero power to 0 at maximum power (the spell also always makes 4 noise at the player's location). This is one of the glaciate replacement proposals that's been kicked around on discord etc. Motivation for the change is that all four of the level 9 direct damage spells are large aoe spells, and of the four, glaciate seems to be the worst from both power level and interface perspectives. Also, ice is supposed to be the least blasty school I think? This spell is effectively single target damage, so there's some overlap with lcs and friends, but it's somewhat different in function. Some concerns with this spell: it's very feast-or-famine in terms of effect. Really good against Cerebov, horrible against packs of any significant size. If it's too good in the good situations, it could be nerfed by lowering the range or by adding a second school (probably hexes?); given the other effects available at levels 8 and 9 I don't anticipate absolute zero being op. It's much harder to buff the spell if it's too weak, and imo it's important that the new spell be at least as good as glaciate, preferably a bit better. It's also possible that this type of instant death effect will just lead to fundamentally bad gameplay, but that's to be decided by playtesting. Finally, replacing glaciate with absolute zero will nerf megazig characters. I don't consider megazigs a 'real' part of the game but that's probably worth noting. Commiter's Note: A subsequent commit will adjust this spell to replace the spellpower-scaled noise reduction with a scaling spell range from 1 to 7, with the spell typically having range 5 when it's first castable. Depending on how this feels in practice, we may later change the spell to have a fixed but smaller range of 5, possibly restoring the noise reduction so that spellpower is still relevant. I wrapped commit comment lines and ran checkwhite within this commit. -------------------------------------------------------------------------------- d2fb8c69fd | Aidan Holm | 2020-03-29 02:42:46 +0800 Extract known items menu to known-items.cc -------------------------------------------------------------------------------- 50981ef59b | Aidan Holm | 2020-03-28 21:10:53 +0800 Add server chroot migration scripts This adds some scripts for migrating aging server chroots to newer ubuntu images. Checkwhite change is needed since some inline patches require tabs. -------------------------------------------------------------------------------- c8f5b8b992 | Aidan Holm | 2020-03-28 21:08:11 +0800 Add missing mypy.ini (alexjurkiewicz) -------------------------------------------------------------------------------- ea548f19b6 | advil | 2020-03-27 17:50:48 -0400 Don't make splash noises during level generation This fixes one part of https://crawl.develz.org/mantis/view.php?id=12232. The other part is trickier. It's possible that everything to MSGCH_SOUND should be suppressed during level generation? -------------------------------------------------------------------------------- b977e01cb5 | advil | 2020-03-26 15:16:49 -0400 Fix a piercing + omnireflection crash If a piercing ranged attack is reflected by warlocks mirror, kills the thrower, and then hits a monster after that, the game would crash, because the attacker is invalid. This fix lets the piercing ammo continue without crashing by using YOU_FAULTLESS as the attacker in this case. It isn't quite right, since the to-hit is now calculated based on a fake YOU_FAULTLESS rather than a monster that the beam/ranged_attack objects no longer has access to. I can see a couple of possibilities; we could just make a copy of the monster (extremely heavy), we could somehow only clean up the monster with a fineff (tricky to implement), or rewrite this code to defer dead monster cleanup until the end of monster handling (also tricky to implement, but probably how I would do this if writing all of this code from scratch -- this would have avoided many, many bugs over the years). I can't see any simpler options than these right now. Another change might be to have the ammo vanish when the monster dies, on the premise that piercing is a magic effect that requires the thrower to be focusing. -------------------------------------------------------------------------------- ccc90369ac | advil | 2020-03-26 15:13:48 -0400 Don't let a reaching weapon override M_PREFER_RANGED This mainly affects merfolk javelineers. Because the reaching check unconditionally succeeded as long as the monster is at reaching distance, javelineers with a reaching weapon would prefer that weapon, never using their ammo. This is in contrast to how regular melee weapons work. -------------------------------------------------------------------------------- a69d64035b | gammafunk | 2020-03-25 14:46:07 -0500 Prevent felid revival in isolated Gauntlet areas Courtesy of a reddit report forwarded to me by amalloy, gammafunk_gauntlet_branching had an isolated area felids can revive into, since it's not flagged no_tele_into: https://i.redd.it/d16o9wqnavo41.png I've added some of the usual lava and statue decorations to this area. Additionally I've flagged this and some similar areas in gammafunk_gauntlet_one_two_three as no_tele_into. Although felids now can't revive into these areas due to the lava, might as well be extra careful in case we add weird new lava-swimming species or forms. I've checked the other Gauntlet maps, and they have no isolated areas, hence don't need updating. -------------------------------------------------------------------------------- ff0ac36fb1 | gammafunk | 2020-03-25 01:45:31 -0500 Properly apply effect noise for Frozen Ramparts Before we made the effect noise only at the player's position in addition to the casting noise at this same position. Instead apply the 8 effect noise at each affected wall position, which is where the effects take place. Also tweak the casting message to simply refer to ice instead of icicles, since the spell no longer has the latter theme. -------------------------------------------------------------------------------- ace7076f2c | Kate | 2020-03-23 20:39:50 +0000 Make indestructible vault trees unaffected by tornado (#12141) -------------------------------------------------------------------------------- 955fa49e81 | gammafunk | 2020-03-23 14:48:56 -0500 Adjust spawn locations of D:1 monsters Some vaults are small and place transparent rock, which means level generation monsters can spawn in LOS of players. Although a very large majority of these situations can be survived, it's not great to have such a monster onslaught from turn 1. The function _zap_los_monsters() deals with this by removing monsters that spawn with line of fire, but this both reduces monster count and doesn't handle monsters that have line-of-sight. Extending said function to line-of-sight would further remove monsters, so a better approach is to prune D:1 monster spawn locations without pruning the monsters themselves. This commit introduces PROX_AWAY_FROM_DUNGEON_ENTRANCE and applies it to level monster spawn locations on D:1. Any D:1 level monsters will not choose a spawn location within LOS distance of the player, choosing another location instead. This is just a strict distance check, not considering actual line-of-site to the player, to avoid situations where a monsters are very close to the starting position of the player, but just around a corner or door in the starting vault. This change doesn't handle monsters from any vaults that happen to generate too close. That would very rarely be an issue, and we leave _zap_los_monsters() in place to handle this reasonably. Objstat runs before and after this change confirm that D:1 monster counts and XP are not affected by this change. Now players who get the infamously small scummos_arrival_simple_fountains, recreated here for your viewing pleasure, can be glad they'll no longer be potentially surrounded by a swarm of instantly awakened monsters: ....... .T...T. ..mmm.. ..m{+.. ..mmm.. .T...T. ....... If there are concerns about D:1 being easier, we might look into providing some more interesting difficulty by adding some spicy rare spawns to the D:1 monster table. -------------------------------------------------------------------------------- 55ea3d2053 | gammafunk | 2020-03-22 13:31:19 -0500 Rework trap placement in a Volcano map (SFR) The map volcano_village placed an alarm trap in a mandatory passage near the start of the map. Move this to an area before the guaranteed loot room so that the player has more of a decision for triggering the traps. Also reglyph the map and rework monster placement a little; it was attempting to place a monster glyph that isn't defined, since the "villager" set for the fiery_guardians() function only makes two monster types. -------------------------------------------------------------------------------- 7a61802294 | Goratrix | 2020-03-23 00:47:40 +0800 Add zombie hornet tile -------------------------------------------------------------------------------- db1d69e2aa | Aidan Holm | 2020-03-22 14:37:46 +0800 Use single-line style for Python imports -------------------------------------------------------------------------------- 728da59b6a | Aidan Holm | 2020-03-22 14:37:30 +0800 Fix lint / type errors for userdb.py -------------------------------------------------------------------------------- e95d391c20 | Aidan Holm | 2020-03-22 11:53:55 +0800 Add some test cases for cookie authentication -------------------------------------------------------------------------------- ecb0247d05 | Aidan Holm | 2020-03-22 11:53:55 +0800 Extract cookie authentication logic to its own file -------------------------------------------------------------------------------- 74e85d6d08 | Aidan Holm | 2020-03-22 11:53:55 +0800 Refactor userdb.py with a context manager -------------------------------------------------------------------------------- 6255c8be16 | Aidan Holm | 2020-03-22 11:53:55 +0800 Fix lint errors -------------------------------------------------------------------------------- 6245e20cc0 | Aidan Holm | 2020-03-22 11:53:55 +0800 Add requirements.txt tools, formatting, and linting This commit adds a simplified build setup for the webserver project. User and developer dependencies are specified in requirements.in/ and compiled to version-pinned dependency lists in requirements/. This commit also adds some basic linting and formatting tools. All formatting warnings are disabled, and should be enabled one by one as the code is organized. I've also thrown in pytest and coverage, although I haven't set them up yet. -------------------------------------------------------------------------------- c9638ee9a8 | gammafunk | 2020-03-21 21:48:05 -0500 Simplify and rebalance Frozen Ramparts This spell nicely fills the gap left by the removal of Throw Frost, but it suffers from being a mashup of two ideas: mine was a wall-oriented positional spell and ebering's was a spell to slow monsters in some interesting way. The former idea is relatively straightforward for a damage spell, but slowing monsters has the potential pitfall of introducing too much kiting. There's room for a spell that does both, but this is harder to balance for the low-level spell we're going for. Right now the slowing aspect of Ramparts isn't interesting, and the spell is very strong while being in the strongest starting book in the game. This commit simplifies and rebalances the spell by removing the slow movement monster debuff and making the damage pure BEAM_COLD. Hence Ramparts is no longer partly resistable, but it will slow cold-blooded things like hydras. I think a mass-freeze spell that uses walls is interesting and reasonably balanced at level 3. I've also tweaked the damage message to include damage punctuation and to always use singular "wall" in the message. Many players aren't aware that only one wall can ever effect a monster regardless of how many icy walls are adjacent. Incidentally, this is also true of slimy walls burning monsters, but the player *can* be affected by multiple such walls. Monsters, they're dirty cheaters! -------------------------------------------------------------------------------- 8c222c7a2b | Aidan Holm | 2020-03-21 21:02:23 +0800 Remove open() call with both read and write modes Doesn't work on Python 3. -------------------------------------------------------------------------------- d8b0990838 | Aidan Holm | 2020-03-21 20:57:23 +0800 Fix str/bytes issues -------------------------------------------------------------------------------- c3cff19e7c | Aidan Holm | 2020-03-21 20:57:23 +0800 Add type hints -------------------------------------------------------------------------------- e9e63544fe | Aidan Holm | 2020-03-21 19:03:19 +0800 Convert exception indexing to py3-compatible code -------------------------------------------------------------------------------- d602d06ee1 | Kate | 2020-03-21 01:49:20 +0000 Mark scarves of rMsl useless with innate rMsl (#11157) -------------------------------------------------------------------------------- db18ab75e8 | gammafunk | 2020-03-20 18:09:45 -0500 Fix recasting after Divine Exegesis (AliasTheSpectator) It's possible to cast a spell under Sif's Divine Exegesis and then use the spellcasting interface to recast the spell using the '.' key even when the spell isn't memorized. Spells cast this way don't get the benefits of Divine Exegesis, so this bug only lets you save spell levels by casting unmemorized spells you'd otherwise already be able to cast. This commit fixes the spellcasting UI to properly unset the value of the last cast spell if it isn't memorized before the spell prompt is made, preventing the exploit. -------------------------------------------------------------------------------- b4487340cb | Goratrix | 2020-03-20 15:43:17 -0400 Fix randart weapon names (12228) Missing end of line, probably caused by the recent commits that reorganized the lookup files. -------------------------------------------------------------------------------- 7f95dfe86c | Byrel Mitchell | 2020-03-20 12:02:46 -0400 Added room for tactics to vaults in simple.des This file is also intended as a tutorial of sorts for reading vaults, so I attempted to keep changes I made as syntactically simple as possible. This was most impactful in some of the large vaults (eg erik_arrival_triangle_huge) which needed the first few rooms marked no_monster_gen; I made the entire vault no_monster_gen rather than introduce a KMASK in such cases to retain their syntactic simplicity. Vault list: minmay_arrival_wavy_path: Single path, single exit vault. I moved the entrance to the center of the wavy path and added second exit symmetrical to the first. matt_arrival_spirals: Two of the three starting locations could have you trapped by a randomly generated monster. Adding no_monster_gen allows the player to get to the main corridor, with multiple exits, prior to finding monsters. lemuel_arrival_funnel: The island in the center of this vault had a 1:8 chance of being removed. In that case, this vauls was single-path, single-exit. I removed that possibility from the SUBST list. minmay_arrival_pointy: Single path, single exit. I added a corridor between the points, which should allow you some tactical flexibility. dpeg_arrival_radiant: This had a change to generate a single exit; I changed it to guaranteeing two. I also fixed what appeared to be a typo making the top-right path have two chances to be closed off, instead of one like the rest of the paths. dpeg_arrival_tiny_i/j/k: These have the potential (or guaranteed for k) for the left end of the path to be blocked off by mapgen (making it single exit.) I added an escape hatch in case that happened. dpeg_arrival_windows_large_door: Single-exit room. I added a door to the back side of the room as well. erik_arrival_triangle_small/medium/large/huge: All of these have the potential for a monster to be generated in one of the first 3 rooms, before you have any interconnectivity or options. I marked these vaults as no_monster_gen; possibly they should be moved out of this file and a KMASK applied to just the first 3 rooms. minmay_arrival_plants_in_alcoves: Single path, single exit. I added an island made of plants/fungus/bushes/trees to the center. noname_arrival_rooms_in_the_neighbourhood: This one was single-exit rooms, and was missing the SHUFFLE statement to make it possible to spawn in each room. I added a second exit to each room and the SHUFFLE statement, and moved it to small.des since the header was too long for simple.des. onia_arrival_mini_spirals: This one had 4 paths with no interconnection and a single exit. I added a door connecting two of the paths and marked it as no_monster_gen to avoid a monster spawning in one of the initial spirals. zelgadis_glass_arrival_small: This has guaranteed islands outside of the spiral. I added no_monster_gen to avoid monsters spawning and blocking the initial spiral. dpeg_arrival_snail: Single path, single exit. I added a door to allow the player to generate a pillar in the center of the spiral while maintaining the current auto-explore spiral path. ncdulo_halloftheorcs: Single exit room into the rest of the vault with monster_gen on. I added a second exit to the room (facing the same direction to give the player a similar first time experience.) tarquinn_simple_flora_water_a: Single path, single exit. I removed the tree that kept you from walking around it. tarquinn_simple_flora_water_c: Each side is single path, single exit unless pool_fixup creates a shallow water path across. I added a second exit to each side (and eliminated a meaningless A in the second subst.) tarquinn_simple_flora_water_e: Single exit room. I added two more exits. saegor_arrival_simple_d: Single exit room, and no handy way to add an exit without changing the aesthetics. I added an escape hatch instead. scummos_arrival_gate: Single path into a single exit room. I added pillars of shallow water and lava to the sides of the path. lightli_molten_gateway: Single exit room, and no handy way to add an exit without changing the aesthetics. I added an escape hatch instead. mrwooster_arrival_statue_1/2/3: Open alcove design. I added a couple statues to the center to give the player something to work with tactically. wheals_arrival_linesprint: Single path, single exit. I added a door connecting two parts of the 'line-sprint'. wheals_arrival_shading: Room with a single exit. I added a couple islands. lightli_arrival_flooded_house: Single path, single exit. I added a second exit. giann_wishing_wells: This vault had a single exit with a plain antechamber; not much you could do aside from retreat to one of the sides. I added a couple more entrances to the antechamber. psy_arrival_conway: This vault actually had two shallow water exits (one toward the top and one toward the bottom) which could be used for pretty interesting tactics. However, it's not clear without fully exploring which of the 4 alcoves are dead ends and which have a path, which makes this spoilery. I added a third path across which ensures that no matter which way you run, you'll find a path before you have to commit to an alcove. psy_arrival_dodecagon: This vault had a 50% chance to be a single exit room. I added a second guaranteed exit. psy_arrival_heroes: This was a single exit room. I added a couple more hero statues which could be used as pillars or chokepoints as needed. wander_arrival_desolate: This vault is essentially just empty space. Odds are that this will be fine, since D:1 mapgen will probably put multiple entrances to it, but that's dependent on the current choice of map generator for D:1. Just in case, I added an escape hatch. I also applied the 'desolate' floor tiling to the features (arch, fountains, dungeon-exit, and escape hatch.) wander_arrival_chamber: Single exit room. I added two more exits. -------------------------------------------------------------------------------- 3cd4bd21d0 | RojjaCebolla | 2020-03-20 09:11:31 -0400 Add more kinds of divine favor tired of seeing Foo's Supremacy on items! -------------------------------------------------------------------------------- 391622d9d0 | klorpa | 2020-03-20 09:08:28 -0400 British Spelling corrections Most important are the corrections to the manual and options guide, the monster shouts, and the database descriptions. This commit also corrects a variety of comments in the codebase. [ Committer's note: Closes #1321 ] -------------------------------------------------------------------------------- 189b929d56 | gammafunk | 2020-03-20 03:01:20 -0500 Add a player ghost door_vault variant This door vault places multiple player ghosts, 7.5 on-average and up to 10. This will make an extra challenging yet rare door vault variant that's sure to delight fans of gammafunk_ghost_cemetary. Accompanying the ghost are 8 and 9 spawns, similarly to what is done for the original door vault. It uses the same common setup function as other door vaults, hence places multiple loot items, but additionally places two more specialized loot items that more aggressively upgrade in quality with depth, as it done for other challenging ghost vaults. There is a ghost room variant for Vaults to go along with variants for this branch added in prior commits. The weight of these variants is 2 both because they're extra challenging and to keep placement less than the main door vaults. -------------------------------------------------------------------------------- 6e2ea9a1e6 | gammafunk | 2020-03-20 02:02:42 -0500 Some tweaks to reverse_door_vault This variant of door_vault is unique in that it places a single upstairs in an enclosed area, with the doors revealing this area fully. I've modified it to use the common door vault setup function, so now it places appropriate loot. I don't change the levels of placement, since this one isn't interchangeable with the other variants. The monster set and count are fine, since it only uses 8 and 9 spawns in the same numbers as door_vault. Due to presence of a staircase, this vault in its current form will always be less prone to killing people. Hence I'll probably revamp it to add traps and/or specialized monster placement. -------------------------------------------------------------------------------- edb9745848 | gammafunk | 2020-03-20 02:02:42 -0500 Revamp not_door_vault_due This "elephant" door vault variant placed normal and dire elephants, but notably placed a single hellephant. Unfortunately, non-demonic elephants are not challenging through the range of this vault's placement, and a single hellephant does make up for this. So rather than leaving this as an easier door vault variant, I've revamped the monster set to focus on its hellish and demonic themes. I've also brought its level placement in line with the other door vault variants to reduce spoilers. The new monster set includes hell hogs and hell hounds for Dungeon, a chaotic theme for Elf and Zot, and a mix of hell knights, hellions and balrugs for other branches. At least one hellephant is always present, and additional ones are added, scaling with depth of placement, up to 4 guaranteed hellephants in Geh and Dis. As I've done for the other door vault variants, the common setup function is used, which adds appropriate loot. There is also now a version of this vault for the Vaults branch. -------------------------------------------------------------------------------- 0b42b9124f | gammafunk | 2020-03-20 01:53:36 -0500 Some tweaks to not_door_vault_mu Make this whimsical version of door_vault place over the same range as the actual door_vault. This way there aren't spoilers as to which branches can give you an easy door vault. Use the shared setup function, which also means we place loot. These vaults place late in the game and this variant is weight 1, so some free loot in exchange for the bravery of opening a door vault is fine. Finally, add a variant for Vaults branch as an "empty" room. -------------------------------------------------------------------------------- 88be836da1 | gammafunk | 2020-03-20 01:53:23 -0500 Revamp door_vault This is one of the great spoiler vaults that we allow to remain in the game, but the vault could use some improvements. Expand its placement a little to include D:13-14 instead of just D:$. Subsequent commits will reduce the number of spoilers it does have by giving it and its look-alike variants the same placement, for the most part. That way, no matter where you open door vault, you may discover an 8 and 9 spawn zoo, a hellephant zoo, or just a room full of lovely butterflies! Tweak the monster sets to have uniformly difficult branch-specific monsters together with end-level branch spawns at somewhat higher weight. Before this change, the monster lists had individual weaker monsters in addition to a high-weight normal branch spawn entry, which is redundant. I've also made the nasty spawns more memorable, with attention given to the top-tier branch-unique monsters. Finally, this commit adds a common setup function for all door vault variants to set loot and door markers and glyphs. Door vault was notorious for not placing loot, making it purely an exercise in XP gain. The addition of on-average 8 good items makes the decision to open a door vault feel less silly. -------------------------------------------------------------------------------- 9331b4e32b | gammafunk | 2020-03-20 01:50:38 -0500 Tweak placement of a ghost vault The vault gammafunk_ghost_crypt places ordinary liches in Dungeon, which are scary but comparable to other out-of-depth spawns for the branch, hence it doesn't need down-weighting there. Also allow it to place from D:13-D:15 instead of just D:15. -------------------------------------------------------------------------------- 0c6c292ef3 | Goratrix | 2020-03-19 19:05:01 -0400 Add the new octopode loading image to webtiles Commit ee0576305db0a1a64f1e85ae863a749289b8fd71 added the new image to local tiles, but not to webtiles. I used commit da47cbf8c3a56b00bc71d06f4eb5fa7dc4a1203e as a template for this. -------------------------------------------------------------------------------- d1561dc703 | klorpa | 2020-03-20 01:10:13 +0800 TypoFixes -------------------------------------------------------------------------------- 3dcfff35b7 | Goratrix | 2020-03-19 23:51:12 +0800 Fix spelling in god descriptions Correct spelling of 'worshiper' -> 'worshipper' in Sif Muna and Fedhas descriptions, consistent elsewhere in the game. -------------------------------------------------------------------------------- 7713895373 | advil | 2020-03-18 15:43:24 -0400 Refactor init_user to be asynchronous This code calls a script via a subprocess. On CAO, this script takes about 600ms to run on average for new users, and so was triggering timeouts on nearly every new user (potentially on logins as well), presumably blocking the server as well. This refactors things so that the exit condition is checked and handled in a callback rather than in the same function after the subprocess returns. (This code be cleaner in pure python 3, but I couldn't get any of those solutions to fully work with the needed backwards compatibility.) -------------------------------------------------------------------------------- c915619fb7 | advil | 2020-03-17 21:38:03 -0400 Fix a bytes/str issue (I think) I think this will pop up with any wrapper scripts, like save upgrades. I haven't been able to test this hypothesis because I don't have a local dgamelaunch-config setup to test it in, and the scripts are fairly complicated. -------------------------------------------------------------------------------- 764d637734 | Alex Jurkiewicz | 2020-03-17 18:48:41 -0600 Don't print to stderr This just messes up ordering of output, eg https://github.com/crawl/crawl/pull/1309/checks?check_run_id=486144227 -------------------------------------------------------------------------------- df4ec1e6d9 | Alex Jurkiewicz | 2020-03-17 18:48:41 -0600 Refactor deps.py * Simplify main program flow * Type functions -------------------------------------------------------------------------------- 0d1dd5979a | Alex Jurkiewicz | 2020-03-17 18:48:41 -0600 Add retry support to deps.py -------------------------------------------------------------------------------- ce76ff1ea0 | Goratrix | 2020-03-17 20:46:30 -0400 Small spelling and grammar fixes 1. Rattle-Snake -> Rattlesnake 2. rembered -> remembered 3. make capitalization consistent to the rest of the text and correct singular: 'A Ballistomycete release spores' -> 'A ballistomycete releases spores' -------------------------------------------------------------------------------- 6753bc3f19 | Goratrix | 2020-03-17 18:43:39 -0600 Correct transparency in shortened scarf tiles Deleted transparent pixels had RGB values white instead of black, causing slightly larger files. -------------------------------------------------------------------------------- 303c1a17cd | Goratrix | 2020-03-17 18:43:39 -0600 Shortened versions of scarf tiles (#12210) Some of the current scarf tiles are too long and obstruct the body armor underneath. This commit makes all of them the same length, which is 2 pixels shorter than the current shortest ones. -------------------------------------------------------------------------------- 55f492496c | Edgar A. Bering IV | 2020-03-17 20:39:48 -0400 Correct spelling (ByrelMitchell) -------------------------------------------------------------------------------- 16f5e22943 | theJollySin | 2020-03-17 20:34:30 -0400 Added a few more strings for random item name generation -------------------------------------------------------------------------------- fdc68c5d1e | theJollySin | 2020-03-17 20:34:30 -0400 Alphabetizing some random item word lists -------------------------------------------------------------------------------- 2400ba0dc2 | advil | 2020-03-17 20:28:36 -0400 Add a workaround for the LoggerAdapter py35 bug It seems that many typical server configurations at the time of commit are likely to have python 3.5 (thanks to alexjurkiewicz for investigating), so an actual workaround is probably a good idea. -------------------------------------------------------------------------------- 40a04f2576 | Byrel Mitchell | 2020-03-17 17:52:01 -0600 Fixes comment about Trog paralysis protection. passive_t::extend_berserk is available at 0 stars of piety, so there's no minimum protection level. -------------------------------------------------------------------------------- 63583cfaac | advil | 2020-03-17 19:12:18 -0400 Add a comment about the LoggerAdapter chaining issue -------------------------------------------------------------------------------- ba6b7f88fc | advil | 2020-03-17 19:12:18 -0400 Override a mypy error for backwards-compat code -------------------------------------------------------------------------------- 20d90ebb82 | Kate | 2020-03-17 20:02:09 +0000 Update some webtiles stat colouring It appears that the AC boost from the Demonspawn icemail mutation doesn't have support for being highlighted in webtiles, but otherwise this should now be back in sync with console colouring. -------------------------------------------------------------------------------- 382eb01629 | advil | 2020-03-17 11:19:27 -0400 Do admin check with a decorator Will make it less likely that the check ever gets broken, also now handles logging again. -------------------------------------------------------------------------------- cb3c808f77 | Aidan Holm | 2020-03-17 22:39:44 +0800 Simplify admin announce code Apart from the fact that this is less code, it's also more obviously correct, with less state to manage. -------------------------------------------------------------------------------- 73ad250637 | gammafunk | 2020-03-17 00:02:21 -0500 A player ghost level for Ziggurats This commit adds a player ghost monster set for Zigs that places ghosts of players who've died in a Zig. The rest of the monsters have suitable undead theme: * soul eaters for LOS-wide HP drain and spectral warriors to remove MR (moderate weight decreasing with depth). * deep elf death mages and ghost crabs to heal their fellow undead (flat, low weight). * shadow dragons for ranged and melee draining as well as trampling (flat, low weight). * eidolons for af_slow and revenants for dispel undead (increasing up to a moderate weight). * black suns for more dispel undead and slowing as well as antimagic (flat, low weight). * curse skulls and curse toes for torment and bogging players down with summons (flat, low weight). This gives a nice mix that's light on ghosts in early depths but ramps up to 5 or more by halfway through the Zig. The player ghost set replaces the "draining" monster set, since draining monsters are well represented by this new one along with the Tartarus and Crypt sets. This set remains at weight 2 to keep the frequency of "undead" floors from being too high. TODO: The Zig permastore bones file we ship has 45 ghosts, which is already over the max of 20 we allow for adding new ghosts. Since a server's permastore can thus only replace ghosts and won't grow past 45, and since the non-permastore bones file is even smaller, player ghost Zig levels are likely to see repeated ghosts. This is especially true of mega Zigs, where monster counts of 650+ mean that a given ghost will be repeated 12 times on-average. It might be good to have a higher limit for the Zig bones files specifically, and to perhaps save XL27 characters that die in extended branches in the Zig file. This is especially the case since we aren't currently using these extended ghosts, although that's a separate issue to address. -------------------------------------------------------------------------------- f4b266557c | advil | 2020-03-16 11:26:59 -0400 Tweak the logging fix getLogger always succeeds, so a try...except block wasn't the way to go. -------------------------------------------------------------------------------- 9bc587e015 | advil | 2020-03-16 11:19:44 -0400 Suppress most access logging for tornado >= 3 There was code to do this that worked for Tornado 2.4, but it needed to updated for later versions which have a more sophisticated logging setup. This hides the flood of `200 GET` messages that are involved in a normal connection. -------------------------------------------------------------------------------- 6918904177 | gammafunk | 2020-03-16 01:43:10 -0500 Properly set the admin flag in the WebTiles client Some testing code was leftover from debugging the client-side portion of the new admin panel such that all users saw this panel regardless of actual admin status. The user admin check was properly handled in the WebTiles server, so no non-admins could successfully use the message facility. This bug just affected the visibility of the panel in the client lobby. -------------------------------------------------------------------------------- d0df705f03 | advil | 2020-03-16 00:33:55 -0400 Fix the ancient tornado compat code I'm not clear on why this is necessary. Also, remove some debug code. -------------------------------------------------------------------------------- 7ee555d2e0 | advil | 2020-03-16 00:03:46 -0400 Fix an import Avoid unneeded lazy implicit loading -------------------------------------------------------------------------------- e46d086124 | advil | 2020-03-15 22:54:51 -0400 Move admin panel fully into client.html It turns out this may need to be manually copied, incorporate it back into client.html. -------------------------------------------------------------------------------- eab1ddba54 | advil | 2020-03-15 21:27:22 -0400 Remove some debug code -------------------------------------------------------------------------------- 85570c75f3 | advil | 2020-03-15 21:23:57 -0400 checkwhite new file -------------------------------------------------------------------------------- 7c741bda01 | advil | 2020-03-15 21:18:43 -0400 Add a rudimentary serverwide announce facility to webtiles This lets DGL admin users make server-wide announcements, e.g. if the server is going to shut down. The announcement appears both in game logs and in the chat window. The facility is pretty basic, but functional, and is designed with the intent that it would be *extremely* rarely used. Some questions: * should the admin panel remain part of client.html? * Is DGL admin the right permissions level? * what else should be added to the new admin panel? * is announcing to both the game and chat too much? * will this work with ssh games? (I think so?) -------------------------------------------------------------------------------- 75b0bbc335 | advil | 2020-03-15 21:07:51 -0400 Fix another bytes/string issue in a callback -------------------------------------------------------------------------------- 0321be95db | advil | 2020-03-15 12:58:32 -0400 A few cleanups to tornado compatibility code (aidanh) -------------------------------------------------------------------------------- 631d16749a | advil | 2020-03-15 12:36:23 -0400 checkwhite -------------------------------------------------------------------------------- 734848013d | advil | 2020-03-15 12:33:27 -0400 Tornado 2.4 compatibility hacks It seems that many or all servers may be running the patched version of Tornado 2.4 found in edlothiel's git repository. To ease transition to modern versions, this commit implements several compatibility patches needed to not completely break these servers. Everything in this commit is ugly and not supposed to be permanent. (We know how that always goes...) -------------------------------------------------------------------------------- 918647650c | advil | 2020-03-15 11:31:27 -0400 Log an error on `idle_connection_timeout` for old Tornado versions Previously, this just prevented the server from starting and users of old Tornado versions were instructed to install a patched version of Tornado. This takes an alternative strategy of just ignoring the timeout parameter, which is implemented on Tornado 4 and later. Hopefully this won't cause problems for any active servers... -------------------------------------------------------------------------------- 2bf96b3bd9 | Aidan Holm | 2020-03-15 23:03:52 +0800 Fix broken static files base path The existing setting is broken on newer versions of Tornado (>=3.1), and apparently ignored on older versions. This is not a significant security regression, as webtiles executes within a chroot anyway. -------------------------------------------------------------------------------- c9c9e4cfe1 | Aidan Holm | 2020-03-15 11:16:58 +0800 Add missing IOLoop import -------------------------------------------------------------------------------- b30770a0c0 | advil | 2020-03-14 11:24:37 -0400 A few small tweaks + one more byte/str fix * fix a regex (aidanh) * add an instance of `from __future__ import absolute_import` (aidanh) * fix a missed byte/str confusion: the function is correctly typed but it's only used as a callback, so the type checker missed it. -------------------------------------------------------------------------------- f09cd5ce19 | advil | 2020-03-14 11:24:37 -0400 Webtiles: static type annotations for low-level messaging This didn't find any further bytes/str problems, but it did find some messy Tornado inheritence stuff involving coroutines. -------------------------------------------------------------------------------- 9a49a99f9a | advil | 2020-03-14 11:24:37 -0400 Webtiles: minimal type annotations to pass static type checking This is done in a way for maximal python 2.7 compatibility, using comment annotations and very careful importing; not all versions of py27 will have `typing` even available without installing a package. (Though the most recent ones should.) However, to actually do the type checking, mypy should be run on the webserver directory in python 3.7 or so with Tornado 6, which has full type annotations. The fact that this passes is a good sign, but this commit only deals with a bunch of global variables that mypy complained about; everything else is implicit or inherited from Tornado. -------------------------------------------------------------------------------- 58c0c3d08e | advil | 2020-03-14 11:24:37 -0400 Updates for python 3 compatibility The most challenging part of this was, not unexpectedly, the bytes/str difference; I don't feel sure I've gotten every instance correctly. But, in my testing this does work for everything. After this commit, the webserver runs without change (as far as I have been able to tell) on both python 2.7 and python 3, as well as Tornado version 3.2.1, 5.1, and 6.0.3. The one thing I know I haven't carefully tested is ttyrec writing. -------------------------------------------------------------------------------- 6dcb09c756 | advil | 2020-03-14 11:24:37 -0400 Preliminary support for Tornado 5+ This involved 3 main changes: 1. restructuring how the ioloop is handled for Tornado 4.1+ standards. Previously, ioloop instances were manually managed, but this was deprecated in 4.1 and removed somewhere around 5. What I am not sure of is whether the previous code, when run on Tornado 3ish, entailed many ioloops in one process (something not actually supported by Tornado). 2. Rewriting GameDataHandler so that it doesn't override `get`. Apparently this is a challenging thing to do right; the new version parses the version number out of the url on request. 3. Restructuring shutdown/stop for better signal handling. The old code looks slightly broken to me, and I suspect that issues here may be the source of some issues where cleanup doesn't happen properly. There are also a bunch of other miscellaneous fixes, some pulled from webtiles-changes. In my testing, this actually seems to all be backwards compatible to Tornado 3.2.1?? Which is a bit too good to be true... -------------------------------------------------------------------------------- 443c2f7d93 | Aidan Holm | 2020-03-14 15:20:31 +0800 Remove remember-me checkbox It's pretty unintuitive to reload the page and be immediately logged out. -------------------------------------------------------------------------------- 2ad0d861f1 | gammafunk | 2020-03-13 00:02:02 -0500 Complete the documentation of c_choose_acquirement The previous commit's documentation was incomplete. -------------------------------------------------------------------------------- a39ba6bebb | gammafunk | 2020-03-12 23:54:57 -0500 A clua interface for scrolls of acquirement With the despoilering of acquirement in 0.25, a lua interface to the acquirement menu is necessary so that clua users can inspect the results and determine which item to choose. This commit adds a hook c_choose_acquirement() that is called if it's defined in clua. It's expected to return a valid index from the set of choices, using 1 for the first item as is customary for lua. If no c_choose_acquirement function is found, or if the call generates an error, or if the returned index is invalid, the acquirement proceeds normally to the acquirement menu. A valid call and return index will cause the indicated item to be acquired, bypassing the menu. This commit also adds items.acquirement_items() to the items library, which returns a lua array of items.Item representations of the generated items. All item details are provided, since acquirement gives fully identified items. If acquirement is not in progress, this function returns nil. Any c_choose_acquirement() function should call items.acquirement_items() and inspect the results to make a determination. I'll later add a commit to elliptic/qw#30 to add support for 0.25 acquirement to qw using this interface. Ideally we'd not have to have items.acquirement_items as its own function and could just pass the item table as an argument to c_choose_acquirement. I'm not sure if lua's "light userdata" facility can accommodate this, and we have limited support passing arguments from C++ to lua. If it turns out to be possible, we can refactor the interface in a later commit. -------------------------------------------------------------------------------- 1e14c549ee | gammafunk | 2020-03-08 17:19:33 -0500 Update the mailmap for one of kate's addresses -------------------------------------------------------------------------------- a6ea776cab | gammafunk | 2020-03-08 17:19:33 -0500 Update some vaults (minmay) The vaults minmay_tri_stars and minmay_expanding_circles have diggable loot areas or subsections. For tri_stars, these don't add anything aside from wasting wand charges or luring deep troll earth mages. In that vault, replace a back set of clear rock walls with floor for each loot location. Also adjust the depth check to specifically check for Depths branch instead of using an absdepth cutoff. For expanding_circles, the vault partitioning can better be done with clear runed doors, so add one for each inner section. Also tone down the loot placement, since this vault was placing one loot item per monster. Finally, remove some extra glyph usage that is no longer needed. -------------------------------------------------------------------------------- b4d47b2760 | Aidan Holm | 2020-03-08 21:11:21 +0800 Bump copyright year to 2020 -------------------------------------------------------------------------------- 4257648271 | Aidan Holm | 2020-03-08 19:52:28 +0800 Add zombie meliai tile -------------------------------------------------------------------------------- c85e6996e4 | Aidan Holm | 2020-03-08 19:52:28 +0800 Add development_mode webserver setting -------------------------------------------------------------------------------- 3e75c3e6b8 | Aidan Holm | 2020-03-08 19:52:28 +0800 Fix Loading... webtiles text not vertically centred -------------------------------------------------------------------------------- 696c2ac64d | Kate | 2020-03-07 14:55:13 +0000 Remove an extra newline -------------------------------------------------------------------------------- e45d3a369c | Kate | 2020-03-07 14:49:30 +0000 Don't list AC changes in descriptions when the player doesn't exist For example when looking up items from the main menu. -------------------------------------------------------------------------------- d0a4aac95e | Kate | 2020-03-07 14:46:52 +0000 Remove some duplicated AC info from descriptions The information on how much AC mundane armour would provide is mostly obsoleted by armour now displaying accurate details on AC changes later in the description. -------------------------------------------------------------------------------- 1597fd302c | Kate | 2020-03-07 14:41:32 +0000 Unbrace -------------------------------------------------------------------------------- 550ad5aafd | Kate | 2020-03-07 14:06:38 +0000 Don't display AC changes for unusable armour (Yermak) -------------------------------------------------------------------------------- c91f01c39c | Alan Malloy | 2020-03-02 14:02:15 -0800 Remove unused parameters (geekosaur) -------------------------------------------------------------------------------- a4619f409e | Kate | 2020-03-01 19:14:17 +0000 Update dragonskin cloak's resistances (Bcadren) To give rCorr instead of rSticky. -------------------------------------------------------------------------------- 50b708a4c4 | Kate | 2020-02-29 20:48:09 +0000 Prevent using tremorstones while confused As with other targeted evokers. -------------------------------------------------------------------------------- 05681f805d | Kate | 2020-02-29 20:48:09 +0000 Don't allow invoking decks when silenced Treat Nemelex's card draw abilities like normal invocations, since there's no special justification for them to be treated otherwise outside of their historical existence as items. -------------------------------------------------------------------------------- e92a065291 | Kate | 2020-02-29 20:48:09 +0000 Re-brace -------------------------------------------------------------------------------- 45c6412621 | advil | 2020-02-29 11:59:16 -0500 Disallow evoking lamp/phial while confused These two are almost the last remaining holdover of evocables that could be used while confused. (I notice that tremorstones also work.) These silently applied target fuzzing (see 657136525ae) in this case; if these were to be usable while confused in modern crawl, I think they would need to indicate to the player somehow what might happen. I ran across this in a crash where an extremely desparate player was constricted and chain-confused by golden eyes tried to target the constricting naga with the phial, and fuzzing cause the wave to go the other direction and hit a friendly demon. Luckily for this player, the game crashed during knockback on the demon. See cccf84277269a for wands, and 6178f7666a6f for rods. Unlike these cases, I do think it's possible that lamp/phial might not be completely useless with fuzzed targeting, so I wouldn't be opposed to bringing this back if someone can solve the UI problem. -------------------------------------------------------------------------------- 79084b9aa6 | advil | 2020-02-29 11:39:33 -0500 Add a pointer check to actor::collide This is to address a crash triggered by primal wave. It is in principle a bug that the agent would be unset when a collision is triggered by primal wave via phial, but I can't actually replicate the exact circumstances that cause it to be unset. I think it may be able to happen, somehow, when the player is confused? In any case, this code can't assume that a pointer argument will not be null like this. -------------------------------------------------------------------------------- b5e01bddfa | Edgar A. Bering IV | 2020-02-28 09:25:36 -0600 Remove evilmike_run_for_it We probably should have done this long ago, this arrival vault is a big spoiler and places a monster so doesn't pass older criteria for arrival vaults. With the hatch it does slightly better on the "permit tactics" score, but not well enough to be worth keeping. -------------------------------------------------------------------------------- 7c1f9fe3b3 | Byrel Mitchell | 2020-02-28 09:25:36 -0600 Add room for tactics to vaults in twisted.des I also simplified a few of the vault definitions by removing meaningless statements, etc. Vault list: - shiori_arrival_whats_in_store_for_you This vault has a single path and half of the time a single exit, which makes it possible for the player to get trapped by a bad monster spawn outside the vault. I made it always have 2 exits. - dpeg_arrival_solitude This vault has one of three single-exit paths. I added a second exit to each. I also simplified a shuffle/subst sequence that had meaningless features. - dpeg_arrival_connections This vault could potentially spawn you in a corner with no paths behind you; depending on what the randomly generated terrain and monsters are, that could be pretty bad. I added an escape hatch in whichever quadrant the player arrives in. - shiori_arrival_maze It's possible for this vault to only give you exits from the starting chamber to a single corner, and then only be able to leave that room to the outside through a singe exit. I added a second exit to each corner room. I also removed a meaningless SHUFFLE command. - erik_arrival_cave_to_civilisation The only guaranteed paths away from each starting location are single-tile-wide single-path corridors for quite a ways. I added a second internal path near each starting location to give some tactical space. - shiori_arrival_elements Another single exit vault. There's not really a way to add a second exit without screwing with the theme of this vault, so I added an escape hatch to the starting room. - nagdon_arrival_double_spiral Another single-exit, single-path vault. I removed a couple of walls in the center to provide some tactical depth while preserving the in/out spiral symmetry. I also removed a KFEAT statement with no corresponding glyphs. - nagdon_arrival_zigzag_paths There are two versions of this vault which were single-path, single-exit. I added a second exit to each. [ Committer's note: wrapped message to 80 cols. Closes #1299 ] -------------------------------------------------------------------------------- 5969469250 | Byrel Mitchell | 2020-02-28 09:25:36 -0600 Modify five vaults in large.des to add tactics The current arrival vault standard is for arrival vaults to have multiple exits, a hatch, or a large enough internal space for relevant tactics. I went through large.des picking out clear offenders (using the simplified rubric that anywhere a single gnoll could spawn should still leave you with more options than 'tab and hope you win.') elethiomel_arrival_infinity_welcomes_careful_drivers: This vault has an issue if a gnoll spawns in the closet just outside the starting room. I marked the contents of the infinity-symbol as no_monster_gen. erik_arrival_gehennom: This vault explictly places a goblin and kobold (with standard weapon generation) right outside the starting room. Many starts are incapable of fighting a goblin and kobold with a bad weapon spawn in this layout. This vault is also spoilery and doesn't even match any vaults in Nethack (which it's supposed to be an homage to.) I removed it. kilobyte_arrival_exit_the_forest: This vault is effectively a single long corridor with monster-gen on; if a gnoll spawns and you can't fight him, you're screwed. I added a path through the woods in the northwest so you have a large pillar to work with, and a second exit past the water to the south-east. arrival_zaba_pyramid: Each of the possible starting rooms are single-exit, and monster-gen is on. So it's possible for a gnoll to spawn right in front of the door to your room, and completely block you in. I marked the small intermediary rooms as no_monster_gen. minmay_arrival_shoal_huts: This vault is another case with single-exit entry rooms which can be blocked by an unlucky gnoll spawn. I added a hatch to each entry room as an additional option. [ Committer's note: wrapped message to 80 cols. Closes #1290 ] -------------------------------------------------------------------------------- e51c5052c3 | theJollySin | 2020-02-28 08:31:44 -0500 Improve the tactics of some overly-simple arrival vaults There were three vaults in particular without decent tactical options: * lightli_arrival_noodles * minmay_arrival_checkered_box * minmay_arrival_solitary_statue Two more arrival vaults were borderline and so got slightly tweaked: * dpeg_arrival_water_temple_mockup * evilmike_arrival_run_for_it [ Closes #1284 ] -------------------------------------------------------------------------------- 33daf1f691 | Alex Jurkiewicz | 2020-02-28 08:24:13 -0500 Don't fail CI if Codecov upload fails Pull requests from forked repositories don't have access to secrets in the master branch (because attackers could trivially retrieve them). This means we can't upload Codecov reports from cross-repo pull requests. Luckily, the Codecov action has an option for this. (In future, it would be better if this value was `true` for in-repo builds and false for cross-repo builds, but the implementation of that is awkward and probably not worth it. (For the record: write a previous step which uses a shell script to determine the parent repo and set `true` or `false` as an output, which you can reference to set the value of fail_ci_if_error.) -------------------------------------------------------------------------------- 062765be81 | ufshaikh | 2020-02-26 16:54:11 +0000 Put runes back on default autopickup (Lici the Crawler) (#1298) Fixes a syntax error in 458a23e4a. -------------------------------------------------------------------------------- 8875c97ebb | Kate | 2020-02-25 20:14:11 +0000 Remove Maxwell's etheric cage The upside of faster MP regeneration now exists in a fairly common form on amulets, and even if it were a more notable upside, the downside of doubled contamination also isn't very relevant with the removal of Haste spell. -------------------------------------------------------------------------------- e09e1d40ed | Kate | 2020-02-25 19:02:16 +0000 Update lightning rod description -------------------------------------------------------------------------------- 458a23e4a9 | Kate | 2020-02-25 19:01:24 +0000 Don't list zigfigs on the autopickup menu They're a unique(ish) item like the horn of Geryon, and not something that the player would want to toggle autopickup for in the course of normal play. Add them to default autopickup instead like runes, to make sure they don't get missed. -------------------------------------------------------------------------------- 93f73f95a8 | Umer Shaikh | 2020-02-25 19:01:09 +0000 Disallow -tele on artefact weapons and jewellery -tele is usually not a meaningful bad artefact property on weapons and jewellery, since swapping away from those items is so quick. Furthermore, putting -tele on quick-swapping items allows the player to explore with a -tele item equipped and swap to their "real" equipment for fights, thereby avoiding teleport traps and teleportitis at marginal cost. This is frustratingly uninteresting gameplay. And it allows the player to neutralize the gameplay benefits of teleport traps with little risk and no real investment or decision-making regarding their character's loadout. A simple solution is to prevent -tele from spawning on any weapons or jewellery. We could also try to make sure that on jewellery and weapons -tele always pairs with other properties that make swapping less trivial (*contam, fragile, harm, etc.), but I am skeptical that the complexity is worth the trouble. I also considered changing the behaviour of -tele to stop translocations only from an internal source. Then wearing -tele would not affect teleporting unless the player could already choose whether or not to teleport, so there is no reason to swap to -tele to explore. However this is additional "player-facing" complexity, in that there is another somewhat fiddly rule for the player to learn; even very careful players don't need to know about rules governing placement of artefact properties. Furthermore it does not address the first issue mentioned, that weapon and jewellery -tele is rarely an interesting drawback. Finally this approach takes away an arguably interesting strategic choice that players are making, to wear -tele on armour to prevent teleport traps in particular places (esp. Zot). [ Committer's note: simplified and added a comment. Closes #1292 ] -------------------------------------------------------------------------------- 0977b4d109 | Nicholas Feinberg | 2020-02-24 21:28:59 -0800 Rename a variable (alexj) -------------------------------------------------------------------------------- 3013cc3748 | Nicholas Feinberg | 2020-02-24 21:28:56 -0800 Remove Call Imp type scaling (Wise Wolf) The type of imp you could get would vary subtly with spellpower, but only after a baffling secret 46-power breakpoint. (Introduced in 854173f2e9b9 / 48f4e9825740 almost 10 years ago, at a time when the maximum power for the spell "seemed to be 71"?) I don't think there's any particular need to make a level 2 spell marginally more useful in the mid-game, and this change should have almost no effect on how the spell is used in practice. Just simplifying it so we don't need fun graphs like https://i.ibb.co/qBvQt9d/unknown.png . -------------------------------------------------------------------------------- be304fddcf | Nicholas Feinberg | 2020-02-24 21:07:38 -0800 Improve new Brilliance (bhauth, kate) Restore the duration to its old length, to match might and stabbing - the new effect and the old one were closer in power than I'd realized at plausible mid-game stat + skill values. Also remove the hunger cost entirely, to make the effect more dramatic. -------------------------------------------------------------------------------- 78a2afb0af | Kate | 2020-02-23 21:54:57 +0000 Remove Berserk's strength bonus as well For consistency with might. -------------------------------------------------------------------------------- 38680ca743 | Kate | 2020-02-23 21:49:31 +0000 Don't recolour Dex on the HUD with agility active -------------------------------------------------------------------------------- e1aed2b2b9 | Nicholas Feinberg | 2020-02-23 13:48:47 -0800 Cleanup might potion str -------------------------------------------------------------------------------- c801180b7c | Nicholas Feinberg | 2020-02-23 13:11:38 -0800 Remove the str bonus from !might !might is a potion that makes you much better at melee combat. It also, incidentally, gives you 5 str, which adds a little more melee damage, improves your accuracy and spellcasting chances in armour, and so on. Simplify and focus on the core idea of the potion by removing the bonus strength. The bonus damage remains very beefy and noticable, and there are plenty of other ways to play with HUGE STRENGTH. -------------------------------------------------------------------------------- a2a17f8f3d | Kate | 2020-02-23 20:55:54 +0000 Update brilliance status description -------------------------------------------------------------------------------- 6c87d81395 | Kate | 2020-02-23 20:42:20 +0000 Improve potion of stabbing description -------------------------------------------------------------------------------- 72f5e5e9d2 | Kate | 2020-02-23 20:42:20 +0000 Update status documentation -------------------------------------------------------------------------------- 797ef2793a | Kate | 2020-02-23 20:42:16 +0000 Simplify agility to only apply bonus evasion Remove the +5 dex and bonus to stealth, both of which were far less relevant than the fixed bonus to evasion. -------------------------------------------------------------------------------- 26026c6c98 | Nicholas Feinberg | 2020-02-23 07:57:34 -0800 Rework the potion of brilliance At present, the potion of brilliance is an odd bird. It decreases spell failure cost dramatically and increases spell power slightly, essentially acting as a 'potion of cast high fail chance spells'. This encourages players to memorize spells that they can't normally cast just for the few times during a game they'll use !brill. The UI for this isn't great (how do you tell what your fail chance will be after you drink it?), and it's relevant to almost all characters, meaning that everyone's inventories and tactical options are cluttered with it. This changes !brilliance to instead do two specific things: act as a universal spell enhancer (like archmagi) and reduce spell hunger costs by half. The former is a buff for 'casters', but probably not something most 'melee-focused' characters care about (and thus need to have in their inventory). The latter is intended to act as moral encouragement to blast away with your most powerful spells while the potion is running. The new brilliance looks more powerful than the old one, so its duration is roughly halved. -------------------------------------------------------------------------------- 6e6e6501ad | Kate | 2020-02-22 17:03:09 +0000 Mark a slime entry vault as no_tele_into (#12206) -------------------------------------------------------------------------------- 19b58906dc | Kate | 2020-02-22 17:03:09 +0000 Re-brace -------------------------------------------------------------------------------- 27a0b5d1ef | Nicholas Feinberg | 2020-02-20 20:08:31 -0800 Fix tremorstone vaults -------------------------------------------------------------------------------- 0bd1ac1125 | Nicholas Feinberg | 2020-02-20 19:11:51 -0800 Make tremorstones multi-use As with boxes of beasts and sacks of spiders, each tremorstone item can be used repeatedly until it (1/3 chance) collapses. The goal is to make them a bit stronger and worth carrying, since a single shot of a rare item wasn't quite worth it in practice. -------------------------------------------------------------------------------- e4db218afc | gammafunk | 2020-02-20 00:01:59 -0600 Update the changelog (PleasingFungus, Ge0ff) Through 0.25-a0-544-gee0576305d. Remove the entry for the staff of Battle, since that was already released in 0.24! oops. -------------------------------------------------------------------------------- ee0576305d | gammafunk | 2020-02-19 15:07:35 -0600 A new octopode splash screen from Nibiki Nibiki has agreed to license this image under CC0. Many thanks to him for this great artwork. -------------------------------------------------------------------------------- 450b2806fe | Alex Jurkiewicz | 2020-02-19 15:33:28 -0500 Create ~/.ccache if needed -------------------------------------------------------------------------------- 5e20511321 | Byrel Mitchell | 2020-02-19 10:06:18 -0500 Change chance of triggering paralysis/pain bond to be turn-length invariant Previously, this formula gave you a significant higher chance of triggering a paralysis or painbond event per aut if you were taking shorter actions: 0 auts remaining on TIMER: 10 aut turn => 0.01 events/aut 5 aut turn => 0.02 events/aut 200 auts remaining on TIMER: 10 aut turn => 0.0033 events/aut 5 aut turn => 0.004 events/aut This incentivizes doing fast actions whenever you have to wait at higher piety instead of simply resting. It's even optimal when enemies are out of sight, since a paralysis/pain bond event triggering when no enemies are in sight resets the relevant TIMER to 0. The new formula makes the expected value of events proportional to the duration of the turn, and so eliminates all turn-length dependence except for rounding errors. Event rates are all set to the same as with 10 aut actions previously, regardless of action length. This is probably a slight nerf in general, but a significant nerf to quickblade Uskers. -------------------------------------------------------------------------------- a829c891c6 | Alex Jurkiewicz | 2020-02-19 09:39:17 -0500 Improve macOS Makefile support BSD sed (used on macOS) lacks -r and has different semantics for -i, which causes some incompatibilities. Allow the user to override the sed command for these sed calls, eg "make SED=gsed" macOS also has BSD find which lacks -o as an alias for -or. Change the Makefile to use -or as GNU find also supports this. -------------------------------------------------------------------------------- 8ea5abb603 | Alex Jurkiewicz | 2020-02-19 09:38:35 -0500 Add size limits to ccache -------------------------------------------------------------------------------- c37ea4fa11 | Alex Jurkiewicz | 2020-02-19 09:38:35 -0500 Display ccache config per-build -------------------------------------------------------------------------------- 0a83c12206 | Alex Jurkiewicz | 2020-02-19 09:38:35 -0500 s/coveralls/codecov/ -------------------------------------------------------------------------------- bfe250d9be | Alex Jurkiewicz | 2020-02-19 09:38:35 -0500 Exclude catch2-tests/ from coverage data -------------------------------------------------------------------------------- 360c081f3e | Alex Jurkiewicz | 2020-02-19 09:38:35 -0500 Disable Codecov pull request comments -------------------------------------------------------------------------------- 9273b557bc | Edgar A. Bering IV | 2020-02-19 08:47:09 -0500 Update new dev guidelines As the newest dev I suppose this falls to me. This update restores the information about the process for adding a member to the team that got lost in the dev-doc-shuffle of 2017, wraps things to 80 columns, and updates some links and process information to point to github. -------------------------------------------------------------------------------- 8cb9f22522 | Edgar A. Bering IV | 2020-02-19 07:54:11 -0500 Wrap to 80 columns Closes #1275 -------------------------------------------------------------------------------- f48561505f | Alex Jurkiewicz | 2020-02-19 07:54:11 -0500 Remove install instructions for Void Linux They were added several years ago by a now deleted user in #460. The package names are all unsurprising and no special steps are required, so it seems unnecessary to include. -------------------------------------------------------------------------------- 9592c2e932 | Alex Jurkiewicz | 2020-02-19 07:54:11 -0500 INSTALL.md improvements * Install pngcrush & advancecomp * Add a section on using DCSS's packaged dependencies -------------------------------------------------------------------------------- fa7a6018de | Nikolai Lavsky | 2020-02-19 07:02:08 -0500 Don't mention player-only mechanics in monster spells descriptions Several monster spells use descriptions of similar god abilities, which reference the Invocations skill or player-only mechanics. Fix this and, as a followup to 9231cdcb, adjust description for the Drain Life spell. -------------------------------------------------------------------------------- 60722c7f10 | Nikolai Lavsky | 2020-02-19 07:02:08 -0500 Extend alias functionality for database lookups Currently, descriptions for abilities, spells, and dungeon features can be reused via aliases, d52d0508. But it's not possible to use an alias and then add details to it. This commit adds support for a new type of marker for database entries, [[foo]]. Any [[foo]] marker in a database entry will be replaced with a corresponding entry's text before being displayed to the player. -------------------------------------------------------------------------------- 88f1615ccf | Nikolai Lavsky | 2020-02-19 06:57:56 -0500 Update Summon Drakes description Dragons were cut from the spell and replaced with lindwurms in 9b5a2163. -------------------------------------------------------------------------------- 6b7c99946c | advil | 2020-02-18 16:35:06 -0500 Convert dummy agility to stabbing, not degen -------------------------------------------------------------------------------- 3d8dea327d | advil | 2020-02-18 16:31:09 -0500 Assimilate handling of dummy agility to other removed potion types This is unfortunately ugly, but it does not crash. Basically, treat this very temporary potion like any other potion that's been removed -- even though it's last in the enum, keep it around until a major version tag, and do save compat unconditionally. This is a semi-revert of 08029b5080ff (sorry). -------------------------------------------------------------------------------- 11ec75b3b8 | Kate | 2020-02-18 20:21:48 +0000 Fix a flight message not displaying Appears to have been broken by 4dc341646031. -------------------------------------------------------------------------------- 55f47c2aea | Kate | 2020-02-18 20:21:48 +0000 Reword a hint -------------------------------------------------------------------------------- c048b62713 | Kate | 2020-02-18 20:21:48 +0000 Fix a monspeak entry (#12201) -------------------------------------------------------------------------------- 9afb2ee040 | Nicholas Feinberg | 2020-02-17 18:41:16 -0800 Remove a funny message Jokes are like fish: they begin to smell after three days. -------------------------------------------------------------------------------- 2462c7bb1f | Nicholas Feinberg | 2020-02-17 15:55:10 -0800 Fix garbage potions -------------------------------------------------------------------------------- b5d5f98535 | Nicholas Feinberg | 2020-02-17 09:15:12 -0800 Cleanup !agi cleanup -------------------------------------------------------------------------------- 08029b5080 | Nicholas Feinberg | 2020-02-17 09:08:39 -0800 Cleanup !agi Remove the dummy potion hack. -------------------------------------------------------------------------------- 16a9eb376c | gammafunk | 2020-02-17 02:49:30 -0600 Mark potions of agility as removed (Yermak) It's necessary to add these potions to the removed_items set so that we don't get a "potion of bugginess" entry in the unknown item listing of the identification menu. This entry might also be necessary to disable things like generation, but I haven't checked this. A subsequent commit should TAG_MAJOR various portions of agility potion code, the related agility duration code, and remove the effect from the list of Xom effects. -------------------------------------------------------------------------------- 766966629d | Nicholas Feinberg | 2020-02-16 22:10:34 -0800 Potion of agility -> stabbing Potions of agility were not an interesting item. You plopped them on when you were going to get in a big fight and they made you take slightly less damage. It wasn't something that you used differently from !might or !brill or arguably !haste, just another buff to stack on the pile and clog up your inventory. Instead, replace !agility with !stabbing, which gives a 50% chance to upgrade weak stabs (distraction, etc) to strong stabs (sleep, etc). This is most useful for 'stabbers', but any character that can generate distractions (from allies, evocables, gods etc) and stab people can use it, in a reasonably meaty and distinctive way. Minor note: it's not marked useless for Ru chars who sacrificed stealth because they could, in principle, still stab. (I think?) -------------------------------------------------------------------------------- f8b3a32422 | gammafunk | 2020-02-16 17:50:41 -0600 Adjust floor and overlay tiles for Frozen Ramparts With CanOfWorms' wall overlay tiles, the tiles for floors adjacent to icy walls and for icy floor overlays look too bright and cyan. This commit lightens and adjusts hue for both sets to work better with the wall overlays. Now the icy floor tiles aren't such a contrast compared to the final overlayed icy walls for wall types with darker tiles. The wall overlays currently have clear boundaries between tiles. If these overlays were reworked to fit together more continuously like our wall and floor tiles do, it would improve the appearance. The floor overlays are not necessary now that we have wall overlays, but the floor overlays do fit together nicely and help break up the wall boundaries, so I'm keeping them for now. -------------------------------------------------------------------------------- 7d600cd9ad | gammafunk | 2020-02-16 00:13:57 -0600 Have Fedhas protect plants from clouds (sdynet, 12195) Fedhas now protects plants from a wide variety of player effects, including explosions and LOS damage spells, but clouds aren't currently included. Since we now track god conducts for cloud placement, it's best to have the prevent placement of harmful clouds made by Fedhas' worshipers at the locations of plant allies. This prevents e.g. scrolls of immolation having Fedhas ally protection from the explosions but not ally protection from the flame cloud placement. -------------------------------------------------------------------------------- 2e551bc22a | gammafunk | 2020-02-16 00:13:57 -0600 Remove an unused function argument -------------------------------------------------------------------------------- fc522ff6eb | Aidan Holm | 2020-02-16 13:34:42 +0800 Disable lua load(), loadstring() bytcode loading -------------------------------------------------------------------------------- e77a69270c | gammafunk | 2020-02-15 01:25:06 -0600 Clean up icy walls upon level load Frozen Ramparts creates "icy walls" with the FPROP_ICY property. It expires the props when the Ramparts duration expires, but early versions of the spell didn't do this properly. In this commit we unset the prop for all squares with the property that don't that aren't properly in LOS of the last position of any active cast of Frozen Ramparts. This will fix walls changed by buggy versions of the spell upon level load. This cleanup is tag-majored, since it shouldn't be necessary for versions where the spell logic is fixed. Additionally, the icy wall presence level state is now updated properly upon level load when any valid icy walls are found for a current cast of Frozen Ramparts. Previously this wasn't done, so casts active at time of save didn't have working icy walls when the save was reloaded. -------------------------------------------------------------------------------- a8e59b5b3b | gammafunk | 2020-02-15 00:54:50 -0600 Properly handle recasting of Frozen Ramparts (shummie) This spell should only be castable when the Ramparts duration isn't already active, but I never added this restriction. By recasting the spell before the duration expires, we allow too many icy walls at once. This also creates a bug allowing semi-permanent icy walls. The previous set of walls never had the icy wall property cleared, so when later casting the spell, the old walls would become active if in LOS of the player. With this commit, Frozen Ramparts can't be cast until its duration expires. A subsequent commit will fix walls with stale property flags by cleaning those up upon level load. -------------------------------------------------------------------------------- fc656d3889 | gammafunk | 2020-02-15 00:52:01 -0600 Improve UI for attempting to recast Dragon's Call Move the check to deny casting the spell when either the Dragoncall or -Dragoncall durations are active to spell_uselessness_reason(). Now Dragon's Call is properly marked as useless while these durations are active. -------------------------------------------------------------------------------- e065f6de7d | Kate | 2020-02-14 14:06:15 +0000 Turn the boots of the Assassin into a hat The flavour of detecting monsters and spotting vulnerabilities didn't really fit on a pair of boots, and is much more appropriate for a piece of headgear. -------------------------------------------------------------------------------- 1cd534d472 | Kate | 2020-02-14 14:03:06 +0000 Remove Bloodbane and merge its properties into Leech Leech loses its tacked-on AC-3 and EV-3 and gains Bloodbane's main distinguishing feature of */+Rage, with Leech's reliable vampiric effect to help compensate for *Rage as a downside. -------------------------------------------------------------------------------- 3095992e70 | Kate | 2020-02-14 12:43:57 +0000 Fix the skin of Zhor's inscription Since it was claiming to cast the wrong spell. -------------------------------------------------------------------------------- f66f01b915 | gammafunk | 2020-02-14 01:47:29 -0600 Fix unrand uniqueness for acquirement (AliasTheSpectator) Scrolls of acquirement copy item definitions for the generated items and remove the created items, only re-making the selected item when the player makes a choice. For unrands, the item def has to have its uniqueness status cleared, but this wasn't properly reinstated if the unrand ended up being chosen by the player. Hence it was possible to generate a specific unrand again after acquiring it, either through another acquirement or as random loot. With this commit, we properly set the unrand's uniqueness status when making the final item in acquirement, making it actually unique. -------------------------------------------------------------------------------- 344202577d | gammafunk | 2020-02-14 01:47:29 -0600 Fix acquirement for rare cases (amalloy) If you worship Trog and have all 27 skills, the current acquirement code will always generate a menu with one less item than usual when the book class is randomly chosen. This is because Trog hates all spellbooks and all manuals are useless, so no valid acquirement book item can be made. This is an obscure case, but in general we'd like the acquirement code to be more robust for handling classes where we can't generate an item for whatever reason. This commit refactors the code to generate each item as it iterates over all possible classes in a random order, only adding to the final set if an item could be generated for a given class. This will stop when we've reached the desired number of items or when we've exhausted all valid item classes. Hence the acquirement choices will be as close to the desired number of items as we can make it. -------------------------------------------------------------------------------- ae4569222e | Nicholas Feinberg | 2020-02-13 21:01:39 -0800 Split tremorstone explosions in half (Wise Wolf) This makes them effectively 6x resisted by AC, which means they're *actually* relatively safe to use as a moderately armoured character. -------------------------------------------------------------------------------- 768f60da87 | Aidan Holm | 2020-02-13 21:31:55 +0800 Disable lua bytecode loading -------------------------------------------------------------------------------- e281fa673e | Nicholas Feinberg | 2020-02-12 07:35:54 -0800 Value Tremorstones lower Since they're single-use now, make them worth a bit less in shops and acquire them in pairs. -------------------------------------------------------------------------------- 6516661a7a | Nicholas Feinberg | 2020-02-11 19:40:18 -0800 Re-alphabetize items.txt -------------------------------------------------------------------------------- 299d110614 | Nicholas Feinberg | 2020-02-11 19:17:37 -0800 New single-use item: Tremorstone Tremorstones are single-use evocables that cause a radius 2 explosion at range 3. Their explosion is skewed by 1 tile from the target, so they always have at least a 1/3 chance of hitting the player. However, since they do 6d12 BEAM_FRAG damage, players with 20-25 AC will usually take little to no damage. (BEAM_FRAG checks 3x AC.) As such, this is intended to be a fun toy for well-armoured characters and a desperation option for others. A design space that I've wanted to explore for many years is the '3x AC' damage type (ala LRD and the late, lamented Orb of Fragmentation). I initially tried to make it into a spell, but it's very much the opposite of the modern Earth school philosophy and in general makes more sense as a tool for armoured, less-spell-focused characters. This will always warn about self-targeting, which is a bit clunky. Since it's not especially common and it's nice to warn players who might not have read the description before they blow themselves up, though, that seems OK. -------------------------------------------------------------------------------- e26b6a5e7f | gammafunk | 2020-02-11 18:40:23 -0600 Some changelog trimming (PleasingFungus) Remove a couple things that are basically minor bugfixes. Don't mention the two float vaults, since that's better HYPED in the Trunk Updates. Despite the request of our beetle overlords, I'm keeping the cloud god conduct changes entry, since that impacts some fairly commonly scenarios like use scrolls of immolation. -------------------------------------------------------------------------------- 34b160fbb8 | Kate | 2020-02-11 23:54:41 +0000 Adjust some unrand descriptions -------------------------------------------------------------------------------- fae6501f5f | Kate | 2020-02-11 23:54:37 +0000 Remove incorrect Xom pronouns -------------------------------------------------------------------------------- cd06b9e333 | Kate | 2020-02-11 23:33:46 +0000 Improve handling of skills for manual acquirement De-duplicate a list - WJC wasn't correctly handled in the check for skill uselessness. -------------------------------------------------------------------------------- 8c4878dea3 | Kate | 2020-02-11 15:54:59 +0000 Fix some changelog typos -------------------------------------------------------------------------------- 8e6394d6b4 | theJollySin | 2020-02-11 08:12:40 -0500 Fix an outdated file reference in a comment [ Committer's Note: Small wording and colour tweaks, elaborated on commit messages and adjusted tense. Closes #1254 ] -------------------------------------------------------------------------------- de76ec36f1 | theJollySin | 2020-02-11 08:12:40 -0500 Document an arrival vault guideline (ebering) -------------------------------------------------------------------------------- 147f899702 | theJollySin | 2020-02-11 08:12:32 -0500 New arrival vaults - dark_side_of_the_moon a large pillar with a dark motif - battle_scene a bloody room with many corpses - enchanted_forest a circle of stone arches in a wood full of magic - ceremonial_halls a marble tomb - henge a less enchanted ring of arches in a wood - glass_houses for those who do not throw stones -------------------------------------------------------------------------------- 44cc58d149 | gammafunk | 2020-02-10 22:18:39 -0600 Update the changelog through 0.25-a0-491-gd071885120 [skip ci] -------------------------------------------------------------------------------- d071885120 | Nicholas Feinberg | 2020-02-10 19:10:47 -0800 Pavise -> tower shield (various) I wildly underestimated how obscure a term 'pavise' was. Let's be a bit more clear. -------------------------------------------------------------------------------- 7f6d498c3f | Alex Jurkiewicz | 2020-02-10 20:21:37 -0600 Add Github Actions CI I initially implemented this for code coverage support, which is included. But using GA for all CI tasks has several advantages over Travis: * Native support for building on macOS. * Simpler configuration language. * Easier composability of steps from third parties. The steps can be published as Docker images or Node modules and are fully versioned. * Better integration with GitHub (one status check per build job, rather than one for the whole CI system). Requires `CODECOV_TOKEN` set up as a GitHub repo secret (from codecov.io). -------------------------------------------------------------------------------- 9ae84a01e3 | Alan Malloy | 2020-02-10 11:26:17 -0800 Describe item you plan to acquire -------------------------------------------------------------------------------- 03579ab4a3 | Nicholas Feinberg | 2020-02-09 17:58:13 -0800 Fix unrand pavise player tiles And remove support for caps. -------------------------------------------------------------------------------- c70b7ad80a | Nicholas Feinberg | 2020-02-09 17:51:38 -0800 Fix some unrand shield player tiles -------------------------------------------------------------------------------- 9aada8127a | Nicholas Feinberg | 2020-02-09 16:36:21 -0800 Rename shield -> kite shield As explained in ca9fc5ac96d, we'd like to be able to refer to an item without confusing it with a category. A kite shield was a large, teardrop-shaped shield. It would be more accurate to use the term 'heater shield' for the shields in game, but that name is even more anachronistic and silly. Other alternatives considered were: - targe (too close to a buckler in both size and meaning) - hoplon (a shield used by a hoplite - too obscure) - aspis (the 'proper' name for a hoplon, but come on) - dhal (again, too close to a buckler) - umbumbuluzo (cool but way too long) - ihawu (cool but it's three syllables) I think the closest alternative contender was 'targe', fwiw. The shield of resistance and of the gong were intentionally not renamed, which I don't believe should cause confusion, but we can rename them later if it does. -------------------------------------------------------------------------------- 9ae4f581c4 | Nicholas Feinberg | 2020-02-09 16:36:21 -0800 Rename large shield -> pavise Having the name of a category (shields) also be the name of an item in that category (shields, large shields) has always been annoying and confusing. ("Oh, I'm using a long sword and a shield." "What kind of shield?") Use a more specific word instead. (A pavise is a roughly body-sized shield. Often they were placed in frames and used in a stationary fashion, but the same is true of triple crossbows. A little hyperbole is good for adventurers.) This is part 1 of a 2-part change. The following commit will rename shields. -------------------------------------------------------------------------------- b7f6864ba1 | gammafunk | 2020-02-09 18:00:17 -0600 Refactor some vault loot statements The commit a45ed2c2 fixed some previous errors in these two vaults, but we have item lists in dungeon.lua specifically to help with this kind of loot, so let's use those instead. The original vault for biasface_vaults_ghost_orc_armoury for non-Vaults branches already does this. -------------------------------------------------------------------------------- 6f036f9bbc | gammafunk | 2020-02-09 17:24:01 -0600 Fix Dith's Shadow Mimic for Teleport Other (joemaro) Dithmenos currently shadow mimics Teleport Other unconditionally, like it does for other hexes. This creates a problem where a player trying to teleport (or remove teleport from) a monster has their work potentially undone by the shadow mimic if their initial cast was successful. This commit has Dith not shadow mimic if Teleport Other hits its intended target and successfully changes its teleportation state on the first cast. If the Teleport Other was unsuccessful, Dith still has the usual chance to shadow mimic the spell. Closes #1273. -------------------------------------------------------------------------------- 9b3b753f3f | Kate | 2020-02-09 20:53:20 +0000 Improve armour AC change descriptions Don't display a pointless line for shields (although it might be good to extend this functionality to handle changes in EV and SH). -------------------------------------------------------------------------------- 37d6d75d0a | Kate | 2020-02-09 19:50:31 +0000 Fix Warlock's Mirror not reflecting piercing ranged weapons (#12142) -------------------------------------------------------------------------------- a45ed2c2fa | Kate | 2020-02-09 19:50:31 +0000 Fix some vault item definitions (#12191) -------------------------------------------------------------------------------- 8579842fd4 | Nicholas Feinberg | 2020-02-08 09:39:08 -0800 Small Cigotuvi's tweaks and fixes - Use the actual base AC property as defined in art-data.txt rather than hardcoding a second constant. - Don't clobber the AC on load. - *Drain rather than *Curse (Jimmahdean) - generally a similar effect, but one that we do less often and that might provide a more consistently interesting tradeoff re: taking the armour off. - Make armour decay faster at high corpse counts to make megakills a bit less persistently silly, but upgrade the armour-per-corpse scaling 50%. -------------------------------------------------------------------------------- 33c61bdccf | gammafunk | 2020-02-07 23:50:55 -0600 Have Vehumet support Frozen Ramparts This is not a Conjurations spell, but like Freeze it directly damages monsters and should be supported by the god. -------------------------------------------------------------------------------- 6e9f9c6944 | gammafunk | 2020-02-07 18:17:10 -0600 Give Cigotuvi's Embrace *Curse (hellmonk) We don't want to give the player a reason to frequently swap off armor in order to animate remains or eat corpses. Adding *Curse will still let this be done to some degree, but now that will be limited by availability of scrolls of remove curse. -------------------------------------------------------------------------------- 910574c326 | gammafunk | 2020-02-07 18:17:10 -0600 Tweak god conducts for Cigotuvi's Embrace (PleasingFungus) Originally the unrand tracked conducts based on the corpse (desecrating the remains of holy/souled beings) with the "did evil" conduct applying only if a corpse conduct didn't apply. This is an evil item and that conduct should always apply. This commit applies the conduct when any corpse harvesting happens, applying any specific corpse conducts in addition to "did evil". -------------------------------------------------------------------------------- aca3a16f85 | Nicholas Feinberg | 2020-02-07 18:15:57 -0600 Cigotuvi's Embrace, unrand body armour Cigotuvi's Embrace is a unique body armour (currently based on ring mail) that automatically sucks up corpses within LOS and turns them into temporary AC. This is primarily intended to provide a fun press-your-luck mechanic - how long can you keep fighting and keep your corpse armour on before you have to rest? It also comes as something of a 'hunger' conduct (since you can't eat those corpses) and effectively turns off most forms of necromancy, which can be a plus or a minus, depending on whether you're a necromancer or your enemies are. At present, the Embrace starts as +4 rN+ rRot armour (the rRot is for flavour). It goes to +8 with one corpse harvested, which takes about 100 turns to fully slough off. Four corpses give you about +12 and take 200 turns to fully go away, sixteen corpses give about +20 and take 400 turns to fully rot away, etc. All numbers are very much open to discussion. The original Embrace was removed because it couldn't compete with necromancy as a spell; as an unrand it might be more feasible to balance and make fun. Comitter's Note: Merged with a couple tweaks in the subsequent two commits. Closes #1272. -------------------------------------------------------------------------------- a8a2ee3166 | Alex Jurkiewicz | 2020-02-05 21:46:13 -0600 Change the messaging for abandoned shops So there's no ambiguity about "will they open again"? Inspired by watching a player on CPO. -------------------------------------------------------------------------------- 90c0af583b | gammafunk | 2020-02-05 20:43:09 -0600 Fix monster AI for damaging walls (howmanybefore) The monster movement code makes calculations to deciding whether to move near damaging slimy or icicle covered walls. If the count of adjacent damaging walls at a potential destination square is higher than that of their current square, they'd not move unless their HP is high. However monsters only ever take damage from one wall at a time, regardless of how many are adjacent. Hence this calculation can lead them to incorrectly refuse to move when both source and target had damaging walls, but the number of such walls at the target was higher. In these situations, monsters with low HP would stand in place, taking damage. This bug also applies to slimy walls, but those are rare outside of Slime Pits. In that branch, all monster spawns have immunity to the slimy wall effect, so the bug was hard to see in practice. This commit fixes the AI by only considering whether the number of damaging walls is above zero at source and target for these calculations. -------------------------------------------------------------------------------- 9f28dab4e5 | gammafunk | 2020-02-05 18:26:31 -0600 End Frozen Ramparts upon level change (Lightli) The implementation for level cleanup when the Ramparts status expires wrongly assumed that the player is still on the current level. They could, of course, leave the level and have the status expire on the new level, returning to the old level later. This meant that walls could become permanently be flagged as icicle covered, even though they would only operate as such if the player was in LOS and had the spell active. This commit has the Ramparts status expire and trigger the usual feature property cleanup whenever a level change happens. -------------------------------------------------------------------------------- 78e40d7af6 | gammafunk | 2020-02-05 14:15:09 -0600 Wall overlays for Frozen Ramparts (CanOfWorms) A set of wall overlays by CanOfWorms for the icicle covered walls created by the Frozen Ramparts spell. Add code support for making the wall overlay as well as choosing an overlay variant based on the wall's location. These look relatively subtle compared to the extremely cyan 'programmer art' floor tiles and floor overlays I made, which were simply color changes of the ones from slimy walls. Hence I'll probably need to modify said tiles to be more inline with these new wall overlays. -------------------------------------------------------------------------------- d6c695c3ee | gammafunk | 2020-02-05 12:03:12 -0600 Remove an unused variable (geekosaur) -------------------------------------------------------------------------------- d9b0b5b0f1 | gammafunk | 2020-02-05 01:13:16 -0600 Tweak Frozen Ramparts spell description Don't imply that it only works on rock walls and clean up some of the text. -------------------------------------------------------------------------------- 215f0e6760 | gammafunk | 2020-02-05 00:27:28 -0600 Frozen Ramparts, a level 3 Ice spell This spell is available to Ice Elementalists in their starting Book of Frost. Frozen Ramparts temporarily changes all non-permarock walls in radius 3 of the player into icicle covered walls that damage and debuff monsters that walk adjacent to them. The damage per 10 aut is a bit less than Freeze, although this spell has a higher spellpower cap of 50. The debuff is the Frozen status that slows monster movement (but not other actions). The player and allies are not affected by these walls and can move safely adjacent to them. Player LOS of the monster is required for the walls to have an effect, and walls revert to normal when the Ramparts status expires. Spellpower increases the duration of the walls as well as their damage. The damage uses BEAM_ICE, hence is only 40% resistible, yet it does apply AC, unlike Freeze. The wall effect is themed as a release of a blast of icicles that encases the victim in ice. -------------------------------------------------------------------------------- a1f3808ed8 | gammafunk | 2020-02-05 00:12:55 -0600 Icicle covered walls This wall feature property will be used in an upcoming spell which temporarily changes surrounding walls to damage and debuff monsters that wonder nearby. The effect works similarly to the acid damage slimy rock walls used in the Slime Pits. This commit adds support for the feature property itself, the level state tracking, the description of the property seen in-game, as well as Tiles and console rendering of the walls. Monster AI is updated to consider the walls in the same way they currently do for slimy walls, although the actual damage effect will be added in a subsequent commit that implements the spell. Give description support for both highlight and full description (i.e. x-v and X-v), with the full description giving details about the effect the walls have on monsters. Add "icy" floor and overlay tiles that are rendered in the same way as slimy walls. For console, we animate the icicle walls with ETC_ICE and recolour adjacent floors to light cyan. As a technical note, use of a property instead of a dedicated feature type for the icicle covered walls works better here. We'd like the spell to affect all kinds of non-permarock walls and wouldn't want to make unique "icicle covered" features for each wall material. -------------------------------------------------------------------------------- 78e9c91b01 | gammafunk | 2020-02-04 23:44:46 -0600 Make checks for slimy walls more accurate Some Tiles code tries to infer whether to try for slimy wall overlays based on the player's branch location. Whether a slimy wall exists is more accurately stored in the level state, which is updated every time stairs are taken. Use this data instead. -------------------------------------------------------------------------------- 8e44f26cd4 | gammafunk | 2020-02-04 23:44:46 -0600 Correct and refactor monster enchant durations The monster enchants Aura of Brilliance (used by deep elf high priests), Empowered Spells (conferred by Aura of Brilliance), and Frozen (debuff from Flash Freeze) monster enchants have have default durations that incorrectly use AUT scale for a count of turns. This meant that Aura of Brilliance and Frozen enchants were added with 10 times the intended number of turns. This doesn't have much gameplay significance in practice, since deep elf high priests can just recast the buff when it expires and Frozen is generally not applied to monsters. The default duration for Empowered Spells was unused, as this duration was applied elsewhere in a way that was almost correct. None of these enchants factor in the monster's intrinsic speed like they are supposed to. This commit corrects the default durations to the right scale and incorporates monster intrinsic speed. The duration application of Empowered Spells now uses the default duration instead of having an independent calculation. -------------------------------------------------------------------------------- 3004169c2b | Nicholas Feinberg | 2020-02-02 21:30:17 -0800 Staticify rot resistance Oops! -------------------------------------------------------------------------------- ed13d95810 | Nicholas Feinberg | 2020-02-02 20:59:51 -0800 Refactor rot resistance I devoutly pray the silly Zin exception will be removed, but this is a cleaner take on the current situation. -------------------------------------------------------------------------------- 68aa37aee3 | theJollySin | 2020-02-02 18:46:29 -0600 Clarified scroll only summons allied creatures -------------------------------------------------------------------------------- ecf17560b0 | gammafunk | 2020-02-02 17:18:51 -0600 Don't apply god conducts for ignite blood (vt, 12189) We now apply god conducts for damaging cloud placement that harms allies, which can happen via Demonspawns' ignite blood mutation. Ignite blood is a non-targeted, passive placement, so we don't want to apply god conducts in this case. This commit exempts passive blood from god conducts. -------------------------------------------------------------------------------- 4f2eb97ec1 | Nicholas Feinberg | 2020-02-02 12:25:53 -0800 Improve unrand documentation Clarify what exactly "REGEN: 1" means (even when the spell existed, it wasn't a very useful reference). Also remove references to the randapp property, which has been unused since 103bc38328, over a year ago. -------------------------------------------------------------------------------- 2d526bc93e | Nicholas Feinberg | 2020-02-02 11:01:58 -0800 Make the staff of Battle less tubular Make the description more concise (esp. the second sentence, which was a bit of a run-on), and don't imply that Iskendrun had hands. -------------------------------------------------------------------------------- 6fc7858b95 | Edgar A. Bering IV | 2020-01-31 09:37:43 -0500 Punctuation and wording tweaks (aidanh) -------------------------------------------------------------------------------- fd0a09164b | Edgar A. Bering IV | 2020-01-31 08:55:28 -0500 Consistently use DCSS in documentation [ Closes #1250 ] -------------------------------------------------------------------------------- fe06877dbd | Edgar A. Bering IV | 2020-01-31 08:54:58 -0500 Further INSTALL.md revisions - Wrap to 80 characters - Add missing backticks - Reorder and deduplicate some instructions -------------------------------------------------------------------------------- 7f9a73cb9d | Alex Jurkiewicz | 2020-01-31 08:54:58 -0500 Update msys2 Python instructions (Goratrix) Python 2 was removed and Python 3 packages have been renamed. -------------------------------------------------------------------------------- a84b7e589d | Alex Jurkiewicz | 2020-01-31 08:54:58 -0500 typo (amalloy) -------------------------------------------------------------------------------- e2881a364e | Alex Jurkiewicz | 2020-01-31 08:54:58 -0500 Simplify language -------------------------------------------------------------------------------- 50f8ac8374 | Alex Jurkiewicz | 2020-01-31 08:54:58 -0500 INSTALL improvements (gammafunk) Improve the "running DCSS" section header, and provide help forum links both in this section and globally at the bottom. -------------------------------------------------------------------------------- fe4ac87022 | Alex Jurkiewicz | 2020-01-31 08:54:58 -0500 Update community links Add the /r/dcss subreddit and /r/roguelikes Discord chat, both of which are very active. -------------------------------------------------------------------------------- 3c00d48056 | Alex Jurkiewicz | 2020-01-31 08:54:58 -0500 Update license information Fix the link to the global license file, and simplify the history description. -------------------------------------------------------------------------------- 20d0cbd702 | Alex Jurkiewicz | 2020-01-31 08:54:58 -0500 Rewrite INSTALL Convert to Markdown and perform a large restructure. Assumptions & goals: 1. Majority of users want to compile tiles from a Git repository 2. These users want two pieces of information: 1. What dependencies are required and how to install them 2. What commands to run to compile 3. Reduce branching / decisions in the basic instructions, to help new users. 4. Put the key compilation process as close to the top of the file as possible, so advanced users don't have to hunt for it. -------------------------------------------------------------------------------- 1f46b9f714 | advil | 2020-01-30 22:23:52 -0500 Maybe fix a -tele crash on levels with tele traps This was passing a pointer to a copy via the vector. -------------------------------------------------------------------------------- ff83419037 | wheals | 2020-01-30 11:54:14 -0500 Avoid unnecessary copying of item_defs. The struct isn't that small, and if it has any props it can get pretty big (orc corpses, for example, may contain an entire monster struct). -------------------------------------------------------------------------------- 92cdcce9cb | Aidan Holm | 2020-01-30 20:08:17 +0800 Revert "Allow non-local ui::pop_layout()" Reverted due to redraw issue when exiting map view and returning to search results; this is due to the fact that the UI stack is temporarily empty, so the UI framework redraws the screen. This reverts commit 07d6442d42d038d322de7b1b93851c6ddede88c4. This reverts commit 302732ab6c032dcc3182d82d315fe9636195a08b. -------------------------------------------------------------------------------- 07d6442d42 | Aidan Holm | 2020-01-30 18:47:23 +0800 Fix freeze after stash search map view (GH #1270) This issue was caused by the showmap code popping off all UI layers widgets, due to 302732ab6c. Unfortunately after closing the map view, the menu was still open, even though its widget had been popped. This change makes the menu (and for completion, everything using run_layout()) re-push the widget layout if the menu (layout) is still running. Alternate solutions include: 1) stack-of-stacks for UI layouts; this would permit pushing an empty UI stack for the showmap code, and then popping back to the unaltered UI stack for the menus, and 2) a showmap widget that fully obscures all layers below it and renders the map view. The previous solution was the UI cutoff mechanism, which temporarily prevented rendering of layers. Unfortunately that interacts badly if there is an underlying "main game" widget responsible for drawing the main view. -------------------------------------------------------------------------------- a4d2f0cd0c | Aidan Holm | 2020-01-30 18:27:11 +0800 Rename get_event_count() -> next_event_is() It only ever returned 0 or 1; this makes the actual semantics clearer. -------------------------------------------------------------------------------- ece2dee8bd | Aidan Holm | 2020-01-29 18:22:37 +0800 Make macro code slightly clearer This change makes the difference between getchm() and getch_with_command_macros() slightly clearer. -------------------------------------------------------------------------------- dcbd824e23 | Aidan Holm | 2020-01-29 18:22:37 +0800 Remove getchm rgetch parameter getch_ck is always used at this point. -------------------------------------------------------------------------------- 431bb856fd | Aidan Holm | 2020-01-29 18:20:25 +0800 Revert "Run timer callbacks in main thread" Reverted due to freezing and lag on windows tiles, compiled with msys. This reverts commit 67f526bef1c047e5179196a77422487f15c23cc7. -------------------------------------------------------------------------------- 67f526bef1 | Aidan Holm | 2020-01-29 16:41:09 +0800 Run timer callbacks in main thread Previously, they were run in a separate thread spawned by SDL, which makes interacting with other code difficult, since most other code assumes single-threaded access. Note that this change queues an SDL event, but only the input loop in ui.cc actually handles this event by calling the callback. This is fine, because currently the only use of this API is to show tooltips after a delay, and the callback function for that worked by queueing an SDL event, so the callback now does nothing and the actual function is performed as a side effect. This may seem like a step backwards for code clarity, but it's a necessary step to removing the input loop in tilesdl. -------------------------------------------------------------------------------- 302732ab6c | Aidan Holm | 2020-01-29 16:41:08 +0800 Allow non-local ui::pop_layout() There are some UI transitions which pop multiple popups, e.g. evoking an item from its description. Previously this required nasty hacks, such as having the inventory window still open, but hidden by a cutoff_point. This commit fixes this mess by permitting non-local popping of layouts. Now the evoke UI (well, direction chooser UI really) can simply pop off UI layouts until there are none left. This means that UI layouts that permit the display of arbitrary sub-widgets must check whether their layout is still active when appropriate. -------------------------------------------------------------------------------- 8c9d837f8b | Aidan Holm | 2020-01-29 16:41:08 +0800 Add widget->on_layout_pop() hook This commit adds a hook that is called when a layout is popped; it is fired only on a layout's root widget. -------------------------------------------------------------------------------- 3b8d5a1ed6 | Aidan Holm | 2020-01-29 16:41:08 +0800 Add const -------------------------------------------------------------------------------- 7dc260b4ef | Aidan Holm | 2020-01-25 17:03:49 +0800 Fix more() being called while swapping monsters monster::moveto() immediately broke any constrictions, which could cause a more() prompt. Since monster::swap_with() moved one monster after the other with moveto(), this could result in a prompt with both monsters in the same position. more() redraws the screen, and this caused an assertion failure, until more() was changed to avoid redrawing any changes to the dungeon area. This commit changes swap_with() to be more robust, preventing the possibility of a more prompt being called while monsters' positions are invalid. -------------------------------------------------------------------------------- 4b9beb1024 | Aidan Holm | 2020-01-25 16:59:21 +0800 Remove getchk() It's now a no-op. -------------------------------------------------------------------------------- 92db936f3c | Aidan Holm | 2020-01-25 16:59:21 +0800 Merge libunix getch_ck into getchk These key remappings seem pretty important and I can't think of a situation where you wouldn't want them. Also, since this behaviour is unix specific, it's likely buggy for win32 in various places. -------------------------------------------------------------------------------- d412b83276 | Aidan Holm | 2020-01-25 16:59:21 +0800 Remove win32 console key_to_command() remapping I'm not entirely sure what this was supposed to do, but it doesn't make much sense; it's converting CKs to other CKs, and like the unix-specific key conversion events, would only apply on windows for the subset of get_key calls that happened to use this API. -------------------------------------------------------------------------------- 55608276e7 | Aidan Holm | 2020-01-25 16:59:21 +0800 Remove m_getch() On all platforms, m_getch just called getchk. -------------------------------------------------------------------------------- 8fc31a4ec6 | Aidan Holm | 2020-01-25 16:59:21 +0800 Merge libunix m_getchk down into getchk On unix, to get a key, getch_ck calls m_getch, which calls getchk, which finally pulls the key from ncurses with get_wch. m_getch gets mouse events from ncurses when a KEY_MOUSE is delivered, and also optionally filters resize events; both of these are probably things that should be done all the time. -------------------------------------------------------------------------------- cf7b942d6d | Aidan Holm | 2020-01-25 16:59:21 +0800 Simplify unix m_getch() control flow proc_mouse_event() only ever returned the two values tested for, so only mouse_enabled needed to be checked. -------------------------------------------------------------------------------- 4e4398398a | Seve Monahan | 2020-01-24 21:29:21 -0600 Tweak Maggie's spawn range slightly (hellmonk) This should make Maggie a bit more of a threat without making her excessively difficult to kill or avoid. -------------------------------------------------------------------------------- 9048b99c0d | Seve Monahan | 2020-01-24 20:54:55 -0600 Comment some player.cc methods -------------------------------------------------------------------------------- 22a91f9759 | Seve Monahan | 2020-01-24 20:54:54 -0600 Make armour descriptions show how AC will change when worn. I apologize for including various miscellaneous testing and refactoring in this commit, but I think trying to divide it would just risk causing weird between-commit problems. -------------------------------------------------------------------------------- 7d9e569eea | gammafunk | 2020-01-23 20:53:26 -0600 Fix a vault NSUBST (riverfiend) The Zot definition for the 2 glyphs was missing a comma, which made it place unwanted features and messed up the loot placement there. Also reformat a couple other NSUBST in this vault to have a consistent style. -------------------------------------------------------------------------------- 0e000e855e | Alan Malloy | 2020-01-23 11:19:39 -0800 Fix a custom meatsprint monster's spell list (p0a) -------------------------------------------------------------------------------- 80bd347ae0 | gammafunk | 2020-01-19 02:23:42 -0600 Add an aliveness check for LRDing a monster Don't let LRD attempt to fragment using a dead monster as the source. This probably could not arise in practice, as currently nothing can trigger an LRD on a monster that has already died. Still, if the monster at the target is dead, we should ensure that any appropriate terrain at the location is used as the LRD source instead. Also ensure that no god conducts are applied for LRD happening at a dead monster's location. -------------------------------------------------------------------------------- c46a48dfac | gammafunk | 2020-01-19 02:23:10 -0600 Remove a redundant application of god conducts Airstrike applied god conducts twice, once in cast_airstrike() and once in _player_hurt_monster(); let the latter handle any conducts. -------------------------------------------------------------------------------- 1567df3305 | gammafunk | 2020-01-19 02:22:10 -0600 Refactor a player spell damage function It's easier to understand if we let monster::hurt() do death cleanup and only do cleanup in _player_hurt_monster() for the exceptional case where no damage was done. Also document our requirement that a monster be alive if we're handling god conducts in this function. -------------------------------------------------------------------------------- 1657e5263c | gammafunk | 2020-01-19 01:20:16 -0600 Restore cloud/conduct changes and fix a crash The application of conducts for cloud placement in d5a9e69a didn't include a check that the target monster is alive. Effects like immolation can place a cloud when a monster dies, triggering an assert. Add an aliveness check before applying any conducts. A cloud can't harm a monster if it's already dead (in the HP sense), after all. This restores commits d5a9e69a through 7650d0de. -------------------------------------------------------------------------------- 1cc7eeb0d1 | Alan Malloy | 2020-01-17 11:10:42 -0800 Revert cloud/conduct changes They were causing crashes with inner fire This reverts commits d5a9e69a through 7650d0de. -------------------------------------------------------------------------------- 7650d0de75 | gammafunk | 2020-01-16 23:21:27 -0600 Add attack prompts for Ring of Flames and Tornado With da09f83f, these spells respects god conducts when placing clouds that harm allies or attack from a sanctuary. Ring of Flames had no attack warning at all, and Tornado had one that warned about harming allies, but made no mention of penance. This commit gives both spells attack warnings that includes any relevant mention of penance. -------------------------------------------------------------------------------- 9db6740682 | gammafunk | 2020-01-16 23:21:16 -0600 Remove an unnecessary scope -------------------------------------------------------------------------------- 4be4e3ae42 | gammafunk | 2020-01-16 23:16:00 -0600 Document some cloud functions -------------------------------------------------------------------------------- d5a9e69a94 | gammafunk | 2020-01-16 23:16:00 -0600 Apply god conducts when placing clouds Currently most damaging cloud spells don't apply god conducts for attacking allies (Okawaru and the good gods) or attacking while in Zin's sanctuary. The UI does warn the player about penance in some cases (Freezing Cloud, Poisonous Vapours) but not all (Ring of Flames, Tornado), and in nearly all cases the conduct is not actually applied after any attack. This commit puts conduct tracking in the place_cloud() function, which is used by all spells to place clouds. This properly considers whether the target is actually affected by a damaging cloud. Ice beasts are immune to freezing clouds, for example, so placing one on an ice beast gives no warning and causes no penance. The existing conduct warning and application code already correctly ignores conjured or "object" monsters made by player conjuration spells. -------------------------------------------------------------------------------- da09f83f66 | gammafunk | 2020-01-16 23:15:47 -0600 Refactor conducts for Zin's sanctuary Before this commit, any code that applied god conducts had to make its own additional checks for sanctuary violations and potentially call remove_sanctuary(). This commit moves this handling into set_attack_conduct() and the god_conduct_trigger class so that separate sanctuary checks aren't necessary. Technical note about Toxic Radiance and #999: A comment noted that the god conduct had to be applied before any toxic radiance damage in order to properly apply conducts for monsters killed the turn the spell is cast, but this was not true as of the current code. A unique_ptr in the trigger holds a monster object that has the properties of the original monster copied by value before any damage is made; any victim data necessary to apply the conduct is hence still available. -------------------------------------------------------------------------------- 719d9921ed | Emily | 2020-01-17 03:42:34 +0000 Remove the per-weapon-type vorpal brand adjectives These mostly served to confuse players and hide the relation between the vorpal brands. -------------------------------------------------------------------------------- 3b4b6a4ccc | Alan Malloy | 2020-01-13 10:59:40 -0800 Bah, humbug! Christmas is over (Goratrix) Revert "Changing 'slaying song' to 'sleighing song'" This reverts commit 5f8687bca5ed173a039bdfd0014589c418b5cf6d. -------------------------------------------------------------------------------- 1430e7d239 | gammafunk | 2020-01-13 10:28:01 -0600 Improve the cone of clouds targeter Previously this targeter didn't indicate when a square would be unaffected by the wand due to presence of an existing cloud or due to Zin's Sanctuary. Now only squares that would actually receive a cloud are highlighted. Ideally this targeter would prevent accepting a target when no squares would be affected, but this will take a bit of rewriting to do properly. This wand probably should not use the shotgun targeter at all, since it doesn't actually use the concept of multiple beams firing like the wand of scattershot does. -------------------------------------------------------------------------------- cdfab47c19 | gammafunk | 2020-01-13 10:28:01 -0600 Disallow targeting a cloud spell to a sanctuary Zin sanctuaries prevent clouds from placing at all, but currently the game lets you waste a turn casting e.g. Freezing Cloud even when you target a sanctuary square that would create no clouds at all. Although we could let the targeter choose a sanctuary square if it would create at least one cloud out of the sanctuary, it's more consistent with the spell's current behaviour to disallow this. Freezing cloud refuses to target a square with an existing cloud regardless of whether empty squares are adjacent to it, for example. This commit prevents the player from targeting sanctuary squares and gives a message to that effect in the targeter. -------------------------------------------------------------------------------- 53dbb631d1 | Seve Monahan | 2020-01-12 16:08:06 -0600 Don't create random 0 byte files when running catch2-tests -------------------------------------------------------------------------------- 96e9fc7a18 | Seve Monahan | 2020-01-12 15:09:27 -0600 Checkwhite -------------------------------------------------------------------------------- e97b98a362 | Seve Monahan | 2020-01-12 13:57:44 -0600 Remove some support rough black scales mutation. This mutation was removed around four years ago, I am OK with somebody trying to use a save from that long ago losing some AC for their trouble. -------------------------------------------------------------------------------- 508b930957 | Seve Monahan | 2020-01-12 13:52:44 -0600 Refactor player::base_ac some -------------------------------------------------------------------------------- 4db4e4fac0 | Seve Monahan | 2020-01-12 13:51:30 -0600 Create a test fixture which creates a mock player you. Ignore the odd discussion of refactoring base_ac in the comments, it's coming in the next commit. -------------------------------------------------------------------------------- e02885a60e | Edgar A. Bering IV | 2020-01-12 10:35:05 -0700 Tone down the new swamp ending Specifically, remove spectral and simulacrum Learnean variants and ghouls. Reduce monster density at high-rolls and reduce monster variance. -------------------------------------------------------------------------------- c1b5a34292 | Alan Malloy | 2020-01-09 13:24:14 -0800 Don't crash when failing to acquire an item At least one way this could happen is when trying to create a manual while all your skills are at 27. -------------------------------------------------------------------------------- 49d089a364 | Edgar A. Bering IV | 2020-01-08 11:01:57 -0700 Re-enter acquirement selection after a HUP a0cd47f incorrectly included the code that made this change. This commit is to point that fact out for posterity. [skip-ci] -------------------------------------------------------------------------------- a0cd47fd9c | Edgar A. Bering IV | 2020-01-08 11:00:11 -0700 Display appropriate capitals for easy_confirm = none In shopping and acquirement confirmation prompts, which use yesno and so respect easy_confirm but write their own prompts, the easy_confirm = none user was not reminded to use capitals. -------------------------------------------------------------------------------- 35c6a73c01 | Edgar A. Bering IV | 2020-01-08 10:04:20 -0700 Re-enter Stack Five ordering after a HUP -------------------------------------------------------------------------------- d3051d076b | Edgar A. Bering IV | 2020-01-08 09:31:37 -0700 Display drawn cards immediately when re-entering Stack Five When returning to the uncancelable Stack Five after a HUP the previously drawn cards were not immediately displayed, only after another draw. -------------------------------------------------------------------------------- cf1075a8b3 | gammafunk | 2020-01-07 22:00:50 -0600 Remove an unused Lab timer effect Labs no longer exist. Set up removal upon update to next major version tag. -------------------------------------------------------------------------------- 1920f1ac21 | gammafunk | 2020-01-07 16:23:03 -0600 Remove an unused private field (geekosaur) -------------------------------------------------------------------------------- fa5a36fad7 | Edgar A. Bering IV | 2020-01-07 14:49:55 -0700 Allow monsters to cast Leda's while flying and remove dead code Currently only player ghosts have Leda's; this is more about removing an otherwise unused function. -------------------------------------------------------------------------------- 9cef9ebf11 | Kate | 2020-01-07 21:26:40 +0000 Allow Leda's to persist while flying When cast by the player - being stuck in hostile Leda's will still prevent flight. -------------------------------------------------------------------------------- 3fbb973fcc | Kate | 2020-01-07 20:59:45 +0000 Rename a function for clarity Since it's not just used for silence. -------------------------------------------------------------------------------- 97f579c7b8 | Kate | 2020-01-07 20:36:16 +0000 Make a local function static -------------------------------------------------------------------------------- 28aa74ec57 | Edgar A. Bering IV | 2020-01-07 12:29:09 -0700 Have Confusing Touch check MR instead of HD As a Hex this spell should be checking the magic resistance mechanic. Dazzling Flash keeps its HD check with its dual school nature. This also increases the power cap to be more in line with being a level 3 spell. -------------------------------------------------------------------------------- 61946d84f9 | Edgar A. Bering IV | 2020-01-07 12:29:09 -0700 Raise Confusing Touch to level 3, Remove Confuse Confusing Touch was absurdly powerful at Level 1; Confuse also is quite strong at Level 3. Of the two ways of applying confusion, confusing touch is the more interesting one, so that effect stays at level 3 (replacing Confuse in all relevant books). Corona replaces confusing touch in the book of Cantrips. -------------------------------------------------------------------------------- c98b7b2d62 | Edgar A. Bering IV | 2020-01-07 12:29:09 -0700 Return Dispel Undead to level 4 Unlike Agony, which deals damage scaling with the target's HP, Dispel Undead is a normal dice roll. With its melee range restriction, Level 5 is no longer appropriate. -------------------------------------------------------------------------------- 67d9bde936 | Edgar A. Bering IV | 2020-01-07 12:29:09 -0700 Remove the range-dependence from Dazzling Flash The range dependence made the spell harder to reason about for little payoff, and the spell is too weak with it. -------------------------------------------------------------------------------- bb9abfce8d | Edgar A. Bering IV | 2020-01-07 09:51:31 -0700 Buff Leda's Liquefication Make the caster immune to the maluses imposed by liquefied ground. This goes all the way back to the introduction of the spell in 2010, and the justification given then was simulationist. Hexes are intended to support other combat styles, but the attack fumbling and slow movement penalties meant that Leda's made little sense for any archetype and as a result the spell was little-used. The shrinking radius and re-cast delay imposed by the radius 0 period should provide sufficient buffer against aggressive kiting strategies with the spell; if this proves incorrect the movement penalty can be restored (without the fumble penalty). -------------------------------------------------------------------------------- 41a7e554cb | gammafunk | 2020-01-06 22:22:31 -0600 Fix felid acquirement (alexjurkiewicz) We were assuming there would be 3 classes that aren't food or gold to draw from, but felids now only have two of those. -------------------------------------------------------------------------------- 3ac56c63e1 | Edgar A. Bering IV | 2020-01-06 20:24:16 -0700 Add the join god screen revisions to webtiles fd4a3aefb759 implemented these UI changes but did not include the changes in webtiles. -------------------------------------------------------------------------------- 90aa2f6c38 | gammafunk | 2020-01-06 20:29:52 -0600 Remove the miscellaneous acquirement category This category gifts evocable items, most of which are consumable. These gifts are harder to balance relative to equipment and spells, since each type of consumable accumulates without limit for each type. Gold acquirement already covers "consumable acquirement" through shops, which are limited by dungeon generation (nerf Gozag imo). Although players should have acquired misc often due to how reliably the category gives a useful item, it remained relatively unpopular, making it an easy target for removal. -------------------------------------------------------------------------------- 148af02efd | gammafunk | 2020-01-06 20:29:52 -0600 Rework the scroll of acquirement Scrolls of acquirement are spoilery items. It benefits the player know internal game logic in order to make a decision on which choice is the most likely to give a desirable acquirement. This logic isn't something we'd like to display in-game. While some acquirement logic could be simplified to reduce the amount of spoilers, it's probably not feasible to fully do this as long as acquirement uses the player character's data to affect item generation. This commit mostly removes acquirement spoilers by having the scroll present a set of fully generated items as choices instead of asking for a choice of item categories. Reading an acquirement scroll opens a popup menu presenting 5 generated items: * It always generates food and gold acquirement item. * For the remaining three items, it chooses three categories without replacement from the six available. * Each randomly chosen category has an equal chance of being chosen. * The menu has a toggle between selection and inspection, to allow showing the detailed view of generated items. * Because of the toggle, it confirms any selection in selection mode. * The menu is uncancellable to prevent problems with unrand item generation. More detailed wiki writeup https://github.com/crawl/crawl/wiki/Acquirement-Reform Technical notes: The old acquirement() function that handled both interactive and non-interactive requirement is gone, with non-interactive instances having been moved to use acquirement_create_item() in a previous commit. The new acquirement_menu() function uses an AcquireMenu class to build a menu based on a modified shop menu. The scroll generates the items and stores them in a player prop. These remain and repopulate the menu until the player actually selects an item, so it works properly across HUPs. -------------------------------------------------------------------------------- 4094881d89 | gammafunk | 2020-01-06 20:29:52 -0600 Refactor some calls to acquirement Since the acquirement scroll interface will be rewritten in a subsequent commit, we don't want to use the same function for interactive and non-interactive acquirement. Have various instances of god acquirement gifts call acquirement_create_item() directly, as this function does all the callers need with a simple interface. -------------------------------------------------------------------------------- bb2a68f3fc | gammafunk | 2020-01-06 20:29:52 -0600 Fully use a function parameter -------------------------------------------------------------------------------- f734a50c3c | Byrel Mitchell | 2020-01-06 19:21:49 -0700 Enchant Wyrmbane for Maggie/Margery Since, in young form, she's killed a dragon; and in older form killed at least two. [ Committer's note: reworded commit message, set force_item. Closes #1255 ] -------------------------------------------------------------------------------- 9ac4296c3e | Seve Monahan | 2020-01-06 19:18:55 -0600 Add a comment to branch-data.h -------------------------------------------------------------------------------- 91ddc7e73e | Seve Monahan | 2020-01-06 19:18:41 -0600 Refactor some code related to disabled (swap) branches. Creates a new file (ng-init-branches.cc) and a couple new test files. Some of the new tests are characterization tests which should probably be removed when somebody wants to actually change the behavior, but I'm leaving them in for now. -------------------------------------------------------------------------------- fd4a3aefb7 | Edgar A. Bering IV | 2020-01-06 17:47:21 -0700 Refactor and streamline the join god screen (12160) First, this commit refactors the code to remove some gotos. Next, this enables one-key joining from the pray-at-altar screen by pressing J or Enter. (There is still a [Y]es/[N]o prompt for abandoning.) There's some concern that this behavior might lead to inadvertent conversion when using the G_ feature. However, G_ does not initiate prayer, the player must press > before seeing this screen. -------------------------------------------------------------------------------- d2ca0b7745 | Edgar A. Bering IV | 2020-01-06 13:55:13 -0700 Allow casting BVC with shift+dir (12164) Now that BVC is bolt-like. -------------------------------------------------------------------------------- 5f064afb62 | Edgar A. Bering IV | 2020-01-06 13:09:53 -0700 Respect quiet for flight checks (12171) -------------------------------------------------------------------------------- 9cab249bb1 | Edgar A. Bering IV | 2020-01-06 11:58:23 -0700 Fix a crash in monster collisions (12156) -------------------------------------------------------------------------------- 04aae9b36d | Edgar A. Bering IV | 2020-01-06 11:24:32 -0700 Add attack strength punctuation to unrand effects -------------------------------------------------------------------------------- 1537728274 | Edgar A. Bering IV | 2020-01-06 11:14:45 -0700 Add attack strength punctuation for staff damage -------------------------------------------------------------------------------- 45ab75433c | Edgar A. Bering IV | 2020-01-06 11:05:49 -0700 Refactor staff damage application (12149) This ensures staff damage messaging occurs, fixing a bug. It also deduplicates code for actually inflicting staff special damage, and despaghetties the printing of the message. -------------------------------------------------------------------------------- a0877dfadb | Seve Monahan | 2020-01-06 10:00:57 -0600 Give Maggie and Margery a 1% chance of carrying Wyrmbane This is another cute flavour nod to Margery being a dragonslayer. -------------------------------------------------------------------------------- 6c1ce5ffb1 | Seve Monahan | 2020-01-06 10:00:56 -0600 Tweak Maggie description to explain her dragon armour -------------------------------------------------------------------------------- 28ae719854 | Seve Monahan | 2020-01-06 10:00:56 -0600 Adjust the armour Maggie and Margery spawn with. (hellmonk) Maggie now has a steam/acid/swamp dragon armour (which should be interesting in the games she spawns) while Margery has a shadow/storm/fire dragon armour (to distinguish her from Maggie). It might be worth reducing Maggie's weight some if this ends up warping the amount of dragon armour available to players. -------------------------------------------------------------------------------- 0b69049c8a | Seve Monahan | 2020-01-06 10:00:56 -0600 Adjust Maggie's range (hellmonk) -------------------------------------------------------------------------------- c4e65cee02 | Seve Monahan | 2020-01-06 10:00:56 -0600 Change Margery's weights This is intended to make Margery spawn approximately the same percentage of games as she did before Maggie was added. -------------------------------------------------------------------------------- 56651bb4db | Seve Monahan | 2020-01-06 10:00:55 -0600 New unique: "Maggie" This a test at a new story-telling technique for dcss: having multiple uniques which represent the same character. See here for the proposal: https://crawl.develz.org/tavern/viewtopic.php?f=8&t=26482 Flavorfully, this unique is a younger version of Margery. Mechanically, this unique is meant to be an early introduction to the Mesmerise spell. Maggie and Margery will not appear in the same game. The Maggie tile is just a Jessica palette swap. Hopefully it will be replaced with a superior tile later. The Maggie tile's palette is based on normal Margery. -------------------------------------------------------------------------------- 516bc45ae0 | Aidan Holm | 2020-01-05 22:24:48 +0800 Fix crash on startup with map-generated messages This is a variation of the previously-fixed crash; turns out startup messages can be generated even earlier than I previously anticipated. -------------------------------------------------------------------------------- 7600c65aa0 | Kate | 2020-01-04 15:31:03 +0000 Remove an unused parameter (geekosaur) -------------------------------------------------------------------------------- e76b031baf | Edgar A. Bering IV | 2020-01-03 15:58:57 -0600 Don't trigger ball lightning and foxfire on firewood (pblur, 12154) -------------------------------------------------------------------------------- bb0aff56fe | Edgar A. Bering IV | 2020-01-03 15:58:57 -0600 Prevent allies from swapping with foxfire (12153) -------------------------------------------------------------------------------- 90ccd6aac3 | Nikolai Lavsky | 2020-01-03 15:26:12 -0600 Fix an information leak about Mara and rakshasa clones The player could use a scroll of immolation to find the real Mara, because the scroll doesn't affect summons. The Inner Flame spell has a similar problem. Also, when the original is behind a clone or another monster, the spell's targeter will happily inform the player that "You can't see any susceptible monsters within range!" This commit fixes that by making Mara and rakshasa clones inner-flameable. As a side effect, all other illusions - illusions created via a card, evocable, or monster spells - become inner-flameable too. -------------------------------------------------------------------------------- 519431ee42 | Edgar A. Bering IV | 2020-01-03 11:41:38 -0600 Fedhas protects plants from Ignite Poison (12161) -------------------------------------------------------------------------------- 05e59b54bc | Edgar A. Bering IV | 2020-01-03 11:15:56 -0600 Reveal floor traps when magic mapping (12167) The cause of 12167 is magic mapping stores extra info about the terrain type allowing it do distinguish tc_forbidden and tc_dangerous; alone this is not a bug, but it becomes a bug because traps share glyphs with floor, causing an information leak. There are three possible solutions: 1. Add a special case in _get_travel_colour() to not report that magic mapped trap cells are dangerous. 2. Add a new magic mapping feature/glyph pair for unidentified trap and report that. 3. Reveal floor traps when magic mapping. This commit takes soultion number 3; since traps are revealed it makes sense to treat them like other features (more like statues and doors than shops/altars). Approach 2, adding a feature DNGN_UNKNOWN_TRAP seems like it will also require a new trap type and some complications; the simplicity of approach 3 is why I favored it. -------------------------------------------------------------------------------- 9f54f116a7 | Kate | 2020-01-03 16:44:28 +0000 Fix spacing [skip ci] -------------------------------------------------------------------------------- 9e2f79d0c6 | Kate | 2020-01-03 16:44:28 +0000 Don't make Trog's Hand increase passive hunger rate It caused hunger while active in the same way that the regeneration spell did, but as an activated ability it makes more sense for the hunger to be an up-front cost (as with berserk), so just slightly increase its food cost instead. -------------------------------------------------------------------------------- 7e26dd5d75 | Emily | 2020-01-03 16:44:20 +0000 Remove the Regeneration spell This spell is one of the few that offers a pure buff without any meaningful downside at a relatively low level, and that is so universally useful as to be worth learning on any character that can cast it. It also duplicates a god ability (Trog's Hand). In light of these factors, it has been chosen as a sacrifice to the God of Removal. Agony takes its place in the Book of Necromancy (making the book single-school), while the Book of Battle receives Ozocubu's Armour as a replacement defensive buff. -------------------------------------------------------------------------------- 7c9d860b3b | Kate | 2020-01-02 18:41:53 +0000 Add a cast message for harpoon shot (#11454) -------------------------------------------------------------------------------- 1045be4518 | Kate | 2020-01-02 18:20:30 +0000 Add descriptions for ranged Agony/Dispel Undead (#12148) -------------------------------------------------------------------------------- 148cd443ae | Kate | 2020-01-02 16:00:55 +0000 Fix inner flame messages displaying out of LOS (#12168) -------------------------------------------------------------------------------- ed6d54792d | Alex Jurkiewicz | 2019-12-31 19:45:45 -0600 Improve gcovr arguments Don't try and re-use gcov data between runs, the way gcov files automatically get merged could lead to some very confusing results. This approach is slow, but more reliable. Also ignore a bunch of machine-generated source files which otherwise generate errors. -------------------------------------------------------------------------------- 386efcfdeb | Alex Jurkiewicz | 2019-12-31 19:45:45 -0600 Don't clean gcno files with make clean-coverage These coverage-related files are generating during debug compilation, so treat them like .o files and only delete with `make clean`. -------------------------------------------------------------------------------- 340c3955ff | Alex Jurkiewicz | 2019-12-31 19:45:45 -0600 Improve coverage documentation -------------------------------------------------------------------------------- ca889fb587 | Alex Jurkiewicz | 2019-12-31 19:45:45 -0600 Use gcovr preferentially over genhtml -------------------------------------------------------------------------------- 10fadfea08 | Alex Jurkiewicz | 2019-12-31 19:45:45 -0600 Improve catch2 test compilation Don't relink the binary if it's not strictly necessary. -------------------------------------------------------------------------------- f682754af2 | Alex Jurkiewicz | 2019-12-31 19:45:45 -0600 Remove trailing whitespace -------------------------------------------------------------------------------- 81cf26a3d9 | Alex Jurkiewicz | 2019-12-31 19:45:45 -0600 Add code coverage tracking Supports both GCC and LLVM toolchains. Bluffer's guide: 1. make catch2-tests 2. util/coverage More explanation has been added to testing.md (which reworks testing.txt) and `util/coverage --help`. -------------------------------------------------------------------------------- 140ab784a8 | Kate | 2019-12-30 15:33:25 +0000 Fix Trog being unable to gift artefacts (#12159) But restrict them to the same brand set as non-artefacts. Also prevent gifting the staff of Olgreb (since other unrand enhancer staves are disallowed), and unrand weapons of pain such as Morg. Other unrands can currently still be gifted regardless of brand. -------------------------------------------------------------------------------- a29699c70a | Aidan Holm | 2019-12-30 22:55:27 +0800 Prevent entering excluded area from stair exclusion -------------------------------------------------------------------------------- 2677940bf2 | Aidan Holm | 2019-12-30 22:46:00 +0800 Update tiles every turn, not every refresh (12144) The main change here is the conditional increment of you.frame_no, but there's also an additional `mon_id` parameter to tileids_monster_base, which is only used as an additional input to randomize the tile; it should be something that identifies the monster across frames, but not necessarily across turns; a coord_def is fine. The purpose of this is to vary the chosen tile if there are multiple monsters of the same type on the screen. -------------------------------------------------------------------------------- 44e4e8591a | Aidan Holm | 2019-12-30 21:44:42 +0800 Fix crash on load if level had exclusions d626285191 introduced a crash for saves with exclusions on the current level; messages were processed before the message window was given a size, due to do_layout exiting early. The root issue is that the message window requires the window size to be ready when printing with mpr(). This adds unnecessary coupling between messaging and with screen rendering. The message code should just store messages into a ring buffer, and the message window should display that ring buffer. -------------------------------------------------------------------------------- d85ed3479c | Aidan Holm | 2019-12-30 20:51:47 +0800 Fix excluded stairs not being cycled through (12166) This happened because excluded stairs do not exclude their tile, but instead prevent traversal, so travel_point_distance was not set to PD_EXCLUDED. -------------------------------------------------------------------------------- 6f074c887a | Aidan Holm | 2019-12-29 15:59:25 +0800 Fix draconians always being mottled at xl 7 -------------------------------------------------------------------------------- a1faa1601d | Seve Monahan | 2019-12-28 23:47:37 -0600 Suppress a compiler warning (libw32c.cc) -------------------------------------------------------------------------------- b37b713d4c | advil | 2019-12-27 18:52:22 -0500 Revert "Remove Yak player species" This reverts commit e4dd1522aaec2eab40eb9aec1633f407cf286207. -------------------------------------------------------------------------------- e4dd1522aa | Aidan Holm | 2019-12-27 20:26:08 +0800 Remove Yak player species Hopefully all of the crashes are out, but in any case not having this unsightly fallback species data should make unsound code easier to find (aka much crashier). -------------------------------------------------------------------------------- d626285191 | Aidan Holm | 2019-12-27 20:26:08 +0800 Don't do_layout if player isn't loaded The local tiles UI (at least) accesses the player species during layout. This commit simply stops all layout until the player species is loaded, so layout will happen on the main menu after the player loads and saves a game. Layout will also happen in the arena, since the arena sets the player species to human. -------------------------------------------------------------------------------- bc038bb554 | Aidan Holm | 2019-12-27 20:26:08 +0800 Remove unnecessary make_hungry() call As far as I can see, this call does absolutely nothing. It makes no change to the hunger state and doesn't trigger a message, nor does it initialize a "previous hunger state" variable. Removing because it references the player (you_foodless()) during startup. -------------------------------------------------------------------------------- 168f80a5ff | Aidan Holm | 2019-12-27 20:26:08 +0800 Avoid checking player species during startup mons_genus() will check the player species if given a player illusion, to see if the player is a draconian. Since we only care about statues, we can just look at the monster data genus directly. -------------------------------------------------------------------------------- 0fa9f1078f | Aidan Holm | 2019-12-27 20:26:08 +0800 Skip checking threat level for MILEV_NAME As best as I can tell, this MILEV thing is an optimization, where parts of the monster_info will not be filled out if not required. Monster names are calculated during game initialization, and at this point the player struct (you) is invalid; currently this points to the Yak entry, but we're trying to remove that. In general, this is kind of weird. I think it'd be preferable if the monster class did name calculation (since I don't see how that can possibly vary depending on player knowledge), with monster_info deferring to monster. There's some similar things like color() with MILEV_NAME that should also really be moved. -------------------------------------------------------------------------------- 3eb5a028ed | Aidan Holm | 2019-12-27 20:26:08 +0800 Split Clua::init_lua() This commit allows Clua instances to not load most of the stuff that clua and dlua load. This commit also inlines load_cmacro() and load_chooks(), since these functions were not descriptive of what the code actually did. -------------------------------------------------------------------------------- 14707fcbb5 | Aidan Holm | 2019-12-27 20:25:48 +0800 Refactor species JSON dumping This commit changes the output data slightly; the base draconian entry is moved after the derived types' entries, due to the underlying enum ordering. -------------------------------------------------------------------------------- 41b2ec9121 | Aidan Holm | 2019-12-27 20:24:37 +0800 Factor out NUM_SPECIES, NUM_JOBS This commit removes coupling with the underlying enums by using the playable/all species/job functions instead. -------------------------------------------------------------------------------- 5dae2b7853 | Aidan Holm | 2019-12-27 20:24:37 +0800 Add job_is_removed() -------------------------------------------------------------------------------- e160d0f489 | Aidan Holm | 2019-12-27 20:24:37 +0800 Add all_species() There is no corresponding all_jobs() function, since it would return the same results as playable_jobs(); that is, all jobs are playable. -------------------------------------------------------------------------------- ab48cecf9d | Aidan Holm | 2019-12-27 20:24:37 +0800 Refactor out is_good_combination() This helper function just wasn't really doing much. The new code also uses playable_species() directly instead of iterating over the underlying enum, which is much better for encapsulation. Todo: CC_UNRESTRICTED should probably be called CC_RECOMMENDED. -------------------------------------------------------------------------------- e792f88662 | Aidan Holm | 2019-12-27 20:24:37 +0800 Add species_type_valid(), job_type_valid() Fairly straightforward; the idea here is to encapsulate the process of checking species_type/job_type validity. We lose reporting of the exact invalid value in tags.cc, but it's not as if that's terribly useful information in the first place. -------------------------------------------------------------------------------- b09b68f387 | Aidan Holm | 2019-12-27 20:24:37 +0800 Refactor _resolve_species() and _resolve_job() This code is still pretty wonky, but hopefully this change makes it somewhat more readable. -------------------------------------------------------------------------------- 235a6da892 | Aidan Holm | 2019-12-27 20:24:37 +0800 Fix CLua::execfile() showing the wrong error message Previously it would always show the error message for a hard-coded global CLua instance, not the current instance. -------------------------------------------------------------------------------- 00b82eacc2 | Aidan Holm | 2019-12-27 20:24:37 +0800 Replace CL_RESETSTACK_RETURN with lua_stack_cleaner lua_stack_cleaner is a much better idiom for doing this; less typing, less reasoning about macro substitution, and much harder to get wrong. -------------------------------------------------------------------------------- 03d1ba0c0f | Aidan Holm | 2019-12-27 20:23:33 +0800 Fix space not showing god join prompt on webtiles (Yermak) -------------------------------------------------------------------------------- 3677130cb1 | gammafunk | 2019-12-26 21:29:51 -0600 An Abyss-themed transporter ghost vault The ghost of a poor adventurer who got banished and managed to escape from the abyss, only to die to some horrors they brought through the gate. Monsters are a variety of abyss spawns that include abyss-only natives as well as monsters that also spawn in connected branches. The nastiest spawns are equivalent to an 8 spawn, but scale up in placement slowly and are appropriate 8-level difficulty for the branch of vault placement. As the source of the ghost's banishment, the vault places a monster wielding a distortion weapon, or in the case of Spider, a Zot trap or two. There is a guaranteed loot item with translocations or Lugonu theme, and the monster and loot counts scale up with placement depth. Places in all ghost-viable branches save Vaults, until we can fix transporter placement in that branch. -------------------------------------------------------------------------------- b629ede6a3 | gammafunk | 2019-12-26 21:25:12 -0600 Generalize some ghost vault monster weapon lua Use lua tables of monster weapons and weights instead of a series of conditionals. Make a function that can be used by any ghost vault wanting to set up weapons using these weapon sets. -------------------------------------------------------------------------------- 60aa035f14 | Kate | 2019-12-26 23:30:21 +0000 Make friendly foxfire dissipate when swapped into by the player Instead of giving frequent warning prompts. -------------------------------------------------------------------------------- 207b656796 | Kate | 2019-12-26 23:30:21 +0000 Fix messaging inconsistencies when reflecting projectiles For consistency with beam reflection messages, and to use the pronouns of the monster doing the reflecting, rather than the pronouns of the projectile. -------------------------------------------------------------------------------- 446fb84131 | Kate | 2019-12-26 23:30:21 +0000 Fix some crawlcode -------------------------------------------------------------------------------- 5f8687bca5 | Brendan Hickey | 2019-12-24 20:15:22 -0500 Changing 'slaying song' to 'sleighing song' -------------------------------------------------------------------------------- d28d56f9c5 | Seve Monahan | 2019-12-23 23:43:50 -0600 Mention catch2 macro problems in platform.h comment -------------------------------------------------------------------------------- 1d5616665a | Alex Jurkiewicz | 2019-12-23 23:07:37 -0600 Fix macOS OS detection with catch2 Catch2 erroneously defines TARGET_CPU_ARM on macOS, which causes platform.h to mis-detect the target OS as Nintendo DS. Fix this by changing the order of OS detection. There are a couple of alternate approaches for this fix: * Fix Catch2 so that TARGET_CPU_ARM (and possibly other TARGET_CPU_* defines) is not erroneously defined on macOS * Remove Nintendo DS support from the project -------------------------------------------------------------------------------- e4868ce5c1 | Seve Monahan | 2019-12-23 11:17:13 -0600 Revert "Test whether travis-ci can detect failing catch2 tests" Test was successful, travis-ci reported the error. This reverts commit 9aa3435fcc3cbed86b065d4cce91ea0505110db5. -------------------------------------------------------------------------------- 9aa3435fcc | Seve Monahan | 2019-12-23 00:24:57 -0600 Test whether travis-ci can detect failing catch2 tests -------------------------------------------------------------------------------- 5769b184a2 | Seve Monahan | 2019-12-22 23:17:05 -0600 Add automatic catch2 tests to travis-ci builds -------------------------------------------------------------------------------- a901c2c2c7 | Seve Monahan | 2019-12-22 22:45:04 -0600 Integrate catch2 testing framework into crawl. In order to compile and run the catch2 tests, use the "make catch2-tests" command. If you want to see an example test file, look at catch2-tests/test_english.cc. It should be possible to test any leaf functions in crawl just by copying that file and making minor changes. Future work: For some reason whenever I try to change the names of the test files from using underscores to using dashes, I get a "No such file or directory" error for pty.h (util/fake_pty.c:5:12, which #includes ). Note I am using the current way of compiling on Windows suggested in INSTALL.txt. It would be good to fix whatever is causing this so the test files can use dashes to separate words like most crawl files. Travis ci should be configured to verify the catch2 tests are working at the same time it compiles. This should be pretty easy - it just needs to run the "make catch2-tests" command and verify that command exits without an error. It would be good to eventually create a way of faking some globals to enable easier testing - player you is a big offender. -------------------------------------------------------------------------------- 60f0ac2d9a | Seve Monahan | 2019-12-22 11:20:55 -0600 New function in includes.sh: checkcc -------------------------------------------------------------------------------- e4380fb850 | Aidan Holm | 2019-12-22 19:30:39 +0800 Also clear main menu name on space (#12157) -------------------------------------------------------------------------------- eac79542e2 | Byrel Mitchell | 2019-12-20 18:28:28 -0700 Change player tile to use multiple levels of poison Follows the same breakpoints as the color of the 'Pois' status indicator. -------------------------------------------------------------------------------- ae7c9bc87e | Umer Shaikh | 2019-12-20 19:57:39 -0500 Fix dancing weapon headsup messages (hittemvvvhard) Commit 7046ed1b expanded the conditions under which headsup messages happen and how much information they give, but broke the special case of dancing weapons. The result was that when multiple enemies came into view the game tried to warn the player about an interesting dancing weapon with the unhelpful message 'There is .' This commit fixes that. -------------------------------------------------------------------------------- 3faca94807 | Seve Monahan | 2019-12-20 01:44:35 -0600 Remove a few more redundant #includes Does contain some massaging to reduce the net number of includes, such as accessing the same program constructs with different #includes -------------------------------------------------------------------------------- 0164aa517b | Seve Monahan | 2019-12-19 23:12:24 -0600 Remove redundant #includes from player-reacts.cc Split off from previous commit due to a slight bit of complexity: player-reacts.cc needed access to artefact.h, which was being included transitively through melee-attack.h (melee-attack.h #includes attack.h, which in turn #includes artefact.h). So we now #include artefact.h instead of melee-attack.h in player-reacts.cc. -------------------------------------------------------------------------------- e0ea79d902 | Seve Monahan | 2019-12-19 23:12:15 -0600 Remove more redundant #includes -------------------------------------------------------------------------------- 1f6dc261b7 | Seve Monahan | 2019-12-19 23:11:08 -0600 Add a new function to util/includes.sh The new function, checkafter, allows you to effectively "restart" a cancelled or frozen run of the checkall function. -------------------------------------------------------------------------------- 9f758675c1 | Seve Monahan | 2019-12-19 12:16:27 -0600 Remove unused variable (libw32c.cc) -------------------------------------------------------------------------------- 8baffb9bfa | Seve Monahan | 2019-12-19 10:55:59 -0600 Move some #includes from artefact.cc -> art-func.h (Fixed version) These #includes were used only in art-func.h and therefore should be included from art-func.h Found with util/includes.sh This commit has an identical diff to commit ba943c654d. ba943c654d was reverted out of caution when the build started failing, but the fault was in a different commit pushed at the same time. -------------------------------------------------------------------------------- 6aab8bdaf8 | Seve Monahan | 2019-12-19 10:52:40 -0600 Remove a bunch of redundant #includes (Fixed version) These were found with util/includes.sh. I didn't finish checking all headers for redundant inclusion due to the huge amount of time it takes util/includes.sh to run, so expect another similar commit in the near future. If you're planning to use util/includes.sh to find the remaining redundant includes: the next header I was about to check for unnecessary inclusion was initfile.h. I finished checking all header files which appear before initfile.h in alphabetical order. This is a revised version of b2f3ebf68f2 which has been tested against the tiles builds. -------------------------------------------------------------------------------- ced51cce45 | Seve Monahan | 2019-12-19 00:55:43 -0600 Revert commits which broke the tile builds Accidentally broken in ba943c6 or b2f3ebf. Attempted to revert both, but messed up again and just polluted the history. -------------------------------------------------------------------------------- 6bd3a3edb7 | Seve Monahan | 2019-12-19 00:42:40 -0600 Revert "Revert "Remove a bunch of redundant #includes"" This reverts commit 18b4d129d3da0dd7cf5b1d3f398c359d72baef40. Somehow slipped my mind to check the tiles builds. Reverting both my most recent commits after travis-ci revealed the failure. -------------------------------------------------------------------------------- 18b4d129d3 | Seve Monahan | 2019-12-19 00:42:25 -0600 Revert "Remove a bunch of redundant #includes" This reverts commit b2f3ebf68f21b493f31f90f8d5e94d820562c764. -------------------------------------------------------------------------------- ba943c654d | Seve Monahan | 2019-12-19 00:12:08 -0600 Move some #includes from artefact.cc -> art-func.h These #includes were used only in art-func.h and therefore should be included from art-func.h Found with util/includes.sh -------------------------------------------------------------------------------- b2f3ebf68f | Seve Monahan | 2019-12-19 00:11:34 -0600 Remove a bunch of redundant #includes These were found with util/includes.sh. I didn't finish checking all headers for redundant inclusion due to the huge amount of time it takes util/includes.sh to run, so expect another similar commit in the near future. If you're planning to use util/includes.sh to find the remaining redundant includes: the next header I was about to check for unnecessary inclusion was initfile.h. I finished checking all header files which appear before initfile.h in alphabetical order. -------------------------------------------------------------------------------- ea9b1ad378 | advil | 2019-12-15 15:12:20 -0500 Fix ally warning prompt for irradiate This prompt should trigger for monsters that are not protected by fedhas, rather than players that are not protected by fedhas. -------------------------------------------------------------------------------- e69d3d4235 | advil | 2019-12-15 14:45:59 -0500 Focus arena text input widget automatically -------------------------------------------------------------------------------- aa31f046c4 | advil | 2019-12-14 17:33:00 -0500 Make fedhas_protects less likely to crash if player is in the mix This function was routinely called with *act->as_monster(), which is a fairly bad paradigm since player::as_monster() returns nullptr, and so a segfault was guaranteed of a protecting monster check is missed. As long as this is so, it is better for this function to take a monster pointer instead of reference. -------------------------------------------------------------------------------- 84510d0c19 | advil | 2019-12-14 17:09:31 -0500 Fix a missing ! -------------------------------------------------------------------------------- 4a1327ee3a | Alan Malloy | 2019-12-12 18:38:33 -0800 Solidify grunt_spider_rune_circles There was a crack in the stone wall surrounding it -------------------------------------------------------------------------------- 406d6369f5 | advil | 2019-12-12 17:26:08 -0500 Various improvements to seed selection This started just as an attempt to get the seed input dialog to be focused on game start, but that led to various other issues: * [enter] only begins the game when seed selection or the begin game button are selected. * ctrl-v now works for pasting. * the [enter] button is disabled when there is no valid seed (rather than acting like esc in that case) * full pregen button is reenabled offline, there is still demand. * hotkeys -, p, and d now work when the seed input box is focused. * hotkeys -, p, d now cause the seed input box to become focused. * a bug (I think) where hotkeys always preempt other events, even if their handler returns false, is fixed. (I could be misunderstanding the intent here, as this looked semi-purposeful -- but this doesn't seem like the behavior that would be intended.) * other formatting / wording tweaks. Main remaining issues that I know of: * clicking enter while - or d buttons are selected (via tab) in webtiles still starts the game if it can; in local tiles it does nothing. This seems to be because clicking on a button in webtiles doesn't change the focus. * in all platforms, hitting [esc] while anything is focused defocuses it. This is most weird in the seed input box, on tiles/webtiles, where players won't have been as likely to navigate the ui with keys, and so will be expecting [esc] to cancel. * webtiles could use some visual tweaking * if you hit esc from the species menus after seed selection, it returns to the main menu instead of seed selection. * It's posible this ui should give some clearer indication that entering 0 will actually start a different game type than anything else. -------------------------------------------------------------------------------- b77388520f | advil | 2019-12-12 17:18:27 -0500 Fix (?) a race condition with ui state syncing When starting up the game and opening the seed selection dialog, the game fills in a seed and attempts to sync that to the js client. If the js client doesn't receive and process that message fast enough, it will send a sync message to the game with a blank text field; in my local setup these actually cross paths and things end up in an inconsistent state: the game thinks the field is empty, but there is still a number showing on the client side. (If the player does more things in the UI that number will be resynced, so it is only on immediately pressing enter that there is buggy behavior.) This fix is very brute-force, and I'm not sure it'll really get all the cases. I'm generally worried that this syncing mechanism can have race-cases like this beyond just the game start, and also it seems like the possibility of messages crossing paths might need to be dealt with more consistently. -------------------------------------------------------------------------------- 56a5b49892 | advil | 2019-12-11 14:40:21 -0500 Don't crash when checking if fedhas protects player from igniting act->as_monster() returns nullptr for the player, so some check like this needs to happen. Not immediately sure if clouds under the player should return 0 or a negative value, this goes with negative. -------------------------------------------------------------------------------- 8ac039397e | Byrel Mitchell | 2019-12-11 10:43:14 -0800 Add new swamp ending vault with Fedhas and Yred theming. Includes an undead lerny (which should generally be weaker than a living lerny; the only one that does more damage is simulacrum which is 8 speed and low MR). Equal chance of the rune being in each lobe. Yred lobe has 2 vampire knights, assorted yred gifts and some undead hydrae/drakes. Fedhas lobe has several thorn hunters/shambling mangroves, 2 spriggan druids, and a handful of oklobs. The antechamber is watery, and populated by a bunch of swamp drakes/dragons and an undead Lerny. -------------------------------------------------------------------------------- cba6f664f8 | gammafunk | 2019-12-10 23:20:11 -0600 A swamp worm tunnel vault (mikee) Prepare to get slurped! Swamp worms line a narrow corridor of Zot traps with briar patches on either side. The worms are contained by lava and try to collide the player with lava, the briar patches, or the Zot traps, depending on the player's position and whether they are flying. Either flying over the lava or destroying the briar patches offer paths to the loot. Loot consists of good jewellery and aux armour along with some star items. Number of worms and loot items scale with depth, which is D:12-$ and Swamp. Original notion suggested by mikee, but you can definitely blame me for everything about this vault. -------------------------------------------------------------------------------- 26646b4e49 | gammafunk | 2019-12-10 23:18:42 -0600 Clean up some DES syntax for a vault Use the predefined aux armour list in dungeon.lua instead of making our own list, use better syntax for NSUBST, and clean up statement alignment. -------------------------------------------------------------------------------- e7e91ba8d0 | Kate | 2019-12-10 22:20:39 +0000 Allow staff of Olgreb to grant poison immunity to monsters And improve its descriptions. -------------------------------------------------------------------------------- 8a0eb6d9bd | Alex Jurkiewicz | 2019-12-10 15:19:01 -0500 Ignore VS Code editor config -------------------------------------------------------------------------------- 8d3aca7c4b | Alex Jurkiewicz | 2019-12-10 15:18:45 -0500 Update my mailmap entries -------------------------------------------------------------------------------- fa4545f159 | advil | 2019-12-09 23:21:01 -0500 Fix message replay at main menu This is sort of a quick fix. e48d713e changed the behavior of split_string so that it parsed '' into a single segment '', where before it would turn '' into an empty segments list. The old behavior implicitly prevented the log replay from filling the buffer with many empty lines. This commit fixes the issue by restoring the old behavior just for log replays, and doesn't address the question of why these empty log messages are there in the first place. -------------------------------------------------------------------------------- 53730b6a6f | Kate | 2019-12-09 22:04:43 +0000 Account for variable range in Dazzling Flash range checks (sdynet) The range check always considered it to be cast with power -1 so would falsely claim that no enemies were in range when the flash reached radius 3. -------------------------------------------------------------------------------- 06d23272f8 | gammafunk | 2019-12-09 04:35:21 -0600 Update the changelog Through 0.25-a0-277-g7046ed1b37. -------------------------------------------------------------------------------- 7046ed1b37 | Umer Shaikh | 2019-12-08 17:24:18 -0500 Make headsup function less strict about warnings (11875) When multiple monsters come into view at the same time, the game warned you if a monster was using a dangerous weapon but ignored other equipment, even if that equipment was interesting enough that it would be flagged if the monster were alone. This commit liberalizes what the game is willing to note. It also changes the function to check equipment through the monster info instead of directly, on the grounds that warnings should be based on revealed information only. As a side-effect this liberalization also fixes a small bug with alerts for dual-wielding monsters. This commit increases message spam, which is unfortunate. But warnings about what items monsters have are relatively important messages, especially since many players use force_mores to warn about dangerous monsters. [ Committer's note: Squashed and rebased. Reworded one commit message since the change had been implemented in trunk but the commit contained helpful comment clarifications. Closes #1215 ] -------------------------------------------------------------------------------- cebdc9ce17 | Umer Shaikh | 2019-12-08 17:23:19 -0500 Adjust warnings about monster gear on coming into view Update conditions for including information about monster gear in the "comes into view" message in several ways: - monster gear is all identified, so no need to check that - now warn for all artefacts as well as for branded equipment (an orc warrior with Maxwell's Patent Armour is often at least as interesting as an orc with branded plate, but its armour wasn't noted) - the old rules were not warning for wands in the alt weapon slot (I'm not clear on whether this can even happen?) if they were not offensive wands. The rules for warning about wands shouldn't depend on what slot the wand is in. Also one often wants to be warned or force-mored for monsters with wands of digging, despite their being non-offensive. That leaves wands of random effects as the only non-offensive wand; rather than special casing the single wand type, we warn for all wand types. [ Committer's note: Monsters may learn to use random effects in the future, this is good future proofing. ] -------------------------------------------------------------------------------- 3be302651b | Umer Shaikh | 2019-12-08 17:22:18 -0500 Clarify comments in is_offensive_wand -------------------------------------------------------------------------------- 84948a95e6 | Umer Shaikh | 2019-12-08 17:21:05 -0500 Expose missiles in monster inventory to x and ^x The function get_monster_equipment_desc already tried to get a description including what is quivered, but this part of the inventory wasn't copied from the monster to its corresponding monster info. This commit makes that copying happen. This allows players to rely less on animations to tell which monsters are doing what. -------------------------------------------------------------------------------- 5ba6e9ada1 | Edgar A. Bering IV | 2019-12-08 13:35:00 -0500 Prevent an information leak with Mara Illusions (11946) -------------------------------------------------------------------------------- 87e124ad65 | Edgar A. Bering IV | 2019-12-08 13:14:58 -0500 Correct Flay status light colour (12147) The cause was an unintentional fallthrough. -------------------------------------------------------------------------------- 0af21f4d7a | Edgar A. Bering IV | 2019-12-08 12:28:54 -0500 Clarify Heal Other description (12128) -------------------------------------------------------------------------------- a1f8d6e4d9 | Edgar A. Bering IV | 2019-12-08 12:20:05 -0500 Fix summoner highligting for console in webtiles builds -------------------------------------------------------------------------------- ec1133e99d | Alex Jurkiewicz | 2019-12-08 10:54:51 -0500 Let the player renounce religion while silenced Divine abilities are blocked by silence, but renouncing your religion isn't really a divine ability. -------------------------------------------------------------------------------- d25cbf0ff0 | James Buck | 2019-12-08 10:53:54 -0500 Fix initial god ability slot assignment in local tiles Ability slots need to be claimed before setting initial piety. This is because if a player's starting piety is at least 1*, the local tiles version will trigger a redraw of the ability tab, a side effect of which is to fix any available but unassigned abilities using the default logic (starting at f) rather than the god ability rules (a-e + X). -------------------------------------------------------------------------------- c224260491 | marksg07 | 2019-12-08 10:41:50 -0500 Refactor common functionality between look_around functions [ Committer's note: Squashed and rebased. Closes #1109 ] -------------------------------------------------------------------------------- 5fe89d543c | Gabriel Marks | 2019-12-08 10:41:20 -0500 Add crawl.get_target This clua function opens the targeting dialog in the same way it is opened when you press x to examine. The user is allowed to move the cursor around (same as examine). If the user makes a selection and presses enter, this function returns the player-relative coordinates of the selection. Note that the target is valid even if it is past the bounds of the map, so there is no leak of world borders. If the user cancels the selection, this function returns nil. -------------------------------------------------------------------------------- 7af84ae0ac | Edgar A. Bering IV | 2019-12-06 22:12:15 -0500 Keep allies out of Conjure Flame embers (advil) Allies smothering a player's conjured flame is frustrating and doesn't lead to interesting gameplay. Allies are smart enough to not step in traps; they can also not put out player conjured flames. This is implemented as a change to monster behavior; if a player casts Conjure Flame then swaps with an ally the fire will still be put out when the ally is moved into the embers cloud. -------------------------------------------------------------------------------- 17cbeb888d | Edgar A. Bering IV | 2019-12-06 17:13:52 -0600 Scale Conjure Flame embers by current player speed Using BASELINE_DELAY + 1 auts for the duration of the Embers cloud initially created by conjure flame meant that a slowed player could not use the spell at all. The movement requirement already puts slow players at a disadvantage when using Conjure Flame, there is no need to prevent them from using the spell outright. This commit sets the cloud's lifespan to player_speed() + 1 to allow slow players to use the spell; it also prevents hasted players from taking an action in the embers cloud before moving out of it. -------------------------------------------------------------------------------- 9d16a9d099 | Edgar A. Bering IV | 2019-12-06 16:11:33 -0600 Remove some debugging lines (amalloy) -------------------------------------------------------------------------------- aca421d890 | Edgar A. Bering IV | 2019-12-06 15:50:46 -0600 Fix a crash in apply_toxic_bog -------------------------------------------------------------------------------- 6783385f1d | advil | 2019-12-06 09:18:31 -0500 Add frontmatter to issue template [skip ci] -------------------------------------------------------------------------------- 9a32677d9a | advil | 2019-12-06 09:13:26 -0500 Relocate issue template to modern location -------------------------------------------------------------------------------- 7a49f6cbb4 | advil | 2019-12-06 09:11:03 -0500 Tweak issue template slightly [skip ci] -------------------------------------------------------------------------------- 6d7e32a812 | Alex Jurkiewicz | 2019-12-05 01:09:09 -0600 Adjust Trog weapon gifting (ebering) Only gift melee weapons with a restricted set of brands (plain, vorpal, flaming, antimagic). This is to differentiate Trog gifts from Okawaru's further, and in line Trog's theme of crude anger, fire, and hatred of magic. Gifting only melee weapons also makes Trog slightly simpler, which is a bonus for new players. This also slightly modifies the minimum enchantment of gifts from Trog and Okawaru. Previously the minimum was 0 or 1 (random per-item), now it is always 0. [ Committer's note: Significantly revised the approach in the change to acquirement. The acquirement system did not previously distinguish ranged and melee weapons, doing so required a rather deep dive. Closes #1208 ] -------------------------------------------------------------------------------- 105ea27cc8 | kitchen-ace | 2019-12-05 01:09:09 -0600 Fix edge cases for destroying Summon Forest's trees Tornado and forest fires were not checking whether a tree was created by Summon Forest. -------------------------------------------------------------------------------- c5e4228de7 | sdynet | 2019-12-05 01:09:09 -0600 Ely's Divine Protection always protects at ***** At present, the always protection of this power begins at 131 piety. This figure is slightly different from when the player's faith becomes ***** (120). This subtle difference is confusing for a player who doesn't read a spoiler because nothing in-game alerts the player to the moment when the odds of protection are 100%, though the guarantee is described in the ^ screen. This confusion can be resolved by aligning the point at which the protection probability is 100% to the moment at which the number of stars changes. As a result players will be able to clearly see when this sentence means without a spoiler: Especially pious individuals may be certain of this help. [ Committer's note: revised the commit message. Closes #1212 ] -------------------------------------------------------------------------------- 32a057a6c3 | sdynet | 2019-12-05 01:09:09 -0600 Make the Elemental Staff an enhancer for all elemental schools The melee gimmick and resists alone did not make the elemental staff a particularly attractive unrand, most staff users would strongly prefer an enhancer. This enhancer counts for each school separately, so gives two enhancers to the handful of multi-element spells. [ Committer's note: revised description and commit message. Closes #1211 ] -------------------------------------------------------------------------------- b31bfc5473 | kitchen-ace | 2019-12-05 01:09:09 -0600 Make fire spells better at burning trees Fireball could previously burn trees with all squares of its explosion, not just the centre, but this was inadvertently changed in be81960. This commit restores that behaviour. Also make the new spell Starburst burn trees properly. It also allows the spells Fire Storm and Ignition to burn trees, because it seemed strange to me that the most powerful fire spells did nothing on trees. This allows a player to easily clear out large amounts of trees at once, but by the time a player can cast these spells, this is not usually all that relevant. [ Committer's note: corrected Ignition Fedhas logic. Closes #1189 ] -------------------------------------------------------------------------------- 6f1b5d974a | James Buck | 2019-12-04 12:40:28 -0600 Add missing SUBST to gammafunk_ghost_icy Fixes an ugly green tile when placed in Lair. -------------------------------------------------------------------------------- c8cd6a5d6a | advil | 2019-12-04 10:50:20 -0500 Fixup recently placed ghosts correctly d0e028f13a handled fixup for placement of new ghosts, but any ghosts placed between TAG_MINOR_POSITIONAL_MAGIC and TAG_MINOR_GHOST_MAGIC didn't get updated, because the spells are copied from the ghost_demon list into the monster list on placement. Resolves #1222 fully (I hope). -------------------------------------------------------------------------------- 572059c536 | Edgar A. Bering IV | 2019-12-04 00:33:15 -0500 Prevent Foxfire from using stairs -------------------------------------------------------------------------------- 53a6a0d877 | Edgar A. Bering IV | 2019-12-04 00:06:36 -0500 Update credits -------------------------------------------------------------------------------- 542a2242a2 | Edgar A. Bering IV | 2019-12-03 22:49:40 -0500 Fixup Sting and the description (advil, kitchen_ace) The effect of Sting on resistant monsters that got merged was not the exact intended behaviour in the experimental branch; the changes got lost in a rebase shuffle. Sting does Poison Arrow flavored damage, but with a reduced number of poison stacks; specifically adding 1 stack to a monster, or 0.5 if the monster is resistant (implemented with div_rand_round). -------------------------------------------------------------------------------- 18654cfe15 | advil | 2019-12-03 11:45:29 -0500 stringer -> stinger (ebering) -------------------------------------------------------------------------------- 3ee35aba1e | advil | 2019-12-03 11:43:09 -0500 Clarify Sting description (12145 / kitchen_ace) The flavor is actually still the same as poison arrow, but the description implied that it would poison even immune things. -------------------------------------------------------------------------------- 58704a1ebd | advil | 2019-12-02 14:36:03 -0500 Fix some shadow warnings for older compilers Happened quite a bit on rebuilds. -------------------------------------------------------------------------------- d0e028f13a | Edgar Bering | 2019-12-02 14:04:46 -0500 Correctly fixup ghost spells -------------------------------------------------------------------------------- 618c0ec234 | advil | 2019-12-02 12:51:14 -0500 Mark dazzling flash as unusable for saved ghosts This spell is set with spflag::no_ghost, so all that is needed is to keep ghosts that saved with dazzling spray from using it. -------------------------------------------------------------------------------- ce69c89b74 | advil | 2019-12-02 11:02:53 -0500 Improve beforeunload future compatibility I noticed while trying to figure out how to detect the back button during gameplay that this code could be a bit more general. I don't think this will change behavior on any particular browsers right now, because the return value is the method that is supported by the most browsers, but this approach is deprecated. The only non-deprecated method for doing this is event.preventDefault, so I added this, as well as another deprecated approach. (Of course, the one you're supposed to use *isn't* supported by most browsers.) See https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event for the full compatibility table. -------------------------------------------------------------------------------- 28950d1e32 | advil | 2019-12-02 10:42:55 -0500 Handle HUPs better in lua interpreter Previously, this code ran in a tight loop if a hup was received, because the input function always returned immediately. This led to stuck high-cpu processes and crashes when a webtiles client disconnected, or when an ssh connection was lost, while the lua interpreter was running. This commit should simply break the loop on this case. It's possible it would be even safer to not do a repl loop at all on empty input for online games... -------------------------------------------------------------------------------- 5bc340afbf | Edgar A. Bering IV | 2019-12-02 07:48:24 -0500 Replace Flame Tongue with Foxfire in the FE description -------------------------------------------------------------------------------- 216da55150 | Edgar A. Bering IV | 2019-12-02 07:48:05 -0500 Remove a vestigal line -------------------------------------------------------------------------------- e0175898a2 | Edgar A. Bering IV | 2019-12-02 07:47:33 -0500 Actually use the foxfire monster tile -------------------------------------------------------------------------------- 716fc43bfc | Edgar A. Bering IV | 2019-12-02 07:41:48 -0500 Actually use the new foxfire tile -------------------------------------------------------------------------------- 0889b22a1b | Edgar A. Bering IV | 2019-12-02 00:54:18 -0500 Monster save compatibility for positional magic This commit uses the same TAG_MINOR as the previous commit. -------------------------------------------------------------------------------- 688896fa5c | Edgar A. Bering IV | 2019-12-02 00:54:18 -0500 Player save compatibility for positional magic -------------------------------------------------------------------------------- 592f7d0648 | gammafunk | 2019-12-02 00:54:18 -0500 Positional magic ⛰️ 💀: Rework BVC targeting This commit brings Borgnjor's Vile Clutch targeting in line with most other earth magic spells, making it use a directed beam instead of a smite-targeted 3x3 square. The BVC beam always penetrates and never misses, to affect up to 6 squares. This is a nerf to a spell that was already sitting at a good power level. However another aim of the 0.25 magic changes is to reduce the overall strength of the Necromancy school given how many strong spells it has. BVC is routinely overrated and not actually in the overpowered set, so we don't want to make the spell bad just because of perception. The reasons given for rating BVC so highly include synergy with allies, lowering monster evasion, damage per cast, smite targeting, and being in such a strong school. Allies are vastly stronger than BVC and capable of clearing entire floors quite on their own, and the spell doesn't improve accuracy enough versus a majority of monsters to warrant spend a turn using BVC instead of a better Earth magic damage spell. Its damage per cast is good, but at reasonable spellpower levels and in the most important use cases, it's a lot better to spend MP each turn on a spell that kills monsters sooner. Removing the smite targeting combined with changes to other spells that reduce the power of the Necromancy school will help with player perception without making the spell too weak. I do also want to take a look at the spell's damage per turn with the highest spellpower levels. Part of the perception problem the spell has comes from constriction having a lot of small effects that are hard for the player to evaluate. If Necromancy settles on a kind of "melee support" role in 0.25, it might be good to simplify the spell's effects somewhat toward this aim. -------------------------------------------------------------------------------- d51b216b00 | gammafunk | 2019-12-02 00:54:18 -0500 Simplify and document some beam logic conditions -------------------------------------------------------------------------------- 165abee8e4 | Edgar A. Bering IV | 2019-12-02 00:54:18 -0500 Positional magic 💀: Revise Corpse Rot (CanOfWorms) Unlike the other attack spells, where position was not relevant enough, Corpse Rot was too positional: it relied on the combined relative position of (player, monster, immovable floor object). This revision changes Corpse Rot to place clouds in a ring around the caster, with the number of clouds equal to the number of corpses rotted. The cloud duration is reduced This should keep in a less-constrained way the relative-to-corpse positioning, while making the player's position relative to terrain and monsters more relevant. -------------------------------------------------------------------------------- 3b7ae84e64 | Edgar A. Bering IV | 2019-12-02 00:54:18 -0500 Positional magic 💀: Reduce the range of Agony and Dispel Undead Reduce player Agony and Dispel Undead to range 1. Necromancy is a very strong school, with a lot of spells in it. Direct damage spells that are ranged and can't miss (Agony checks MR but with a large power boost) are very strong. Reducing these spells to range 1 is a way to add positional considerations to the spells, makes them thematically fit with Vampiric Draining, and nerfs them to boot. Necro needs the nerf. -------------------------------------------------------------------------------- 0ea3b1b79e | Edgar A. Bering IV | 2019-12-02 00:54:18 -0500 Positional magic 💀: Remove Bolt of Draining as a player spell The "bolt spell but black", one of many removed in this overhaul. Necromancy has plenty of direct-damage spells, this one will not be missed. -------------------------------------------------------------------------------- c910babebc | Edgar A. Bering IV | 2019-12-02 00:54:18 -0500 Positional magic tiles: Noxious Bog icon (CanOfWorms) -------------------------------------------------------------------------------- 949bf585d4 | Edgar A. Bering IV | 2019-12-02 00:54:18 -0500 Positional magic tiles: Toxic bog feature -------------------------------------------------------------------------------- e4a03fbc05 | Edgar A. Bering IV | 2019-12-02 00:54:18 -0500 Positional magic 🐍: New spell: Eringya's Noxious Bog New spell Eringya's Noxious Bog, L6 Posion/Transmutation. Gives a player the "Bog" status for 4 + random2( power / 10 ) turns. While this status is active, as the player leaves behind a trail of temporary "toxic bog" cells. Each toxic bog cell remains that way for 10 + random2avg( power/ 20, 2) turns. Ignite poison places flame clouds over bog cells, but at present does not remove them. The spell replaces Leda's Liquefication in the Fen Folio (though perhaps a different spell could be removed from the Fen Folio instead) and is added to the Book of Alchemy. -------------------------------------------------------------------------------- f462223248 | Edgar A. Bering IV | 2019-12-02 00:54:18 -0500 Positional magic 🐍: New dungeon feature type toxic bog Create a new dungeon feature type, toxic bog, which does Poison Arrow flavor damage to creatures in it and imposes shallow water penalties. -------------------------------------------------------------------------------- b3f3dca9e8 | Edgar A. Bering IV | 2019-12-02 00:54:18 -0500 Positional magic 🐍: Adjust Venom Mage start With Poison Magic being revised to emphasize transmutations and alchemy, and Venom Bolt removed, this moves VM's starting Conjurations skill to Transmutations and adds Ignite Poison to the Young Poisoner's Handbook. This is especially relevant since Sting has become Poison/Transmutations. The manual and background descriptions are terse enough to not require a change, but it might be nice for flavor reasons to add some reference to alchemy. -------------------------------------------------------------------------------- 3cb921fa59 | Edgar A. Bering IV | 2019-12-02 00:54:18 -0500 Positional magic 🐍: Revise Sting In the overarching design writing for this overhaul I wrote that some space for single-target ranged spells must remain. Sting is one of those. However, LOS range poison damage that sometimes poisons is dangerously close to darts. Further, Sting is immediately outshone by Poison Vapours. This commit changes Sting to be a range 3 Poison/Transmutation spell, with the same beam flavour as Poison Arrow (still Sting damage and to-hit). Since Poison Arrow is removed as a player spell, this beam-type re-use doesn't steal from Poisons L6 niche. -------------------------------------------------------------------------------- b75774f94e | Edgar A. Bering IV | 2019-12-02 00:54:18 -0500 Positional magic 🐍: Poison removals Remove Venom Bolt and Poison Arrow, as single target conjurations that do not fit in with this magic overhaul. -------------------------------------------------------------------------------- 4a65e1fc46 | Edgar A. Bering IV | 2019-12-02 00:54:18 -0500 Positional magic ⭐️: Revise Spellforged Servitor Servitor now takes the highest-level servitor spell available for player users. The spell description indicates the spell the servitor will use. This behavior could already be accomplished by a player by removing most of their damaging spells and was a good idea. However the process of modifying one's spell list introduced a variety of tedious incentives in its interaction with amnesia. Now that servitor takes only one spell, the spell list is adjusted for players (for monsters, since the monster servitor takes every spell this has no effect). The servitor prioritizes ranged targeted damage spells of level 4 and higher, followed by clouds, followed by low level and short range spells. [Thanks to hellmonk for suggesting the servitor description display the spell to use and that the spell list be revised.] -------------------------------------------------------------------------------- 60c6236f93 | Edgar A. Bering IV | 2019-12-02 00:54:18 -0500 Positional magic ⭐️: New Iskenderun's Mystic Blast Re-introduce IMB as a player spell that detonates on the player with range 2. The spell attempts to hit each non-conjured monster within this range with MMISSILE flavor damage, and then knocks the target back. The damage is currently half that of old IMB: 2 dice with a max damage of 6 + pow / 6. This change also flattens the knockback curve of Force Lance for monsters. For both spells the knockback distance starts at 2 and scales with power. -------------------------------------------------------------------------------- 9ec2bd9bd2 | Edgar A. Bering IV | 2019-12-02 00:54:18 -0500 Positional magic ⭐️: Rename and revise Dazzling Spray Rename Dazzling Spray to Dazzling Flash. The effect is now a radius 2-3 flash, centered on the player, that has a power dependent chance of dazzling living monsters. The chance decreases with distance. The spell is silent. [Thanks to cwz testers for feedback on this spell.] -------------------------------------------------------------------------------- 1d4a33eb31 | Edgar A. Bering IV | 2019-12-02 00:54:18 -0500 Positional magic ⭐️: Remove Force Lance as a player spell Continuing with the magic overhaul, Force Lance is made a monster only spell. The new Iskenderun's Mystic Blast will take the knockback effect, to be added in a subsequent commit. -------------------------------------------------------------------------------- c6818cb5b8 | Edgar A. Bering IV | 2019-12-02 00:54:18 -0500 Positional magic ⭐️: Remove Dazzling Spray as a zap type In preparation for a new version of dazzling spray. The spell was already unusable by monsters but some old code for supporting dazzle ghosts was still around. That gets removed. -------------------------------------------------------------------------------- 45c4a977d6 | Edgar A. Bering IV | 2019-12-02 00:54:18 -0500 Positional magic ⭐️: Remove IMB as a zap type and from monster spells A subsequent commit will introduce a new version of Iskenderun's Mystic Blast as a player spell. IMB gets lost amidst the sea of similar direct damage conjurations; as a monster spell the explosions did not add much. It is replaced by force lance in various monster books that used IMB, or just removed from monsters. -------------------------------------------------------------------------------- 4305f63ada | Edgar A. Bering IV | 2019-12-02 00:54:18 -0500 Positional magic ⭐️: Simplify Searing Ray (minmay) Searing ray is a rather complicated spell because of beam aliasing, and yet Cj is a hints mode background. This changes searing ray to always fire at max range at the player's selected target (even if the target moves), or in the player's selected direction. If the target dies the ray continues firing at the target's last position. If there was no monster, the spell proceedes like old searing ray (but fires for the full distance). In addition to the targeting change, the three beams are given the same damage and to-hit, chosen so the damage distribution matches that of old Searing Ray, and are all penetrating. -------------------------------------------------------------------------------- bd1a5c2d44 | Edgar A. Bering IV | 2019-12-02 00:54:18 -0500 Positional magic ❄️: Adjust Ice Elementalist start Now that the book of Frost contains a single conjuration, starting IE with some conjurations skill does not make sense. This commit concentrates their skill in ice magic, leaving the player to chose how to branch out through the remainder of the book. -------------------------------------------------------------------------------- c46f9d66a9 | Edgar A. Bering IV | 2019-12-02 00:54:18 -0500 Positional magic ❄️: Buff Refrigeration Not strictly a positional change; Ozocubu's Refrigeration was the second lowest-damage level 6 damage spell (doing only slightly more than a freezing cloud), and comes with significant draw-backs (self damage and loss of potions). This commit adds a damage die to the spell, making it do 4d(5 + power / 10) up from 3d(5 + power / 10) and removes the self damage. The spell retains its -Potion effect. This is still on the weaker side of level 6 spells in terms of raw damage, but it hits full LOS, is single-school, and is quiet. -------------------------------------------------------------------------------- 2846b0adcb | Edgar A. Bering IV | 2019-12-02 00:54:18 -0500 Positional magic tiles: Hailstorm icon (ontoclasm) -------------------------------------------------------------------------------- 0364848250 | Edgar A. Bering IV | 2019-12-02 00:54:18 -0500 Positional magic ❄️: New Ice spell: Hailstorm Hailstorm is a Level 4 Conjuration/Ice spell. It replaces Throw Icicle in the IE starting book. When cast it fires a ring of inner radius 2 and outer radius 3 of BEAM_ICE (like throw icicle) flavoured beams. Icy monsters are immune, so this spell gets along with ice beasts and simulacra but not other minions. Having it skip allies all together is something to consider. Currently, Veh does not add a fourth ring, that would almost double the number of affected squares. The damage is that of throw icicle but the accuracy is higher. [Thanks to cwz testers and Bacchus for early feedback on this spell.] -------------------------------------------------------------------------------- 290c60e7f6 | Edgar A. Bering IV | 2019-12-02 00:54:18 -0500 Positional magic ❄️: Ice removals Remove Throw Frost, Throw Icicle, and Bolt of Cold. These targeted, "damage but blue" spells did little to distinguish the school from others (despite their slightly different ranges) or from ranged weapons. The current result is that the IE book is a bit thin. New ice spells will be added in subsequent commits. -------------------------------------------------------------------------------- daefaf095a | Edgar A. Bering IV | 2019-12-02 00:54:18 -0500 Positional magic tiles: Foxfire monster, icon, and trails (ontoclasm) -------------------------------------------------------------------------------- 48bd468c4c | Edgar A. Bering IV | 2019-12-02 00:54:18 -0500 Positional magic 🔥: New spell Foxfire Foxfire is a L1 Conjurations/Fire spell that replaces Flame Tongue. Foxfire conjures two foxfires adjacent to the caster which seek the nearest target and burn the target, or dissapate if they fail to reach the target after making 8 moves. Monsters and the player can swap with foxfire, but doing so triggers the foxfire attack. Each foxfire burn does slightly more than half the damage of Flame Tongue, but does not miss. This makes the spell better than FT when fighting in the open (discounting the delay), but much worse in corridors. Foxfires have see invisible; with their high move speed this allows them to attack first, dissipating and allowing the monster to then move towards the player. [Thanks to hellmonk, tealizard, Doesnt, EN0N, and cwz testers for feedback in development of this spell.] -------------------------------------------------------------------------------- e44d55d700 | Edgar A. Bering IV | 2019-12-02 00:54:18 -0500 Positional magic 🔥: Modify inner flame Inner flame is a very positional spell; unfortunately it's somewhat impractical to use, explosions come only when the monster dies. To open up new possibilities, this commit adds an on-damage effect to the enchantment. Inner Flamed monsters have a chance of creating a short-lived flame cloud on their own cell when they take damage. -------------------------------------------------------------------------------- 0d78dbbffe | Edgar A. Bering IV | 2019-12-02 00:54:18 -0500 Positional magic tiles: Starburst icon (ontoclasm) -------------------------------------------------------------------------------- e3d4451385 | Edgar A. Bering IV | 2019-12-02 00:54:18 -0500 Positional magic 🔥: New Fire spell: Starburst Starburst provides a L6 damage spell fitting into a similar place as the old Bolt of Fire spell. Where Bolt of Fire was targeted, Starburst is un-targeted. Instead, Starburst fires eight range 5 (six under Vehumet) bolts of fire in the principal directions. [Thanks for early feedback from cwz players in the design of this spell.] -------------------------------------------------------------------------------- 7758758a4e | Edgar A. Bering IV | 2019-12-02 00:54:18 -0500 Positional magic 🔥: Nerf conjure flame (minmay, tealizard) Smite targeted, renewable flame clouds are extremely strong. This changes Conjure flame to create the cloud on the player. The player initially creates a cloud of smoldering embers. These ignite the turn after if nothing is in the cell. Conjure flame is still very strong and permits many of its old uses. This increases the time cost of those uses and prevents degenerate things like refereshing a blocking flame indefinitely. It also did not work well as a monster spell; the only monsters that still cast it were player ghosts, so it's been removed from them and is now player only. -------------------------------------------------------------------------------- f302f3d7ce | Edgar A. Bering IV | 2019-12-02 00:54:18 -0500 Positional magic 🔥: Fire removals Remove Throw Flame and Bolt of Fire as player spells. They live on on monsters and in wands. Both of these are "damage but red" single target spells, on the chopping block in this magic overhaul. -------------------------------------------------------------------------------- 1b0f4d352a | Edgar A. Bering IV | 2019-12-02 00:54:18 -0500 Positional magic 🌪: Airstrike The air school is already quite positional: targeted spells require bolt bouncing to use with maximum effectiveness, the remaining spells require different positional considerations to use well. Airstrike is smite-targeted, which makes it more interesting than most single-target spells. However, it is just ``smite but air''. This commit scales airstrike damage with the number of adjacent empty cells to the target. Specifically, when there are more than three empty cells adjacent to the target, each empty cell contributes a linear amount to the affine base damage and reduces the variance by addinng another roll to average the damage over. At 100 spellpower this results in the following damage statistics, depending on the number of empty adjacent spells. | | 0-3 | 4 | 5 | 6 | 7 | 8 | | --- | ---- | ---- | ---- | ---- | ---- | --- | | avg | 15.5 | 16.3 | 17.2 | 18.1 | 19.1 | 20 | | std | 4.61 | 3.27 | 2.68 | 2.32 | 2.08 | 1.9 | [ TODO: Refactor mons-cast airstrike damage to be in the same place as player damage. Take another swipe at the spell description. ] -------------------------------------------------------------------------------- abb5cbb05e | Edgar A. Bering IV | 2019-12-02 00:54:18 -0500 Use targeter_radius hitfuncs for friendly fire checks This replaces the helper function _irradiate_is_safe -------------------------------------------------------------------------------- 8bd92b5b85 | Edgar A. Bering IV | 2019-12-02 00:54:18 -0500 Generalize and rename targeter_los Rename it to the more accurately descriptive targeter_radius, and include a constructor parameter for specifying a range minimum to exclude an inner radius. -------------------------------------------------------------------------------- 0bb11aece9 | Edgar A. Bering IV | 2019-12-02 00:43:05 -0500 Don't crash in the ignite poison cloud tracer Only check Fedhas protection from clouds for players; monster Fedhas worshippers clouds will hurt plants. Only relevant for player ghosts. -------------------------------------------------------------------------------- 5ba96148f3 | gammafunk | 2019-11-30 22:57:29 -0600 Remove an outdated comment -------------------------------------------------------------------------------- 8d00908bc7 | gammafunk | 2019-11-30 22:57:29 -0600 Fix monster ranged attack logic for some wands Monsters learned how to use wands of clouds, iceblast, and scattershot in 0.24, but the logic to determine whether monsters have ranged attacks was not updated. This logic is used for player sensing nearby danger and some aspects of monster movement; monsters were able to use these wands before this commit. -------------------------------------------------------------------------------- 17f9c9cab5 | Aidan Holm | 2019-12-01 10:35:28 +0800 Fix chat keeping focus trapped after hiding (#12140) When spectating with chat activated, the player quitting/dying/exiting caused the chat input to be hidden, which did not deactivate the focus trap. This fix uses a MutationObserver, which does require IE10; AFAIK, the previously supported minimum was IE9, but we shall see if anyone complains first.. -------------------------------------------------------------------------------- c6a9f38f4b | Aidan Holm | 2019-12-01 10:35:28 +0800 Fix minimized chat not being expandable via click Caused by over-eager click event filtering; turns out the minimized chat window is a totally separate element (#chat_hidden). -------------------------------------------------------------------------------- b8371ea956 | Aidan Holm | 2019-12-01 10:35:28 +0800 Fix webtiles chat stuck focus issue When clicking the chat input, document.activeElement has already been updated by the time the focusin event is received, so the focus trap stores the chat input as the previously focused element; when it is deactivated, it will then refocus the chat input. The focus-trap docs refer to a setReturnFocus option, but this doesn't seem to work as intended. Disabling return focus fixes this for now. Unfortunately this means that entering and exiting chat from a UI with focusable elements (e.g. seed selection) will lose the currently focused element, until a workaround is implemented. -------------------------------------------------------------------------------- 61c9e09f56 | Brendan Hickey | 2019-11-30 20:45:15 -0500 Rewrite Barachi +LOS fakemut description. Before: "Shadows flee at your approach. (+LOS)" After: "You can be seen from farther away. (+LOS)" The issue is that 'Shadows' are always monsters. Unless we want to cause Shadows to run from Barachi let's use text with less potential to mislead the player. The rewrite is based on the species description. I think the players in general understand reciprocal LOS, so this formulation (rather than saying "You can see things farther away.") will be convey that their LOS radius is bigger and Tomb is going to be harder. -------------------------------------------------------------------------------- ece12570e2 | gammafunk | 2019-11-29 21:04:25 -0600 Remove unused Fedhas corpse rotting code This is no longer used, since the god no longer gains piety through rotting corpses. -------------------------------------------------------------------------------- 0f3e877b0e | gammafunk | 2019-11-29 21:04:16 -0600 Fix outdated food logic when worshiping Fedhas These were relevant when the god accepted rations as a cost for some abilities, but this is no longer the case. Don't always have a food acquirement option when worshiping Fedhas. Also don't consider food always useful and always an interesting autoexplore target under Fedhas. -------------------------------------------------------------------------------- b5a0cb1028 | gammafunk | 2019-11-29 20:53:10 -0600 Remove an outdated acquirement rule under Fedhas The acquirement code prevented acquiring weapons with the reaping brand under Fedhas, specifically the Sword of Zonguldrok. The god no longer has a no-corpse-necromancy conduct, so remove acquirement restriction. -------------------------------------------------------------------------------- a656ec442d | gammafunk | 2019-11-29 19:52:38 -0600 Update the Fedhas flavor of a Lugonu vault (minmay) Give a randbook with Recall as the "useless" insult item for Fedhas worshipers, since nearly all allies Fedhas grants are stationary ones that can't be recalled. The exception would be wandering mushrooms granted from Fedhas' Overgrowth ability, but who could take a mushroom seriously anyways? -------------------------------------------------------------------------------- 27fffb8c76 | Aidan Holm | 2019-11-29 13:57:10 +0800 Don't show monster threat levels by default It'd be nice to show these on the monster lists only, but that's technically challenging, and on webtiles the monster list already displays the threat level. -------------------------------------------------------------------------------- f71692caf1 | Aidan Holm | 2019-11-28 20:32:06 +0800 Add documentation for tile_show_threat_levels -------------------------------------------------------------------------------- c5e1d6b9e0 | Byrel Mitchell | 2019-11-28 20:32:06 +0800 Add webtiles support for threat level indicators -------------------------------------------------------------------------------- 61c6e967c8 | Psymania | 2019-11-28 20:32:06 +0800 Add monster threat level indicators Webtiles and console both have a monster list at the bottom-right of the screen which lists all monsters in view color-coded by rough threat level. Many players have expressed a desire for something similar in offline tiles, to provide always-visible indicators of the threat levels of all enemies in view. This commit adds translucent colored backgrounds -- dark grey, light grey, yellow, and red -- to indicate trivial, easy, tough, and nasty monsters respectively. Additionally, these indicators are configurable with a new option in the options file, "tile_show_threat_levels". Each type of indicator can be independently enabled or disabled by including or omitting it in the option file line. For example, the following... "tile_show_threat_levels = tough nasty" ...will show only yellow (tough) and red (nasty) threat indicators. I have experimented with various styles of indicators, as shown in the following thread: https://crawl.develz.org/tavern/viewtopic.php?f=8&t=26439 I am open to changing back to a different style, or even making multiple styles available and letting the player choose which style to use, if any. This style is the best in my opinion, as it is very noticeable while being subtle enough not to interfere with any other monster or monster-associated graphics. I have playtested this feature through a 6-rune run with no problems, technical nor cosmetic. -------------------------------------------------------------------------------- 280d70d74f | Nikolai Lavsky | 2019-11-28 20:31:26 +0800 Remove an inventory hotkey for corpses and skeletons Although the player cannot pickup carrion anymore, the pickup menu still displays a hotkey for it. The hotkey already does nothing because corpses and skeletons are stationary objects (62bc8482). -------------------------------------------------------------------------------- 6cfeca75b2 | advil | 2019-11-26 18:44:59 -0500 Remove some obsolete batform code (alexjurkiewicz) This is a relic from the times when you ended a transformation by setting its duration to 2, something that hasn't been in play since 0970d1a616d41. For reasons unclear to me at this remove (something to do with food maybe) the exact threshold for ending batform was increased to 5 from 2 in 19d229916a4423. -------------------------------------------------------------------------------- cd15a05269 | advil | 2019-11-26 15:16:56 -0500 Update the github issue template Mostly just wanted to provide instructions on how to upload a save file directly to github, but I ended up revamping the whole thing. [skip ci] -------------------------------------------------------------------------------- d5e5576b6f | advil | 2019-11-26 12:29:39 -0500 Clarify "master archer" code This shouldn't change any behavior for monsters that actually place. This cleans up some ranged code to be more consistent with the (apparent) intent of the flags, and renames a flag to be more consistent with what it does (since what was called `M_DONT_MELEE` has no impact on melee outside of monsters with missile-based ranged attacks, and also doesn't actually prevent melee -- you would do this by giving the monster no melee attacks I think). I'm not 100% sure why MONS_STATUE (which doesn't place) was M_ARCHER | M_DONT_MELEE, but I have kept its status. This may be for things like the statue in minmay_dual_archer_statues? -------------------------------------------------------------------------------- 090528c340 | Byrel Mitchell | 2019-11-26 22:10:22 +0800 Added webtiles support for Possessable icon (Yred enslave soul status) -------------------------------------------------------------------------------- e5692877c6 | Byrel Mitchell | 2019-11-26 22:00:32 +0800 Show monster poison level as a debuff icon Currently has 3 tiles for 1, 2 or 3, 4 stacks of poison. -------------------------------------------------------------------------------- dbf363a776 | Aidan Holm | 2019-11-26 20:28:26 +0800 Fix "Found item" messages not being coloued correctly (gammafunk) This was caused by mpr() not supporting formatted_strings, which were being silently converted to plain std::strings, discarding all colour information. -------------------------------------------------------------------------------- 4c60e79141 | gammafunk | 2019-11-26 01:49:09 -0600 Don't trap monsters in Zig pillars (AliasTheSpectator) The Ziggurat pillar vault ziggurat_pillar_centre_drop places monsters behind fully opaque walls, providing a teleport trap to release them. This no longer works with LOS requirements for trap triggering, so make the vault always have transparent rock or stone windows. I've also modified the vault substitutions so that the windows will always be diggable when the rest of the vault is. -------------------------------------------------------------------------------- c9f82b1288 | gammafunk | 2019-11-25 17:32:57 -0600 Allow Divine Exegesis without a memorized spell (12129) The check for the ability to cast spells includes one for having at least one spell memorized. Don't require this condition for Exegesis, as this ability casts directly from the spell library. -------------------------------------------------------------------------------- d145f35b4e | gammafunk | 2019-11-25 15:32:46 -0600 Fix spell colors for Divine Exegesis No longer show spells listed by Divine Exegesis as dark grey if they couldn't be memorized due to spell level restrictions, since the ability doesn't care about spell levels. -------------------------------------------------------------------------------- 379fad0a35 | Edgar A. Bering IV | 2019-11-25 14:41:19 -0500 Extend Fedhas protection to collisions (12082) There is no messaging or indication to the player that Fedhas doesn't protect plants from player-induced collision damage. For consistency's sake the best solution here is to extend the protection. -------------------------------------------------------------------------------- 3835771c07 | Edgar A. Bering IV | 2019-11-25 13:43:22 -0500 Checkwhite -------------------------------------------------------------------------------- bad95dda2c | Edgar A. Bering IV | 2019-11-25 13:42:13 -0500 Convert summon damage dismissal into a fineff (12082) The solution in 0.25-a0-106-g3db639d13e led to crashes; use contexts of behavior_event do not expect that the behavior event might kill the monster. Converting the dismissal to a fineff prevents these problems. -------------------------------------------------------------------------------- 1a393a3f05 | Aidan Holm | 2019-11-26 01:37:41 +0800 Tidy up tilesdl.cc a bit -------------------------------------------------------------------------------- 4f669b765a | Aidan Holm | 2019-11-26 01:37:41 +0800 Simplify some local tiles code -------------------------------------------------------------------------------- 9513415ccb | advil | 2019-11-25 10:19:51 -0500 Detect an empty des cache This is designed to preempt cryptic error messages that can happen if you run tests directly without previously building the des cache; it's maybe a bit of an overly clever method to do so but also very easy to write. Resolves #1121 -------------------------------------------------------------------------------- 0adb1bad81 | Aidan Holm | 2019-11-25 22:49:33 +0800 Add webtiles dev option note to readme [skip ci] -------------------------------------------------------------------------------- 529652008a | Aidan Holm | 2019-11-25 22:39:54 +0800 Show sprint help for sprint menu help button (GH #1203) This handler is only called for the tutorial and sprint menus, and the tutorial lacks a help button, hence the assertion. '6' is the hotkey for the sprint section. Blegh. -------------------------------------------------------------------------------- f1674c6136 | Aidan Holm | 2019-11-25 21:21:33 +0800 Fix webtiles chat not responding to mouseclicks (12136) Predictably, the focus-trap library was responsible here, along with some over-eager trapping of events. Thankfully the focus-trap has a very useful allowOutsideClick hook which does exactly what we want; pass through click events to attached handlers under certain conditions. Separately, we also need to not capture all events if the focus is outside the popup; this allows exiting the chat window with the escape key when a popup is open. Regrettably, the focus-trap library does not provide onPause/onUnpause hooks to facilitate this, but we can make do. -------------------------------------------------------------------------------- 836c352ace | gammafunk | 2019-11-24 14:42:35 -0600 Declare a global function This was apparently omitted in the artefact code perfomance improvements made in ca9b7906. -------------------------------------------------------------------------------- 16436c4407 | advil | 2019-11-22 17:21:55 -0500 Don't crash when right clicking in local tiles I don't understand the circumstances under which this event is getting sent, but just ignoring it seems to work. Resolves #1210 -------------------------------------------------------------------------------- 8b14890379 | advil | 2019-11-22 16:49:57 -0500 Don't crash if tornado dismisses a friendly summon -------------------------------------------------------------------------------- b55e97dba5 | Istvan Marko | 2019-11-22 00:07:37 -0500 Use yaml.safe_load instead of load PyYAML'S yaml.load is insecure and it is deprecated in 5.1. Some distributions even disable it, making it difficult to build DCSS on them. Use the recommended safe_load instead. -------------------------------------------------------------------------------- 00f8f0cddd | Edgar A. Bering IV | 2019-11-21 12:18:32 -0500 Fix a typo in the previous commit -------------------------------------------------------------------------------- f5240d96fa | Edgar A. Bering IV | 2019-11-21 12:14:00 -0500 Add Boris to the Orb Run Give Boris a chance to come back on the Orb run if he spawned in the game. Boris has the same chance as a named lord whose rune you've taken. While Boris isn't the most threatening Orb run spawn, he definitely poses a threat and having him spawn is great flavour. -------------------------------------------------------------------------------- b7fd73da8f | Aidan Holm | 2019-11-21 08:38:11 +0800 Fix mouse click not working in skill menu (12133) The event handler was being called with a CK_MOUSE_CLICK dummy key sent from UISkillMenu::on_event(), delivered directly to the skill menu via Widget::on_event(). This meant that the event did not bubble, and would not be caught by a handler attached to the skill menu parent. -------------------------------------------------------------------------------- d1d2e81aba | advil | 2019-11-20 12:08:20 -0500 Simplify some holiness checks for monster swapping One of these checks changes behavior. Requiring the same holiness for swapping around intelligence in general seems really spoilery and weird. If this doesn't work out (e.g. there's too much swapping as a result, or some noticeable effect on balance) I'm open to reverting or modifying this. However, I think if something like this needs to be in place, then we should first try a more obvious rule, e.g. nothing can swap past undead. (Which I think is the main use case anyways.) The demonic change is just an optimization and shouldn't affect behavior. (Full holiness checks are costly if done a lot, because they check damage types -- but this is irrelevant for the demonic check.) -------------------------------------------------------------------------------- 282e4f8531 | advil | 2019-11-20 11:30:19 -0500 A few more monster movement optimizations These eliminate/reduce a few more hotspots. The bounds check in _handle_movement shouldn't lead to any behavior change, since if the player is out of bounds they can never see any other cell; but it cuts a biggish case to do the check preemptively, as opposed to inside various loops. -------------------------------------------------------------------------------- 59b909255d | Aidan Holm | 2019-11-20 14:33:21 +0800 Fix various small alignment issues Switchers with scrollers inside them generally need to have align_x set to stretch, so that the scrollbar will be flush against the right-hand side of the screen on local tiles. -------------------------------------------------------------------------------- 260bac964e | Aidan Holm | 2019-11-20 14:32:07 +0800 Use consistent desc/quote switch text This code is pretty heavily duplicated from describe_monsters(). For reasons unknown, show_description() does not show quotes at all on webtiles... -------------------------------------------------------------------------------- 0c4bda3fdf | Aidan Holm | 2019-11-20 12:12:11 +0800 Fix input_dialog key binds on webtiles (kitchen_ace) -------------------------------------------------------------------------------- 11d28fe0fd | Aidan Holm | 2019-11-20 10:58:05 +0800 Grammar fixup -------------------------------------------------------------------------------- 7faa4cee5b | Aidan Holm | 2019-11-20 10:48:32 +0800 Use textbox widget for msgwin_get_line() popup -------------------------------------------------------------------------------- 0541610ab6 | Aidan Holm | 2019-11-20 10:48:32 +0800 Fix hotkey binding encoding on webtiles client On the crawl server, all key events are encoded as integers; HTML/JS does not provide a way to map a keydown event to an ascii keycode (while crawl does a whole lot of rather strange mapping, the keys we care about and wish to bind as hotkeys are almost all within a-zA-Z0-9). This makes complete sense because a key and a character are separate things, but it does mean some extra conversion is required. This commit adds ui.utf8_from_key_value() and ui.key_value_from_utf8(); these convert a key value name string, such as "D" or "Enter" to/from an integer that the crawl server recognizes. -------------------------------------------------------------------------------- b6c28e0f30 | Aidan Holm | 2019-11-20 10:48:32 +0800 Remove unneeded focus -------------------------------------------------------------------------------- ce263d24b7 | Aidan Holm | 2019-11-20 10:48:32 +0800 Add textbox paste from clipboard function -------------------------------------------------------------------------------- f2554d85d0 | Aidan Holm | 2019-11-20 10:48:32 +0800 Fix focus traps breaking webtiles chat Focus traps on the top-level popup prevent the chat box from being focused. To fix this, when showing the chat, we enter a new focus trap, and leave it when returning to the game. This is complicated by the fact that the chat JS is effectively non-modifiable (not in game_data), so we attach to the focusin event. You can tab around within the chat popup; the focus-trap class prevents nested traps when doing so. -------------------------------------------------------------------------------- afe43dc842 | Aidan Holm | 2019-11-20 10:48:32 +0800 Improve focus rendering for webtiles watchers On watching clients, don't use focus traps, and disable all focusable input elements. Since we can no longer rely on the input focus, we add a style-focused class to take its place on watching clients. This produces a much better experience when spectating. -------------------------------------------------------------------------------- 1c8e11a960 | Aidan Holm | 2019-11-20 10:48:32 +0800 Remove unnecessary set_focused_widget() calls -------------------------------------------------------------------------------- f460fa4231 | Aidan Holm | 2019-11-20 10:48:32 +0800 Remove unused headers -------------------------------------------------------------------------------- 40106efd0c | Aidan Holm | 2019-11-20 10:48:32 +0800 Make webtiles seed selection dialog scrollable -------------------------------------------------------------------------------- 1855e6e8d2 | Aidan Holm | 2019-11-20 10:48:32 +0800 Small refactor of event handlers -------------------------------------------------------------------------------- cd842479fa | Aidan Holm | 2019-11-20 10:48:32 +0800 Extract MenuButton focus-on-hover behaviour Previously, buttons would take input focus when hovered. Now, this only happens for buttons within OuterMenus, and it is the OuterMenu which adds the event handlers for this. This makes MenuButtons much nicer to use outside of OuterMenus, and they will probably be moved into ui.cc Since they can be hovered without being focused, some additional rendering code is needed. -------------------------------------------------------------------------------- da5b7fe257 | Aidan Holm | 2019-11-20 10:48:32 +0800 Use textbox for arena UI -------------------------------------------------------------------------------- 0ead14ac95 | Aidan Holm | 2019-11-20 10:48:32 +0800 Refactor menu button activation handling This adds an ActivateEvent and a corresponding on_activate_event() helper. Activate events are emitted when a button (and, in the future, other widgets?) is activated by clicking, pressing its hotkey, or pressing space/enter while it has input focus. Activate events bubble, so you can add a handler to the button itself, or to a higher-level container containing many buttons within it. -------------------------------------------------------------------------------- b87a47e8d2 | Aidan Holm | 2019-11-20 10:48:32 +0800 Refactor event delivery This commit attempts to make event delivery more centralized, by moving most calls to widget->on_event() to a single function responsible for event delivery up and down the widget layout. This should make event propagation easier to understand. -------------------------------------------------------------------------------- 2c8c973532 | Aidan Holm | 2019-11-20 10:48:32 +0800 Add ui-specific event class Mostly necessitated by the need to add an event target member. Different event types are now implemented as subclasses. Unfortunately this means downcasting via static_cast<> in some cases, although the new on_foo_event() handlers remove that need by passing a derived event. I'm not too sure about the Event::Type::Foo verbosity... otherwise, it's mostly a net improvement. In C++20 you can do `using enum Event::Type;` which might help, when we get C++20. -------------------------------------------------------------------------------- 65a9246054 | Aidan Holm | 2019-11-20 10:48:32 +0800 Add event handler helper functions This commit hides the ugly event handler slots mechanism, adding clearly named event handler helpers that, in the case of on_keydown_event, removes the need to check the event type. -------------------------------------------------------------------------------- 52f71b681c | Aidan Holm | 2019-11-20 10:48:32 +0800 Sync all widget state on layout push Initial widget state is often set before pushing the new layout, causing sync messages that are discarded by the webtiles client (since the corresponding layout HTML has not been created). In order for these widgets to have the correct state on webtiles clients, the state must be resent on push. -------------------------------------------------------------------------------- 78f1d665fd | Aidan Holm | 2019-11-20 10:48:32 +0800 Add focus sync Mostly straightforward. One caveat is that widgets require a sync-id to have their focus state synced correctly, even if they have no other data that can be synced. A console warning will be issued if you tab to such an element, so manual testing during development should catch any missing ids. -------------------------------------------------------------------------------- 69b4fc02ef | Aidan Holm | 2019-11-20 10:48:32 +0800 Protect against network races with popup generation IDs This commit adds a simple mechanism intended to ensure that widget sync messages are always delivered to the correct widget. Widget layouts / popups have a generation id, which is an increasing integer that never repeats. Sync messages include the current client/server generation ID, which is used to discard invalid messages on the other end. Sync messages for widgets / elements not on the top layout / popup are discarded. One reason for discarding these is that 1) on the server, while getting the generation ID of the top layout is easy, getting the generation ID of an arbitrary layer would require more API changes; and 2) it's unlikely for these to be generated on the webtiles client. While it's quite easy to change the state of any widget given a pointer on the server, discarding these messages should not cause any issues, as the entire set of syncable widgets are resynced on layout push/pop. An example of how a sync message could be sent to the wrong widget without a mechanism like this in place: 1) Client changes widget state, e.g. textbox contents 2) Simultaneously, server pops layout 3) Server receives widget state from client for previous layout -------------------------------------------------------------------------------- 465f1a91d0 | Aidan Holm | 2019-11-20 10:48:32 +0800 Add generic webtiles UI state syncing This commit adds an improved widget state synchronization system. Widgets now have a sync_id property. If set to a non-empty string, widgets' state will be synchronized automatically in both directions, which should allow phasing out the clunky ui_state_change() sync mechanism. Note: the currently focused widget is not yet synchronized. -------------------------------------------------------------------------------- 0499068236 | Aidan Holm | 2019-11-20 10:48:32 +0800 Improve seed generation UI This commit improves the seed generation UI, using the new text entry and checkbox widgets, as well as the new focus system. UI state is not yet synchronized between webtiles and server. This commit also adds a HTML implementation; previously, the CRT emulation system was being used. -------------------------------------------------------------------------------- 74bebdfac3 | Aidan Holm | 2019-11-20 10:48:32 +0800 Add widget focus cycling This implements a more versatile input focus layer for local tiles and console. Widgets can now be focusable or not, depending on derived type. On UI hierarchy change, a DFS is performed of all widgets and all focusable widgets are collected into an array, which is then used for cycling between focusable elements. This commit adjusts keyboard event delivery. The keyboard event (key up or down) is delivered first to the focused widget, which has a chance to handle the event and stop propagation. Next, tab, shift+tab, and esc are handled; if one of these keys is pressed, propagation stops. Otherwise, propagation continues upwards. Input focus on webtiles is decoupled from input focus on the server. The current plan is that the webtiles implementation for a given UI layout will have corresponding focusable HTML elements, and that UI state, including focus, will be synchronized in both directions. -------------------------------------------------------------------------------- b7d4c039f0 | Aidan Holm | 2019-11-20 10:48:32 +0800 Make shift-tab work on unix console -------------------------------------------------------------------------------- c9420b3d73 | Aidan Holm | 2019-11-20 10:48:31 +0800 Move controller event handlers to popup widgets -------------------------------------------------------------------------------- 37c931e5a9 | Aidan Holm | 2019-11-20 10:48:31 +0800 Add widget internal child tracking It's not uncommon for non-container widgets to have internal children as an implementation detail, invisible to the code using the non-container widget. This new API requires such internal children to be explicitly marked as such, allowing the UI system to enumerate them. for_each_internal_child() iterates over internal children, and the somewhat verbose for_each_child_including_internal() iterates first over internal widgets, and then over all children. These new APIs are added because widget users will not expect to see internal non-child widgets they did not add when iterating over a widget. -------------------------------------------------------------------------------- 383bcb0925 | Aidan Holm | 2019-11-20 10:48:31 +0800 Improve Widget::for_each_child() helper Previously, it only worked on containers, so if you only had a Widget* you had to use a dynamic_pointer_cast and an if statement: ugly. Now regular non-container widgets just do nothing by default. It's also been given a clearer name. -------------------------------------------------------------------------------- c74a01a412 | Aidan Holm | 2019-11-20 10:48:31 +0800 Remove Layout::add_event_filter() API -------------------------------------------------------------------------------- 74dbbd1b81 | Aidan Holm | 2019-11-20 10:48:31 +0800 Use new hotkey API -------------------------------------------------------------------------------- 50eff3ad4f | Aidan Holm | 2019-11-20 10:48:31 +0800 Add hotkey event handling support The purpose of this hotkey handling API is to be more explicit about the purpose of individual event handlers, replacing the add_event_filter() API. Hotkey handlers are only called for keydown events, before all other handlers get a chance to run. Note: hotkey handlers get called for *all* keydown events, due to the large number of handlers that have switch statements. -------------------------------------------------------------------------------- 5d773dd3d0 | Aidan Holm | 2019-11-20 10:48:31 +0800 Add text entry widget This commit adds a rudimentary textbox widget. It is single-line only, and does not support text selection or, indeed, most of the niceties of regular OS/toolkit-provided textboxes. That can come later. This widget has an inner LineReader class, which is a gutted version of the line_reader class, permitting independent modification. line_reader, meanwhile, will hopefully eventually be removed as more and more UI layouts are widgified. -------------------------------------------------------------------------------- ab78da221f | Aidan Holm | 2019-11-20 10:48:31 +0800 Add checkbox widget This adds a rudimentary checkbox widget. Currently, hovered checkboxes and checkboxes with input focus are visually indistinguishable. -------------------------------------------------------------------------------- fe7bffbe7c | Aidan Holm | 2019-11-20 10:48:31 +0800 Add improved console cursor positioning API Widgets may wish to show the console cursor at a particular position, e.g. a focused text entry widget should indicate the current cursor position. However, the cursor position is also changed while rendering widgets in general, and widgets have no control over the order in which they are rendered, by design. This API allows a widget to explicitly request, for one render cycle, that the on-screen cursor be positioned in a given position. The UI framework will then move the cursor to that position after rendering, just before the screen is updated. -------------------------------------------------------------------------------- 66650a8186 | Aidan Holm | 2019-11-20 10:48:31 +0800 Rename MouseEvent -> wm_mouse_event Partially for consistency with the other wm_event types, but also because I want to use MouseEvent as a derived type of a new ui-layer specific Event class, without having to worry about changing all the cruft left over in tilereg-* -------------------------------------------------------------------------------- f485fd5ed0 | Aidan Holm | 2019-11-20 10:48:31 +0800 Refactor widget hover path handling This commit moves the hover path inside the UIRoot struct, which avoids the undefined destruction order of statically-allocated instances. I'm not sure that this was ever an issue in practice, but UB is UB, and in any case the code is cleaner now. This also fixes an issue when setting a widget's parent did not update the hover path. Now, the hover path is truncated if the widget has no parent, and recalculated afresh (delivering mousein/out events) if it is part of the top layout. Finally, this commit renames prev_hover_path to hover_path, which makes much of the code using it easier to read. -------------------------------------------------------------------------------- 87cb31babd | Aidan Holm | 2019-11-20 10:48:31 +0800 Extract UI debug drawing code This is purely a method extraction and shouldn't have any functionality changes. -------------------------------------------------------------------------------- 8dd6822314 | Aidan Holm | 2019-11-20 10:48:31 +0800 Make box alignment members protected This is necessary since changing box alignment should force a recalculation of the box's size. This was never an issue because noone was changing box alignments after showing the box, but it's better to have proper encapsulation. -------------------------------------------------------------------------------- eeaa2dc683 | Aidan Holm | 2019-11-20 10:48:31 +0800 Clean up ui.cc and ui.h -------------------------------------------------------------------------------- 166592d65c | advil | 2019-11-19 21:47:49 -0500 Various refactoring to make expensive calls less likely This is all in code paths that are involved in monster movement, so code that is called very frequently. Calls that check enchantments in particular seem to be disproportionately bad. -------------------------------------------------------------------------------- a07cd79442 | advil | 2019-11-19 21:47:49 -0500 Disable some debugging code even in FULLDEBUG This might be useful if this cache ever stops working, but right now it's just slowing down FULLDEBUG builds for no good reason. -------------------------------------------------------------------------------- b95ba5eb33 | Aidan Holm | 2019-11-20 10:46:33 +0800 Unbrace [skip ci] -------------------------------------------------------------------------------- 53d2a09ee0 | advil | 2019-11-19 20:31:48 -0500 Remove clinging This is a long-time spoilery corner of dcss monster behavior, and has been under consideration for removal for years (more or less since player clinging went). Clinging monsters had weird/unique pathfinding behavior with a bunch of hidden special cases that weren't ever well-communicated (or communicatable) to the player, for example a +4 search radius for players out of los. The special cases were also kind of error-prone, as in the 0.23 bug with clinging monsters behind glass walls. This commit removes clinging without replacement. If this is somehow a nerf to spiders, I would just make them able to unconditionally cross water. (But I sort of doubt it'll make a difference.) -------------------------------------------------------------------------------- 514c71c9f1 | advil | 2019-11-19 20:31:48 -0500 Fix a wizmode / test crash on randbooks -------------------------------------------------------------------------------- 94313f71df | advil | 2019-11-19 20:31:48 -0500 Refactor habitability checks around monster flight The airborne() call is quite heavy, given how many varied things it must check. This commit refactors habitability checks to only ever check airborne() if all other tests have failed, and if the terrain is actually one that would be saved by flight. -------------------------------------------------------------------------------- ca9b790695 | advil | 2019-11-19 20:31:48 -0500 Clean up some heavy-handed artefact code Any time you checked an artefact property, the old code made an entire copy of the CrawlHashTables for both the artefact props and its known state. Because artefact properties are checked frequently when monsters are carrying them (mostly in case they have flight), this could lead to heavy world_reacts on some levels, e.g. Vaults 5. This was particularly noticeable with step from time on a debug build. -------------------------------------------------------------------------------- e29c8f2358 | Aidan Holm | 2019-11-18 22:08:36 +0800 Check makefile deps in parallel When running make, the dependency files are first checked to see whether they are stale, which can take several seconds. This commit parallelizes that by forking for each dependency (currently around 350 in total). There are no race conditions because the output is merged linewise and there are no ordering constraints on the generated dependencies. This takes a NOP rebuild from ~3.6 seconds down to ~1.2 seconds on my machine. -------------------------------------------------------------------------------- e9c0e85935 | advil | 2019-11-17 19:09:22 -0500 Improve some webtiles logging messages in order to make cross-checking things a bit easier. (Added IP to login messages, and name to start/stop watching messages.) -------------------------------------------------------------------------------- da8bd6cf83 | AdamPG | 2019-11-16 17:01:40 -0500 Make the Warlock's Mirror's reflection chance scale as intended Commentary about the omnireflection property granted by the Warlock's Mirror (see line 3099 of beam.cc) indicates that it is intended to reflect 50% of ench-type effects at 20 displayed SH; however, the the actual chance is 33% due to a mathematical error. This commit changes the chance to the intended 50% at 20 SH. -------------------------------------------------------------------------------- 8addd88b59 | Edgar A. Bering IV | 2019-11-16 15:12:44 -0500 Clarify and correct Vampire status info (12121, 12035) Also, Closes #1202. -------------------------------------------------------------------------------- 3db639d13e | Edgar A. Bering IV | 2019-11-16 13:44:35 -0500 Dismiss most summons on attitude change (12082) For the most part, creating hostile summons is a bad thing for a player; however, there are some exceptions that led to degenerate behavior. Guardian Golem which has no attack and any of the stationary summons (SLS and Fedhas' summons) could be made hostile in order to block monsters indefinitely. This commit changes the behavior in the following way: - True summons are dismissed on attack. The exception is demons from Summon Greater Demon, which turn hostile. - "Summons" that are M_CONJURED (fulminant prisms, ball lightning, fire fire vortices, other spell proxies) take damage but retain ATT_FRIENDLY - Fake summons (snakes, undead, malign gateway tentatcle) become hostile on hit. This will need to be re-evaluated if stationary or attackless undead get added. -------------------------------------------------------------------------------- 2289b3b9f1 | Aidan Holm | 2019-11-15 16:27:11 +0800 Fix run_layout() clearing default focus By default, the child widget of the popup widget is focused; run_layout's initial_focus parameter broke this default. -------------------------------------------------------------------------------- e48d713e8b | Aidan Holm | 2019-11-15 16:00:17 +0800 Fix string_wrap removing trailing empty segments This was causing a trailing newline in text widgets to not be rendered properly on console. -------------------------------------------------------------------------------- 264caf7d7f | Aidan Holm | 2019-11-15 16:00:16 +0800 Set initially focused widget from run_layout() -------------------------------------------------------------------------------- bfa96ce22d | Aidan Holm | 2019-11-14 22:10:58 +0800 Add support for formatted_string + string -------------------------------------------------------------------------------- e1e9d9662a | Aidan Holm | 2019-11-14 20:59:31 +0800 Add support for formatted_string += string -------------------------------------------------------------------------------- 33052ceff8 | advil | 2019-11-13 11:56:26 -0500 Remove old flavor messaging from fedhas_altar_decomposition (12106) This vault seems ok without it, at least if one is fine with trapped monsters. Could just be removed entirely, perhaps? -------------------------------------------------------------------------------- fcdb843264 | gammafunk | 2019-11-13 00:19:17 -0600 Correctly cap duration for Fedhas summons The enchantment degree for the abjuration enchant is supposed to range from 1 to 6, but the checks on this for monster placement code aren't applied when non-spells set up the monster data. Code implementing non-spell abilities that create summons must itself enforce the degree cap, otherwise it can create permanent allies. This commit adds this degree cap to the Fedhas abilities. It took invocations of over 15 to achieve abjuration degrees above 6. Hence it wasn't 'free' to get permanent allies before this commit, but we want the allies to be temporary ones all the same. This change means that duration is maxed out at 15 invocations to 190 turns on-average, however the abilities continue to scale with past 15 invocations through increases to the allies' HD. -------------------------------------------------------------------------------- 0cf78c2f83 | Alex Jurkiewicz | 2019-11-12 09:23:21 -0500 Add !cancellation to Zig loot table (EugeneJudo) "Do cancellation potions not spawn in zigs? They're very useful for surviving -wiz on pan floors when things get out of hand (brilliance doesn't help, or at least it still leaves things unreliable to cast.) My supply is running low, while it's pretty rare that I ever use them." [Committer's note: Closes #1100] -------------------------------------------------------------------------------- 19cdb01801 | Alex Jurkiewicz | 2019-11-11 23:32:41 -0500 Rework some chaos brand effects * Common effects added: might, agility * Cloning can sometimes make neutral/friendly copies of monsters * Miscasts entirely removed. Too unpredictable for a weapon brand, and steps on Spellbinder's toes. -------------------------------------------------------------------------------- 4073cf80fb | Alex Jurkiewicz | 2019-11-10 19:59:50 -0500 Run GDB from /usr/local/bin on OSX [Committer's note: Closes #987] -------------------------------------------------------------------------------- 3c6720d1ae | Alex Jurkiewicz | 2019-11-10 19:27:16 -0500 Run gdb at lower priority Will help manage load for online servers -------------------------------------------------------------------------------- 9e23508adf | Umer Shaikh | 2019-11-10 17:13:59 -0500 Make the game check the floor when emergency eating Currently if the player is about to starve to death, they will automatically eat from their inventory if they have food available. Since the player can now eat directly from the floor, this commit extends that check to seeing if there is anything available to eat on the floor. This is an edge case and not likely to matter often, but it's good to have consistent and unsurprising behaviour. I take it the intention of commit 2474f45a (which added forced eating when starving) was just about eating rather than starving, if it's possible, and that nothing special about the location of the food in inventory was intended; if that's right, this commit updates behaviour to be in line with that intention. As a player I wouldn't expect location of the food to matter, only that the game is kindly not letting me starve from inattention to my hunger state; if that's the general player expectation, then this commit also makes the behaviour less surprising. -------------------------------------------------------------------------------- 1bb46122f9 | Edgar A. Bering IV | 2019-11-10 15:11:05 -0500 Revert "Add a trunk reminder for the 0.24 tournament" This reverts commit 9dd530fc128f9e15ccd22fabec984bd9d586efbc. -------------------------------------------------------------------------------- 20dcb12bf1 | Edgar A. Bering IV | 2019-11-10 14:16:00 -0500 Remove edge cases from Fedhas protection This commit extends Fedhas protection to piercing attacks done by all allies. Fedhas summons also worship Fedhas, so can shoot through plants. Other summons do not, but will shoot through briars because they "can be shot through". The result is players killing their own briars with a lightning spire or similar. The narrowest fix is to have Fedhas only protect briars from non-Fedhas allies, but the result of that approach is a thicket of special cases. This commit also extends Fedhas protection to ballistomycete spores (which had previously been excepted for reasons involving the old spore network system) and snaplasher vines (the remaining exception, which wasn't described anywhere). -------------------------------------------------------------------------------- 23bb404d27 | Aidan Holm | 2019-11-10 23:45:40 +0800 Fix overenthusiastic nullptr find-replace -------------------------------------------------------------------------------- 0e808ab1dd | Aidan Holm | 2019-11-10 20:09:08 +0800 Fix backspace-clears-name behaviour Previous commit did not stop treating backspace as 'clear' if any other key was pressed. Backspace will now keep clearing until you press a key that changes the name input (or backspace). -------------------------------------------------------------------------------- 355392fac7 | Aidan Holm | 2019-11-10 19:57:04 +0800 Partially restore backspace-clears-name behaviour (advil, 12119) Fully restoring the old behaviour is non-trivial, but this change should make clearing the initial name easy, which is the primary use-case. Backspace will now clear if it's the first key pressed, and delete one character at a time otherwise. -------------------------------------------------------------------------------- 1777079349 | Aidan Holm | 2019-11-10 19:46:53 +0800 Fix redraw issue when game ends (Goratrix, 12124) Fully redrawing the screen is only necessary when running, since a more() may be issued while running and the map should be updated to show the correct location. Otherwise, fully redrawing currently causes redraw issues and crashes if more() forces a redraw during monster moves; use the old draw code in this case for now. -------------------------------------------------------------------------------- a3d287bc14 | advil | 2019-11-09 12:51:50 -0500 Don't crash if there aren't enough spells for an acquired randbook This can happen, for example, if sif grants a mummy a pure transmutations randbook, and rolls a size of 8 -- there aren't enough spells in the school currently that a mummy can cast. -------------------------------------------------------------------------------- a6f17ae7d4 | advil | 2019-11-08 16:24:36 -0500 Don't update travel cache on excursion to unvisited levels (odiv) An excursion to unvisited levels can happen, since 0.23, for pregenerated levels when creating abyss terrain. The level excursion was putting an entry into the travel cache, leading to the level visited values in ctrl-o potentially being wrong. -------------------------------------------------------------------------------- 7617fd2bc2 | advil | 2019-11-07 14:50:15 -0500 Improve behavior of `remember_name = false` There were several cases where this option wasn't working as expected. Two main ones: * If a name was present in the sticky prefs, but this option was false, the saved name would still be loaded. * It was ignored on restart after a game end. This commit also lets `*` work to pick a random name at the main menu, not just at the name prompt. It's a bit of a hidden feature for now, not sure how best to document it to users. -------------------------------------------------------------------------------- 11f2770c52 | Aidan Holm | 2019-11-07 10:04:34 +0800 Link with the LLVM linker if available On my system, linking with lld is around 9 times faster than GNU gold, with link times of around 0.5 seconds. -------------------------------------------------------------------------------- fb64b48880 | Aidan Holm | 2019-11-07 10:04:34 +0800 Add const -------------------------------------------------------------------------------- a3fec9ad93 | Aidan Holm | 2019-11-07 10:04:34 +0800 Remove broken back-compat keybindings for hints menu This broke a while ago, once event delivery was changed to bubble up instead of down. No-one's complained, so let's quickly removed it; easy enough to add it in later, but currently it's in the way of further refactorings. -------------------------------------------------------------------------------- e945405b5e | Aidan Holm | 2019-11-07 10:04:34 +0800 Remove weird shift-X binding -------------------------------------------------------------------------------- 9b55229ae5 | advil | 2019-11-06 14:18:47 -0500 Don't crash on a few cases of invalid skill names in lua Handling of bad skill names is extremely mixed in l-you; a few other cases do actual error checking, but most just return fighting on errors, which seems maybe non-ideal. There are two dlua cases that will still crash on bad skill names that I didn't bother to fix. -------------------------------------------------------------------------------- 1d1f32e58f | Aidan Holm | 2019-11-06 10:05:54 +0800 Fix more compiler warnings This adds most of -Wextra, except for a few exceptions. -------------------------------------------------------------------------------- 5069e0ce05 | Aidan Holm | 2019-11-06 10:04:39 +0800 Fix enum + non-enum mixing in ?: expressions -------------------------------------------------------------------------------- 0d431de418 | Aidan Holm | 2019-11-06 10:04:39 +0800 Remove hacky function pointer casts -------------------------------------------------------------------------------- 2bcd1f60b1 | Aidan Holm | 2019-11-06 10:04:39 +0800 Remove/mark unused parameters This commit transitively removes unused parameter from all over crawl. If the unused parameters look like they're part of an interface, I've left them as is, but commented out the parameter name. In general, if I'm less confident that a parameter is intentionally ignored, i've marked it with UNUSED(). One pain point is that crawl has a lot of conditional compilation, and variables are sometimes only used by one ifdef branch. I've still used UNUSED in these cases, but it's less than ideal. -------------------------------------------------------------------------------- 359a7de824 | Aidan Holm | 2019-11-06 10:04:39 +0800 Add UNUSED(...) macro This allows use with parameter packs, and also allows specifying multiple arguments, e.g: UNUSED(arg1, arg2); -------------------------------------------------------------------------------- d92d1f55eb | Edgar A. Bering IV | 2019-11-05 20:00:37 -0500 Check appropriate tracers in monster wand usage (ManMan) Scattershot and Cloud cone were incorrectly using a fake_beam tracer to determine when to be used as wand spells, instead of the relevant tracer functions from mon-cast.cc -------------------------------------------------------------------------------- 9796ba8d15 | Aidan Holm | 2019-11-05 00:30:59 +0800 Fix incomplete draws while running (advil) The UI layer calls viewwindow() via redraw_screen() to ensure that the base layout (view, hud, and messages) is fully rendered before rendering any popups (if there are any). viewwindow() does not render the main view if the player is currently running, however, so if autoexplore is paused during a prompt (e.g. the inventory full during pickup prompt or rune pickup force-more), the view is not fully rendered on either tiles or console. This commit fixes this issue by only skipping rendering while running if the current mouse_control mode is MOUSE_MODE_NORMAL. Prompts via more() and yesno() change the mouse mode, forcing full rendering. This commit also fixes the turn counter not being updated while running, and partially fixes the more prompt while running. Currently, at least on local tiles, resizing the window causes the --more-- line to disappear, due to the way the message code is structured. -------------------------------------------------------------------------------- 6cdc7bcc1e | theJollySin | 2019-11-04 20:37:15 +0800 Remove haste potion from FoWn start (12115) -------------------------------------------------------------------------------- e910a4a285 | Edgar A. Bering IV | 2019-11-02 12:29:51 -0400 Don't feel safe near exploding monsters Change i_feel_safe to alert the player instead of waiting near friendly fulminant prisms, ball lightning, or ballistomyete spores. Currently this is slightly overzealous and will refuse to wait in sight of a fulminant prism regardless of distance, but this minor edge case is preferable to players waiting after a fight with Fedhas or CBL and dying after pressing 5. -------------------------------------------------------------------------------- f553b7a2c8 | Aidan Holm | 2019-11-02 22:00:48 +0800 Fix menu filtering from crashing (damerell, 12120) cursorto() moves the on-screen cursor to the correct position, given the cursor offset in the input text. However, resumable_line_reader never renders to the screen directly, so it's safe to NOP this function entirely. The crash itself seems to have something to do with the line reader start position, but I'm less interested in fixing this hacky mess because a replacement (textentry widget) is almost finished. -------------------------------------------------------------------------------- 7ce66cc934 | Aidan Holm | 2019-11-02 21:59:27 +0800 Remove unnecessary capitalization [skip ci] -------------------------------------------------------------------------------- e58f8a54b6 | gammafunk | 2019-11-01 23:53:32 -0500 Rework a worm vault (again) This commit reworks worms_lemuel to place more reasonable numbers of monsters in the earliest depths and to scale monsters and loot up with depth. For example, in D:7-10 it places only two on-average and 3 at maximum. The moths of wrath and/or torpor snails are also scaled more reasonably, only beginning to appear in Lair. Previously the vault used absolute depth for monster placement, but now it looks at branch and branch level. The vault's layout is slightly changed to accommodate the potential max number of spawns. I've also made the vault place within-branch monsters in Swamp/Spider, since placing swamp worms in Spider is not too interesting. Now it uses demonic crawlers in Spider and only torpor snails as the "assistant" monster there, since crawlers can't be berserked by moth of wrath. -------------------------------------------------------------------------------- 7dccc1bee0 | Aidan Holm | 2019-11-01 12:41:30 +0800 Fix description UIs not scrolling via keyboard Keyboard events now have to be explicitly passed to scroller widgets, as they cannot (currently) be focused. A better implementation is in the works. -------------------------------------------------------------------------------- fe832476f1 | Aidan Holm | 2019-11-01 11:22:00 +0800 Prevent pinned monsters from using trample (Yermak, 12062) -------------------------------------------------------------------------------- 7ed4e613ac | Aidan Holm | 2019-11-01 10:52:09 +0800 Fix some screens wider than minimum width (12008) The spell info and memorise menus were slightly wider than the minimum width. When viewing a description from one of these menus on a console screen with minimum width (79 chars), the UI layout engine takes the width of the lower layout into account, and makes the description view wider than the viewport. Any text outside the viewport is then truncated, leading to seemingly incorrect wordwrapping. Menu minimum widths are primarily determined by the width of the title string. Trimming off empty spaces at the end is enough to fix the issue. -------------------------------------------------------------------------------- fbcdf995c9 | Aidan Holm | 2019-11-01 10:52:09 +0800 Fix menu title/more margin size It's generally assumed that titles and entries of the same number of characters will have the same width. This was not the case because menu entry text has a right-padding of 10px. This commit adds a right-margin of 10px to both the title and the more, which fixes ellipsizing of menu entries when the window width is reduced. -------------------------------------------------------------------------------- befff83b7c | Aidan Holm | 2019-11-01 02:29:11 +0800 Fix win32 console branded colours Console crawl has a concept of 'branding' colours, which involves setting one of several high bits each corresponding to a given brand. This brand is then looked up in the options, allowing customization of e.g. how summons are displayed. On win32 console, branded colours were converted into actual colour pairs (fg and bg) much earlier than on unix console, (inside the real_colour() function), with the background colour being stored in bits 0xF0. This worked fine because win32 textcolour() actually updated both foreground and background colours simultaneously, until db4295c90eb, which corrected this API inconsistency, inadvertently breaking branded colours. This commit moves win32 console branding into libw32c.cc, and applies branding in the same way it is applied for unix console, fixing this issue. I'm not sure why the win32 branding was also enabled for all local tiles builds, since tiles never draws anything via the console... -------------------------------------------------------------------------------- 88673ef095 | advil | 2019-10-28 21:04:26 -0400 Remove an accidental swastika (Snack, minmay) Unfortunately it's not a good idea to cherry-pick this to 0.24 during the tournament (or maybe during 0.24) as this change will potentially affect any seed that uses minmay_the_grid. -------------------------------------------------------------------------------- 63109bb16d | advil | 2019-10-28 15:51:31 -0400 Fix some odd permastore update conditions (aidanh) This fixes weird behavior in two cases: (i) it keeps the permastore from being updated when ghosts are used during level load but the level is vetoed, and (ii) it keeps the permastore from being updated unintentionally using wizmode commands. -------------------------------------------------------------------------------- 7a5f90e2b2 | Aidan Holm | 2019-10-28 20:04:46 +0800 Revert "Add rudimentary win32 console colour adjustment" (advil) Win32 colour adjustment was added so that the new menu implementation was legible on windows console, but the legibility issue was fixed at 6844edd79dc0, which added explicit menu colouring. Meanwhile, colour adjustment is breaking the foreground text colour on the species/job menu on Windows. I'm not sure why unix is not affected. This reverts commit 40b4c6130089b08bb32c9d453dad5093658186d3. -------------------------------------------------------------------------------- f342c8b036 | advil | 2019-10-27 11:33:48 -0400 Several updates to the debian release guide, convert to md This introduces a bunch of extra detail and modifies some of the recommendations based on our experience packaging debs over the last few releases. Main changes: * explicit discussion of how to check dependencies of the built debs, hopefully avoiding ubuntu incompatibilities. * recommend always fully specifying OS/DIST/ARCH for creating and updating cows; this would head off some mistakes I've made at least. * convert doc to md, some cosmetic overhauls -------------------------------------------------------------------------------- 9dd530fc12 | gammafunk | 2019-10-25 15:21:12 -0500 Add a trunk reminder for the 0.24 tournament -------------------------------------------------------------------------------- a0c9b72eff | advil | 2019-10-25 10:04:50 -0400 Fix comma (Goratrix) -------------------------------------------------------------------------------- 68f861856e | advil | 2019-10-24 20:16:21 -0400 Add some missing credits I found some names (apparently) not in here while writing the release post. Also, apparently CXC was missing from here?? -------------------------------------------------------------------------------- 0753fd1ad2 | advil | 2019-10-24 14:28:07 -0400 Update debian changelog for release (cherry picked from commit a7d21def0a8b0b39c6825b643a3b51f371b73583) -------------------------------------------------------------------------------- 45a4e74662 | advil | 2019-10-24 14:27:59 -0400 Finalize changelog for 0.24 release (cherry picked from commit 54606e7572d31cb9608e76dcbdf8097f60c0c247) -------------------------------------------------------------------------------- 72b0ba0336 | advil | 2019-10-24 10:59:31 -0400 Fix a gcc warning -------------------------------------------------------------------------------- 9c56bcba70 | advil | 2019-10-24 09:13:43 -0400 Add vaults to stable version morgues We'll see if players think this is too spammy or too obscure, but for 0.24.0 at least this will be helpful for testing any seed issues that come up. -------------------------------------------------------------------------------- c466198565 | advil | 2019-10-23 20:42:08 -0400 Fix mummy death curses from ally kills (12104) This has been broken for a while; it was a mid/mindex confusion. I've also refactored the call so that it will better handle the case where your summon does before the fineff fires. -------------------------------------------------------------------------------- f0389da217 | gammafunk | 2019-10-23 14:53:17 -0500 Rework a wizard vault The vault cheibrodos_wizard_tower placed on-average 3 8-tier monsters at Lair depth, which is fairly nasty. This commit reworks the monster and loot placement to better scale with depth, starting with 1.25 monsters at D:7-9. The monster set now includes a possible deep elf annihilator in Dungeon, but only at depths where those are possible 8 spawns, and with a small chance. The monster count in Elf has been increased as well. The vault range is now increased to include D:13-D:$. The loot now has some thematic aux armor, randbooks, and staves mixed in, and the loot scales in count with depth. -------------------------------------------------------------------------------- 75acf02343 | advil | 2019-10-23 12:42:40 -0400 Changelog tweaks -------------------------------------------------------------------------------- 6843c08e71 | kitchen-ace | 2019-10-24 00:31:13 +0800 Warn when exploding portal projectiles would hit you 853fe2e fixed this for harming allies, but not yourself. -------------------------------------------------------------------------------- 2ac932518a | Edgar Bering | 2019-10-23 12:13:51 -0400 Correct a changelog entry (pblur) -------------------------------------------------------------------------------- 6afad29e87 | theJollySin | 2019-10-23 16:57:03 +0800 Fixed typo in wands mutation (12103) -------------------------------------------------------------------------------- 47823c4fae | Aidan Holm | 2019-10-23 16:23:21 +0800 Fix loading screen click activating main menu This fix drops mouseup events if the UI layout has been changed since the corresponding (well, previous) mousedown event. This fixes a bug where the loading screen would transition to the main menu on mousedown, and the mouseup event would then activate the button underneath the cursor. I'm not sure this is the best way to fix this. Some alternatives: - have the loading screen transition on mouseup - have the loading screen "swallow" the mouseup event explicitly via some new API - have menu buttons only activate on mouseup if they also received a corresponding mousedown -------------------------------------------------------------------------------- 29a1220a87 | gammafunk | 2019-10-23 00:29:05 -0500 Some updated invocations tiles from CanOfWorms Updated tiles for Sif Muna's Divine Exegesis and Fedhas' Wall of Briars, Overgrow, and Grow Oklob abilities. -------------------------------------------------------------------------------- 3121d2daec | gammafunk | 2019-10-22 23:31:56 -0500 More updates to the 0.24 changelog -------------------------------------------------------------------------------- 6c54e25894 | advil | 2019-10-21 11:17:42 -0400 Add seed as a logfile/score entry This is necessary if scoring (or perhaps sequell) is to do anything interesting with seeded games. This commit adds the seed for all game types, since even for normal games the seed is revealed on game end. Milestones do not have this field for any game type. -------------------------------------------------------------------------------- 6cf4ce537d | Aidan Holm | 2019-10-21 01:50:38 +0800 Fix formatted_scroller more text alignment A better fix would be to use the just-removed align_self, but I'd rather not revert that removal, and adding a better implementation would be too disruptive at this point (feature freeze). -------------------------------------------------------------------------------- 883716c04b | theJollySin | 2019-10-20 22:33:37 +0800 Adjust barehanded attack prompt wording (11907) -------------------------------------------------------------------------------- 710a5d0249 | theJollySin | 2019-10-20 22:33:37 +0800 Fix Sceptre of Torment inconsistency (12093) -------------------------------------------------------------------------------- 099c3e10fa | kitchen-ace | 2019-10-20 14:24:51 +0800 Draw shields on deep elf knights -------------------------------------------------------------------------------- 8155909c3e | kitchen-ace | 2019-10-20 14:24:05 +0800 Prevent torment from killing spriggan riders Torment shouldn't be able to kill spriggan riders or their mounts. -------------------------------------------------------------------------------- 303dd5b1f4 | Aidan Holm | 2019-10-19 16:55:46 +0800 Fix text bug (Goratrix) The Enter key does not close the popup. -------------------------------------------------------------------------------- 747a2b3c0c | Aidan Holm | 2019-10-18 05:51:48 +0800 Add icon to the high scores screen (advil) This also fixes the high score description text being centered in console. -------------------------------------------------------------------------------- 1393849f60 | Aidan Holm | 2019-10-18 04:09:29 +0800 Specify max menu width relative to font size (Siegurt, 12097) -------------------------------------------------------------------------------- 3d4e485b54 | Aidan Holm | 2019-10-18 03:46:46 +0800 Fix tile_menu_icons = false on local tiles ability menu -------------------------------------------------------------------------------- 14bc4967e4 | Aidan Holm | 2019-10-18 02:45:30 +0800 Show whether spells are in library in book description -------------------------------------------------------------------------------- f7f5d9a50a | Aidan Holm | 2019-10-18 01:14:01 +0800 Remove stray pixels from spell tiles -------------------------------------------------------------------------------- 99cdaf76fe | Aidan Holm | 2019-10-18 01:14:01 +0800 Add tiles for a few monster spells 63 to go... as measured by `grep -B7 GENERIC spl-data.h | grep ' SPELL'` -------------------------------------------------------------------------------- a86127ea33 | Aidan Holm | 2019-10-17 23:38:36 +0800 Tidy dc-spells.txt Sorts monster spells. The note for future removal referred to an entry for 'Rearrange the Pieces' that is already gone. -------------------------------------------------------------------------------- 65d077c5f1 | Aidan Holm | 2019-10-17 19:39:22 +0800 Disallow focusing widgets not in top layout (advil, 12098) On webtiles, focus events for the species menu buttons were being received after the attributes scroller had opened. On the server side, a callback would then focus the button, even though the menu had already been opened. This fix prevents widgets not in the top layer from being focused. -------------------------------------------------------------------------------- 6ac5fb96fa | Aidan Holm | 2019-10-17 19:29:42 +0800 Add ui::Widget::is_ancestor_of() -------------------------------------------------------------------------------- c393037b80 | Aidan Holm | 2019-10-17 18:46:37 +0800 Update the changelog -------------------------------------------------------------------------------- f18fdeb47f | Umer Shaikh | 2019-10-17 00:00:59 -0400 Show flay damage in status light It is tactically useful to know how much damage is due to flay. For example, it matters in deciding whether to quaff cancellation or who to attack. This information is already revealed to the player, but not in a convenient way. At the moment the careful player must pay attention to what the sources of damage are as the fight proceeds in order to know this; and, if this is neglected, it is difficult to recover the information from the message log later in the fight. This commit reveals that information more straightforwardly by adding it to the flay status light. I show a number instead of a more coarse-grained indicator. Note that otherwise the conscientious player will still want to keep track manually of damage since they can get better information that way. The damage is displayed as a negative number for consistency with the similar corrosion status light. -------------------------------------------------------------------------------- 72dcfe0359 | advil | 2019-10-16 09:55:41 -0400 Revert "Remove support for multi-key macro binds" + associated commits It turns out that multi-key macros were used for keybinds for multi-character sequences sent by some terminals corresponding to special keys. For example, under the VT100 standard, \{27}Ov is sent by numpad 6. Another example: on OS X, option+arrow keys send multi-character escape sequences as well (maybe even outside of terminal). This sequence of commits broke such old macro files, and even worse, tended to break ESC, since nearly all of these sequences are ESC sequences. We'll need to rethink how to simplify this. Some of these simplifications might be independent of the current revert project and could be restored... This reverts commit 049a78546b28e77ec9647cdfd40840a8451f18ad. (Note: also a partial revert of d158fba7, 0b1efcb, 0e779d2) This reverts commit 678ee33c32bb4efb2fda34a8b44ce857352add0c. This reverts commit 5a8975c3e2236cd5aa0d3cf1738ccfdd360a4ab3. This reverts commit 3ea5ddb52caf3a66e4f92f90f056132a344c65e3. -------------------------------------------------------------------------------- dc1bd944b9 | advil | 2019-10-15 21:38:37 -0400 Fix Ru sacrifice delay with faith (12096 / @Wise Wolf) Specific problem and solution found by @Wise Wolf on discord yesterday. -------------------------------------------------------------------------------- c5ee894079 | Edgar A. Bering IV | 2019-10-15 21:10:06 -0400 Further update the changelog Add in descriptions of the Vampire and Throwing changes -------------------------------------------------------------------------------- a5a8db46c7 | gammafunk | 2019-10-15 15:36:15 -0500 Update the changelog A quick pass that likely contains errors. I've left out Vampire and Throwing changes so that those can be written up by others. -------------------------------------------------------------------------------- 83157970ee | advil | 2019-10-15 16:14:35 -0400 Fix a js error in go_lobby Not sure what the conditions are that trigger this, but probably at least game_exit::abort. -------------------------------------------------------------------------------- 74baf033cd | advil | 2019-10-15 16:14:35 -0400 Add a webtiles seed selection popup At first glance, this may appear to be a feature, but it is in fact a bug: the bug is that paste doesn't work for crt-emulated input. Implementing this as an actual textbox is the only way I've found to get this to work in webtiles. This doesn't materially change the implementation of the seed selection ui for console/local tiles; it is just as bad as ever. -------------------------------------------------------------------------------- f4602a88a1 | Aidan Holm | 2019-10-15 23:14:54 +0800 Factor out Region::contains_point() This commit also fixes a few off-by-one bugs in widget hit testing. -------------------------------------------------------------------------------- b94451d52d | Aidan Holm | 2019-10-15 23:14:54 +0800 Don't allow showing messages on arena team choice UI It's always empty. -------------------------------------------------------------------------------- 2533fd6716 | Aidan Holm | 2019-10-15 23:14:54 +0800 Fix segfault when delivering mousebutton events The previous code used a reverse iterator that could be invalidated by the hover path changing during event handling, causing a segmentation fault. It may be better to first copy the hover path and then iterate over that; this would matter if an event handler changed something in the hover path. But the semantics of event emission aren't strongly defined at this point; better to wait for a use-case and revisit this then. -------------------------------------------------------------------------------- c27d5b89ad | Aidan Holm | 2019-10-15 23:14:54 +0800 Fix some event forwarding bugs Previously, the UI framework would propagate events from the topmost root widget down to child widgets. The framework has since been changed to propagate events up from a focused widget, inadvertently breaking these event handlers' custom event propagation. -------------------------------------------------------------------------------- bc5b4a9081 | Aidan Holm | 2019-10-15 23:14:54 +0800 Add ui::Switcher::current_widget() -------------------------------------------------------------------------------- 8ab17b4d2b | Aidan Holm | 2019-10-15 23:14:54 +0800 Fix off-by-one error -------------------------------------------------------------------------------- 1381ef2bc4 | Edgar Bering | 2019-10-15 07:47:17 -0400 Update CREDITS -------------------------------------------------------------------------------- b8d28a4aeb | theJollySin | 2019-10-15 07:37:24 -0400 Misleading text when renouncing religion (8887) -------------------------------------------------------------------------------- 2fe12d4386 | advil | 2019-10-14 16:25:26 -0400 Fix the build on non-webtiles (aidanh) -------------------------------------------------------------------------------- a8c9d54b12 | advil | 2019-10-14 16:09:42 -0400 Fix seed selection on webtiles Eventually this needs to be rewritten to use a browser text input box. -------------------------------------------------------------------------------- b6de7aaf3c | mwvdev | 2019-10-14 14:15:16 -0400 Fix manual typos -------------------------------------------------------------------------------- 771548fc26 | kitchen-ace | 2019-10-15 01:00:46 +0800 Don't stop travel for changes from (un)melding If you are auto-travelling, and you lose stats from armour melding or unmelding, don't stop auto-travel for that reason alone. This is really only relevant for merfolk with artefact boots, but the fix should apply to the general case. -------------------------------------------------------------------------------- 653463b16e | Nikolai Lavsky | 2019-10-15 00:45:52 +0800 Add details to the newgame dolls This commit adds hair, claws, and horns to player dolls on the species selection menu. These extra bits are selected according to the default values from `tilep_race_default()` and `fill_doll_equipment()`. -------------------------------------------------------------------------------- 8ac2ca0a91 | Nikolai Lavsky | 2019-10-15 00:45:52 +0800 Refactor the processing of species/job tiles This commit fixes a couple of enum names, removes unnecessary file extensions, and replaces repeating file paths with `%sdir`. -------------------------------------------------------------------------------- 8166f019b9 | Aidan Holm | 2019-10-15 00:45:52 +0800 rltiles: Allow referencing generated images by enum Wherever image filenames are used, you can now also refer to an already-generated tile by its enum name. The first such matching tile is chosen; there is no support (yet?) for selecting a variation. The motivation for this feature is to reduce duplication and ensure that changes between tiles are synchronized. -------------------------------------------------------------------------------- e7af4de912 | Aidan Holm | 2019-10-14 23:26:55 +0800 Fix abyss-gen level excursion milestones (kitchen_ace, 12078) Abyss generation can include parts of other levels, through a level excursion. When including part of a level that the player had never visited, a milestone was erroneously added. -------------------------------------------------------------------------------- 6559c6c67a | kitchen-ace | 2019-10-13 14:59:21 -0400 Show that bloodless vampires' bite can heal It's not obvious that vampires can heal themselves when they bite something, and that this works only when they're bloodless. Add some messages to the abilities screens. -------------------------------------------------------------------------------- 14d03b10f2 | kitchen-ace | 2019-10-13 14:58:48 -0400 Fix showing regen amulets as useless for Vampires Vampires now heal when bloodless as long as no monsters are in LOS. -------------------------------------------------------------------------------- ac51ba0f9b | gammafunk | 2019-10-12 20:40:28 -0500 Update ballistomycete descriptions (kitchen-ace) Updates the descriptions for ballistomycete and ballistomycete spores to remove an outdated reference to ballistomycetes growing and to describe the effect of the spore's explosion. Also add a description for the Sporulate ability using the same language. Closes #1183. [skip ci] -------------------------------------------------------------------------------- 0f74319286 | advil | 2019-10-11 12:18:19 -0400 Don't crash with equip_unequip I think this case just got missed in b57a41d. -------------------------------------------------------------------------------- a050431806 | Umer Shaikh | 2019-10-10 18:28:50 -0400 Allow putting on jewellery from the floor This commit extends previous functionality to work with puton_ring (which also handles amulets). Amount of time to perform the action is the same as putting on jewellery from the inventory. [ Closes #1136 ] -------------------------------------------------------------------------------- b57a41df76 | Umer Shaikh | 2019-10-10 18:23:04 -0400 Allow wielding and wearing from the floor This commit changes wield_weapon and wear_armour to use use_an_item so the player can wield and wear from the floor. It also changes use_an_item so * and - options are allowed to, respectively, view and choose from all items and (if selecting weapons) swap to bare hands. This means * is now available for quaffing and reading as well. The wield weapon menu can now be brought up even if there are no weapons around---indeed, even if there is nothing at all around. The first is because you can wield non-weapons with *. The second is because you always have your bare hands, and I am anticipating a menu where basic stats for weapons are displayed alongside the options (a long-standing feature request). This commit implements * to show all items. This preserves the current ability to wield non-weapons and fulfills a TODO marked in the existing use_an_item code, so that * can be used for reading scrolls and quaffing as well. However, my own feeling is that this is not a usefull bit of UI complexity from the player's side. You cannot quaff non-potions, read non-scrolls, or wear non-wearables anyway. And as far as I know the only practical use for wielding non-weapons is breadswinging, a niche speedrunning tactic. I suggest cutting this and cutting the ability to wield non-weapons. This commit makes wielding or wearing from the floor take the same amount of time as wielding or wearing from your inventory. I think this is the least surprising UI and is consistent with the current behaviour for quaffing and reading from the floor (10 aut). I anticipate this means speedrunners and the hyper-optimal will want to sometimes pick items up by wielding them from the floor (e.g., wielding arrows to pick them up). [ Committer's note: Wielding arrows from the floor to pick them up then switching back to the previously wielded item costs 15 aut and 2 turns. Just picking up the arrows costs 10. Whether turns or aut are used for scoring, just picking up arrows is faster. ] -------------------------------------------------------------------------------- b7a8766ae5 | Byrel Mitchell | 2019-10-10 18:06:47 -0400 Fixed bug in OTR variance reduction commit This makes it impossible to gain extra OTR duration by breadswinging during the final turn of duration. [Closes #1177] -------------------------------------------------------------------------------- 71cb82dfb8 | Aidan Holm | 2019-10-11 02:44:24 +0800 Fix crash when repeating menu evocations (gammafunk) When repeating the previous command via the ` key, the UI is not fully laid out. The current implementation depends on having the menu more text default to not being visible for the UI to layout correctly. On local tiles this isn't an issue, since scrollers render their own scrollbars, but on console the scroll position is rendered to the more, and the layout error was causing a division by zero in the position calculation. -------------------------------------------------------------------------------- ddf7d93d98 | Byrel Mitchell | 2019-10-10 14:29:33 -0400 Adjust OTR to be more turn length invariant. Changed direct damage to use turn length in auts (instead of 10s of auts) for direct damage, and to scale odds of adding a poison stack linearly between 1 and 20 aut turn lengths (instead of 50% odds regardless of turn length.) This has the same results as previous calculation at 10 aut turns, but eliminates the incentive to 'quick-blade-swing' to add poison stacks rapidly. -------------------------------------------------------------------------------- 36a6468e2f | Aidan Holm | 2019-10-11 01:41:06 +0800 Don't scale when rendering lines (Goratrix, 12085) This bug was caused by line buffer rendering correctness depending on the GL scale being the same when buffer packing and when rendering, which was only required due to the way the local tiles minimap worked. The local tiles minimap has been changed to render the boundary box with no scaling, fixing this weird quirk. -------------------------------------------------------------------------------- 5730307ebe | Nikolai Lavsky | 2019-10-10 13:36:11 -0400 Indicate damage done by Ignite Poison This commit brings Ignite Poison in line with other damaging spells that use exclamation marks to show the amount of damage done. It is a followup for PR #952 and commits 4a3ee908 and 1f260a4b. -------------------------------------------------------------------------------- 410b6b9510 | Aidan Holm | 2019-10-11 00:53:02 +0800 Revert "Remove UI_CRT and other UI gunk" Reverted due to https://crawl.develz.org/mantis/view.php?id=12090 This reverts commit ad5c9ccc1d3bb7aae20c7d970926c877ea0f62fe. -------------------------------------------------------------------------------- bc6939d5a1 | Aidan Holm | 2019-10-11 00:02:05 +0800 Fix minimap stretching on local tiles -------------------------------------------------------------------------------- fe114aac19 | Aidan Holm | 2019-10-10 22:45:34 +0800 Remove ui_ prefix from namespaced functions -------------------------------------------------------------------------------- ad5c9ccc1d | Aidan Holm | 2019-10-10 22:45:34 +0800 Remove UI_CRT and other UI gunk tiles_crt_popup() shouldn't be necessary, since these UIs don't use any cgotoxy/cprintf calls themselves. I'm not exactly sure of the purpose of the set_ui_state() calls here, but they shouldn't be required either for those UIs to work correctly. In general, we're trying to remove tiles_crt_popup() entirely, as it was an temporary hack used to wrap old-style UIs. As of this commit, the last remaining such UI is the skill menu UI. -------------------------------------------------------------------------------- 6733c4489b | Aidan Holm | 2019-10-10 22:45:34 +0800 Make text widget members private We also add size request invalidation, just in case someone is doing something interesting... -------------------------------------------------------------------------------- 6c541cf830 | Aidan Holm | 2019-10-10 22:45:34 +0800 Remove ui::Widget align_self property This only did anything inside a box widget, and was confusingly named (does it refer to main- or cross-axis alignment?). It seems to be unnecessary, although relying on the parent stretch property is probably slightly brittle. IIRC Flutter allows the parent to store a small amount of data on child widgets; perhaps adding a Box::set_child_cross_alignment() that utilizes this method will work well. -------------------------------------------------------------------------------- 83d332edcd | Aidan Holm | 2019-10-10 22:45:34 +0800 Make ui::Box member private -------------------------------------------------------------------------------- c303d00229 | Aidan Holm | 2019-10-10 22:44:26 +0800 Improve Box widget alignment property names "main" means alignment along the main axis, while "cross" means alignment along the cross axis. E.g. for a horizontal box, the main axis is horizontal and the cross axis is vertical. -------------------------------------------------------------------------------- d9e12f686b | Aidan Holm | 2019-10-10 22:42:55 +0800 Make RestartAllocation private to ui.cc -------------------------------------------------------------------------------- 1ec443c8e5 | Aidan Holm | 2019-10-10 22:42:55 +0800 Remove ui::vec utility array -------------------------------------------------------------------------------- cb6844083c | Aidan Holm | 2019-10-10 22:42:55 +0800 Remove use of ui::i2 -------------------------------------------------------------------------------- 9d7ac8f862 | Aidan Holm | 2019-10-10 22:42:55 +0800 Clean up headers -------------------------------------------------------------------------------- 87254cb62d | Aidan Holm | 2019-10-10 22:42:55 +0800 Add ui::Region helper class -------------------------------------------------------------------------------- aeaa904cbb | Aidan Holm | 2019-10-10 22:42:55 +0800 Add ui::Margin helper class This makes margin member accesses clearer, by allowing/forcing the use of symbolic names (top/left/etc) rather than array indices. Also adds several Margin() constructors, based on CSS notation; parameters are now forwarded by the set_margin_for_* helpers. Those helpers also now invalidate their size request, so updating margins live should also work. -------------------------------------------------------------------------------- 5029d81fa4 | Aidan Holm | 2019-10-10 22:42:55 +0800 Add ui::Size helper class -------------------------------------------------------------------------------- 2df86a587e | Aidan Holm | 2019-10-10 22:42:55 +0800 Add widget visibility Non-visible widgets don't get rendered or allocated and have a size request of zero. -------------------------------------------------------------------------------- 35933f4585 | advil | 2019-10-09 10:58:42 -0400 Don't let overgrow target out of bounds This directly provides bounds information, but that is the same as the dig and passwall targeters. The alternative (to avoid a crash) would be letting the targeter work, but the spell fail, which seems worse. -------------------------------------------------------------------------------- 2b6660483a | gammafunk | 2019-10-09 01:31:40 -0500 Fix use of Slimify on derived undead (CanOfWorms) The monster polymorph code had a special consideration (i.e. a hack) for derived undead that have the shapeshifter enchantment. This hack involved having the polymorph target check look at the monster type of the original type the undead monster derived from instead of the current type. A byproduct of this hack was that derived undead that got Slimified wouldn't polymorph into a death ooze yet would be converted to a neutral monster. Derived undead with the shapeshifter enchant shouldn't exist since undead are not normally able to polymorph. Hence this commit removes the hack to allow Slimify to work properly. Any derived undead that attempts to shift simply generate the "...looks momentarily different" message. -------------------------------------------------------------------------------- 06d714f949 | Edgar A. Bering IV | 2019-10-08 22:53:13 -0400 Add new airstrike formula to monster (minmay) -------------------------------------------------------------------------------- aa6b62e8fb | Edgar A. Bering IV | 2019-10-08 22:27:54 -0400 Add attack strength punctuation to waterstrike and airstrike These (and everything else in mon-cast.cc that does damage in mon-cast.cc instead of via beam.cc) were missed when attack strength punctuation was added to spells. -------------------------------------------------------------------------------- 4d0d9f2136 | Edgar A. Bering IV | 2019-10-08 22:25:17 -0400 Give monsters the player airstrike damage formula Commit a0cb8612 simplified airstrike damage for players; monster airstrike damage was previously a hack that gave a simplified damage formula and also reduced variance to work around the old formula's long tail. The new airstrike damage formula does not have the high-variance long tail and is appropriate for monsters to use. -------------------------------------------------------------------------------- 601f8f6d22 | kitchen-ace | 2019-10-08 20:52:30 +0800 Use felid blade hands tile with mons:natasha If the player has tile_player_tile = mons:natasha, show the felid version of blade hands. It's still not perfect (and doesn't match with many of the other felid tiles) but looks much better than the human blade hands tile. -------------------------------------------------------------------------------- e5367748bb | Aidan Holm | 2019-10-08 15:25:49 +0800 Fix grow oklob tile colour space reduction Unfortunately the previous iteration of the grow oklob ability tile had been saved with an unintentionally reduced colour set, due to the PNG being in indexed mode. -------------------------------------------------------------------------------- 92173c342a | Aidan Holm | 2019-10-08 15:24:53 +0800 Add tile for sprint monster spell -------------------------------------------------------------------------------- 048a31fd0b | John Stilley | 2019-10-07 18:15:48 -0700 Put an oklob in the tile for Fedhas's oklob ability (#1173) -------------------------------------------------------------------------------- 3fb7a4b9a4 | John Stilley | 2019-10-07 18:12:56 -0700 Improving redundant working on flight dangers (#1174) -------------------------------------------------------------------------------- 36f0aeb843 | theJollySin | 2019-10-07 16:23:12 +0800 Remove ill-fitting confusion text (1583) This visual doesn't work for monsters with 0 or 1 eyes [skip ci] -------------------------------------------------------------------------------- 74da537585 | S. Mark | 2019-10-06 17:51:03 -0400 Update mailmap. [skip ci] -------------------------------------------------------------------------------- 30414c0b45 | S. Mark | 2019-10-06 17:49:23 -0400 Fix typo. -------------------------------------------------------------------------------- 8ac54030cd | advil | 2019-10-06 17:37:31 -0400 Add an explicit bounds check to crawl_view_buffer () This is what was crashing in #1166 / mantis 12069, but because it was triggered by an invalid memory access, whether there was a crash was very system/build-specific. This makes a similar out of bounds error explicit in the future. -------------------------------------------------------------------------------- b0425b2895 | advil | 2019-10-06 17:37:31 -0400 Remove an ifdef related to seed selection This never really worked right anyways, and gave errors on CPO -------------------------------------------------------------------------------- f26d6114a7 | Aidan Holm | 2019-10-07 05:05:29 +0800 Fix dungeon feature quotes not visible (Vaamat, 12032) -------------------------------------------------------------------------------- 3be9bf80fb | Aidan Holm | 2019-10-07 03:52:55 +0800 Add keybind to clear player name (kitchen_ace, 12084) Using backspace to clear is not the best choice because a) it's kind of weird for backspace to delete everything, and b) difficult to determine when to delete everything and when to delete just one letter. -------------------------------------------------------------------------------- bb1ff42f1e | Aidan Holm | 2019-10-07 03:37:01 +0800 Fix invalid read causing map-view crash (jackofblades, 12069) -------------------------------------------------------------------------------- 643f6c6e1a | Aidan Holm | 2019-10-07 02:24:03 +0800 Fix main menus not handling app quit (Goratrix, 12080) -------------------------------------------------------------------------------- ad1f87bc89 | Aidan Holm | 2019-10-07 02:15:58 +0800 Fix empty high scores menu (Goratrix, 12080) The reported bug was caused by there being no focused UI widget, so the escape key was never handled. I really need to revisit that whole focus system... I also added in a placeholder text label for when there are no highscores, explicitly stating the fact. -------------------------------------------------------------------------------- 368c1644f8 | Umer Shaikh | 2019-10-03 15:47:11 -0400 Clean up a function Change the function is_habitable_feat to an equivalent formulation which is simpler and idiomatic. -------------------------------------------------------------------------------- dea222dd76 | Aidan Holm | 2019-10-04 00:31:51 +0800 Refactor and improve UI widget iterators This removes the honestly quite hacky container iterator implementation which deferred at runtime to a heap-allocated implementation class. Instead, each container type gets their own iterator. If you have a base class pointer and you want to iterate over it, the new foreach() helper function does that. It's a little ugly, but much better than before, especially since iterating over a derived type is the common case. -------------------------------------------------------------------------------- 98f196556d | Aidan Holm | 2019-10-03 22:45:37 +0800 Don't include debug drawing in release builds -------------------------------------------------------------------------------- fb0ce180c5 | Aidan Holm | 2019-10-03 19:53:41 +0800 Add widget margin debug drawing -------------------------------------------------------------------------------- 0be37ba3bd | Aidan Holm | 2019-10-03 19:53:25 +0800 Fix off-by-one error in mouse hover handling -------------------------------------------------------------------------------- f64bd74572 | Aidan Holm | 2019-10-03 19:29:35 +0800 Simplify code -------------------------------------------------------------------------------- f1eb651baa | Aidan Holm | 2019-10-03 19:26:33 +0800 Fix startup menu spacing issues This fixes a bug where there was no margin between the header text and the name entry row. This also replaces some conditional minimum heights with proper margins. -------------------------------------------------------------------------------- ca426f56c8 | gammafunk | 2019-10-02 15:27:12 -0500 Update descriptions for Fedhas (Snack ⑨) Update descriptions for the god and the general description of its powers, and update the descriptions for all ability to mention the affects of Invocations training. [skip ci] -------------------------------------------------------------------------------- f4813fd24d | gammafunk | 2019-10-02 14:56:40 -0500 Update the descriptions for Sif Muna (Goratrix) The god and god power descriptions were still based on the previous iteration of Sif. [skip ci] -------------------------------------------------------------------------------- 74cc3aede5 | Nikolai Lavsky | 2019-10-01 22:44:20 -0400 Fix display of detected gold on the minimap (11950) Currently, there are several Gold Sense-related bugs: * on webtiles, detected gold is not displayed on the minimap; * on local tiles, it disappears from the minimap after reloading the game and after reentering a floor; * on console, it's not possible to scroll the map in the X mode to see all detected piles of gold on a new level. This happens because now update_item_at() runs more than once for each pile of gold. Prior to 063869c, the gold detection code from files.cc:_count_gold(), which contains update_item_at(), run only once for each new level. After that commit and after 4488db6, the gold detection code, which is now in god-passive.cc:gozag_detect_level_gold(), runs twice when the player enters a new floor. First, it runs as a delayed action, then it runs for counting the generated gold (both calls come from files.cc:load_level()). When it's called the first time, gozag_detect_level_gold() sets the MAP_DETECTED_ITEM flag for each pile of gold, so they would appear on the minimap. When gozag_detect_level_gold() called after that, clear_item() removes this flag from the piles, and, since env.map_knowledge() already knows about those piles, gozag_detect_level_gold() won't set the flag again. The code path is god-passive.cc:gozag_detect_level_gold() -> show.cc:update_item_at() -> map-cell.h:set_item() -> map-cell.h:clear_item(). Unlike webtiles, local tiles update the minimap only after the first call, so detected gold appears on the minimap, but only until a current level is reloaded. This commit makes it safe to call gozag_detect_level_gold() multiple times: update_item_at() will be called only for undetected piles of gold. Also, force update of the minimap so piles of gold generated in new Abyss regions are displayed too. -------------------------------------------------------------------------------- bfa02ace7b | EC2 Default User | 2019-10-01 21:59:27 -0400 Fix wizdump loading when rotted or Gozag follower. Recognize "HP:" and "MP:" as mourge line starts. Recognize Gozag which doesn't have a piety meter, causing the God line to only have 8 fields. -------------------------------------------------------------------------------- bab67b8a05 | gammafunk | 2019-10-01 20:57:53 -0500 Remove an unused function for Dithmenos conducts Since Dith no longer cares about sources of fire, this function is unused. A similar function that tests for fiery monsters by monster class is still necessary for resistance checks. -------------------------------------------------------------------------------- a1bddc09a4 | gammafunk | 2019-10-01 20:57:53 -0500 Rework damage of ballistomycete spores Currently the spore damage is fixed at 3d15, which is pretty high when the 3* Grow Ballistomycete becomes available. This commit incorporates Invocations skill into the spore explosion damage and decreases the initial damage. The new explosion damage is 3d(5 + spore HD), with spore HD ranging from 1 at 0 Invocations to 28 at Invocations 27. Hence the max damage at 27 Invocations is 3d33, which is very similar to max spell-power Fireball. -------------------------------------------------------------------------------- 27a75b7c53 | gammafunk | 2019-10-01 20:57:53 -0500 Fedhas rework part 11: simplify conducts Fedhas used to care about corpse-violating spells or items, a minor conduct thematically connected to how piety was gained for this god. Now that Fedhas appreciates kills, this conduct doesn't make thematic sense. It was also too minor a conduct, so the two best options are removing it or expanding it to a more significant set of conducts thematically connected to the current god. One option is making Fedhas hate all of necromancy. This is similar to the removed no-fire-magic conduct for Dith, but it affects a much larger number of spells in a school that's one of the strongest. Unfortunately, the reasons for current Fedhas hating necromancy are a bit tough to justify. Something about necromancy disrupting the natural cycle of life and death in nature is a bit sketchy when so many other things could do this. Another option is to make Fedhas a good god, which introduces some gameplay changes as well as an even more pervasive set of conducts. Unfortunately, Fedhas is a god that's significantly stronger early on relative to how strong they are later in the game. Since being a good god would remove any wrath effects at all for most god swaps and even allow retaining piety for switches to the good gods that are stronger than Fedhas later on, this opens up a lot of no-brainer god switches. In the end, I wasn't satisfied with either option, so for now I'm simply removing Fedhas' conducts related to undead worhsipers and corpse violation without replacement. This means that ghouls, mummies, vampires and those unblessed with the mighty lich form can now worship Fedhas. I'm open to re-adding something like the no-necromancy/undead conduct or another interesting conduct if details can be properly hashed out. Fedhas also had a minor conduct related to letting a permanent ally die which I've also removed. Fedhas no longer makes permanent allies, so this conduct no longer makes sense. Fedhas still gives penance if you kill an actual plant or a summoned ally, of course. -------------------------------------------------------------------------------- dacd3b15af | gammafunk | 2019-10-01 20:57:44 -0500 Fedhas rework part 10: Grow Oklob ability A 5* ability to summon an oklob plant at a smite-targeted location within radius 2 for a cost of 6 piety. The HD of the oklob is increased by 1 for each level of Invocations skill, which increases its summon duration, its HP, the damage from its Spit Acid ability, as well as the frequency with which it uses Spit Acid. These aspects are all done in the same way as Fedhas' previous Evolution ability had Invocations influence oklobs. This is not an especially creative ability, but it's fun to play with strong stationary allies. At a cost of 6 piety, a player at 6* could make quite a few oklobs, so it's still possible to make a large group for a single fight on e.g. Zot:5. -------------------------------------------------------------------------------- 286ebac72d | gammafunk | 2019-10-01 20:47:15 -0500 Fedhas rework part 9: Overgrow ability A 4* ability that transforms any (non-permarock) walls, trees, doors, or diggable solid features in a 3x3 smite-targeted area into plant allies at a cost of 12 piety. The created monster is a summon, but the wall is permanently destroyed. This commit implements a targeter UI that only shows cells as affected if they contain a wall that's a valid target for Overgrow. To be affected, a wall must be in LOS and not blocked by a feature that blocks translocations (e.g. clear walls). Open doors won't be affect if they contain a monster, and if it turns out there was an invisible monster in the open door, the ability will fail but still use piety. Currently the set of possible plant allies is weighted towards oklob saplings, wandering mushrooms, and burning bushes, with lower chances for ballistomycetes and oklob plants. The plant HD is increased by 1 with each level of Invocations, which for oklob saplings, burning bushes, and oklob plants will give more damage per use of their abilities, and oklob plants will get an increase in their "spit" rate. All monsters will get increased HP and summon duration with Invocations. -------------------------------------------------------------------------------- 8f1ea3d74c | gammafunk | 2019-10-01 20:47:15 -0500 Fedhas rework part 8: remove Rain Part of what Rain does is allow creation of plants, but this is no longer relevant, since the other Fedhas ally creation abilities don't need plant intermediaries. The other prominent aspect of Rain is permanent creation of deep water, but this leads to a lot of luring. The new Wall of Briars ability provides some instantaneous limitation of monster movement, but in a way that doesn't make permanent terrain changes and hence less encourages luring. -------------------------------------------------------------------------------- 7ac76a7cd5 | gammafunk | 2019-10-01 20:47:15 -0500 Fedhas rework part 7: rework Reproduction This commit replaces Fedhas' Reproduction with Grow Ballistomycete, an ability that creates a summoned ballistomycete at any smite-targeted location within radius 2 at a cost of 5 piety. Ballistomycetes have been simplified in the previous commit and now use their Sporulate ability to create spores that try to reach their target in order to explode. The explosion radius has been reduced to 1, so this combined with more flexibility in positioning will make it easier for players to avoid the explosion. If explosion avoidance ends up still being too big an issue, we could have a Fedhas passively protect players from the explosion to some degree. Ballistomycetes get increased HD and duration with Invocations, gaining 1 HD per level of the skill. The only effect of this HD increase at present is more HP. We probably don't want to increase the usage rate of Sporulat like we do for Oklob Plant's spit acid, since rapidly creating too many spores will create...a lot of explosions. Fedhas wrath places spores around corpses using some of the same functions that were previously used for Reproduction. Hence these have been moved to god-wrath.cc. It would probably be best to simplify this wrath by creating durably summoned ballistomycetes instead, but I'm not doing that for now. -------------------------------------------------------------------------------- 7da3b9efa7 | gammafunk | 2019-10-01 20:47:15 -0500 Fedhas rework part 6: simplify ballistomycetes Ballistomycetes (ballistos) are complicated monsters that grow based on interactions with the spore monsters. Spores leave mold as they move, which can give rise to the production of new ballistos. This set of behaviors fell into the realm of "complexity for the sake of complexity". One had to wait a while for this "reproduction" to play out, only to get a few more ballisto spores. Now that we're putting stronger limits on ally usage through use of summons, it's a good time to simplify the way ballistos and their spores work. This commit removes the reproduction aspect of ballistos, removes mold itself, and simplifies ballistos down to one type of monster. Additionally, ballistos now have a Sporulate natural ability they occasionally use to create a single spore as a short-lived summon. The spore will seek after the ballisto's target and explode upon hit, still producing the damaging explosion that applies confusion to living targets. A subsequent commit will make a Fedhas active ability to let the player to create a ballisto summon, and this will replace Fedhas' Reproduction. -------------------------------------------------------------------------------- dd8df34df5 | gammafunk | 2019-10-01 20:47:15 -0500 Fedhas rework part 5: remove Evolution As per the Fungal Bloom and Growth ability removals, we don't use plants as intermediaries for creating allies. New abilities to create some of these monsters as summons directly will be added in future commits. -------------------------------------------------------------------------------- 6ba74d5838 | gammafunk | 2019-10-01 20:47:15 -0500 Fedhas rework part 4: remove Growth Fedhas will use summons to create all allies instead of creating permanent ones using actual plant monsters as intermediaries. Hence Growth, also referred to as using the descriptor `RING_OF_PLANTS` in the source, is no longer necessary. -------------------------------------------------------------------------------- 1d64b78cf4 | gammafunk | 2019-10-01 20:47:15 -0500 Fedhas rework part 3: remove Sunlight Sunlight is a pretty tedious to use ability that strongly overlaps with TSO. Removing shallow and deep water when flight is extensively available is also not especially interesting. This adds a minor version tag to handle save compatibility, since we're removing a member of the global env that maps sunlight-affected squares. -------------------------------------------------------------------------------- 9563602592 | gammafunk | 2019-10-01 20:47:14 -0500 Fedhas rework part 2: Wall of Briars ability A 2* ability that encircles the player with summoned briar patches. The player can fire through these plants, and the briars damage monsters that attack them. Monster AI is changed so that hostile monsters always try to attack briars that are friendly to the player. Only floor or shallow water tiles that have no monsters are viable summon locations. The briar patches' HP scale with Invocations by adding 1 HD with each level of this skill. -------------------------------------------------------------------------------- 0b10f196a5 | gammafunk | 2019-10-01 20:47:14 -0500 Fedhas rework part 1: piety gain Fedhas is a plant-themed god originally intended to support range combat. The god gives you plant allies that you can move and fire through allows you to create water to impede monster movement. Unfortunately the current design gives access to too many allies that are strong enough to carry the player through much of the game. These are either permanent or long-lived yet are stationary or have movement limitations, things that together encourage the player to lure monsters to specific locations. As a result, Fedhas has a tedious play-style, and this is reflected in the god's usage rate among players. This commit is the first in a set that rework the god but in a way that retains some of idea of supporting ranged combat. New Fedhas will use only summoned allies and will allow less unfettered use of allies in general. A github wiki page describing remaining and potential issues with the rework is available here: https://github.com/crawl/crawl/wiki/Fedhas-Rework Part 1 removes Fedhas' appreciation of corpse decay as well as the Fungal Bloom ability. I haven't touched the corpse violation, necromancy conducts, and species restrictions for now, although those all need addressing. -------------------------------------------------------------------------------- 3348362083 | Richard Wardin | 2019-10-01 21:41:39 -0400 Fix being able to pick out barbs while incapacitated (12065) Carefully pulling out barbs now requires that you can move (not paralyzed or petrified), aren't confused, and aren't asleep. [Committer's note: Closes #1162. Tweaked berserk message.] -------------------------------------------------------------------------------- 42da65fd27 | Edgar A. Bering IV | 2019-10-01 21:20:38 -0400 De-randomize Golden Eye confusion spellpower This random power is a legacy dating back to their creation. The commit log doesn't describe why Confusion Gaze should work this way instead of with a normal confuse spellpower and a normal MR check. Now that monster spell success chance is displayed, this randomization had the side effect of making the success chance display wrong. Confusion Gaze was the last monster spell with monster spellpower randomization; this commit cleans up some of the code, but there is a larger refactor possible that is left undone. Closes #1160 -------------------------------------------------------------------------------- f6d4cf8133 | NormalPerson7 | 2019-10-01 20:48:38 -0400 Remove troves asking for scrolls of identify Beyond the early game, once almost all the potions and scrolls in the game are identified, scrolls of identify become a convenience tool more than anything else; it is simply easier and faster for the player to identify this unknown ring on the floor using a scroll than to find something to drop, pick the ring up, put it on, decide it's useless, drop it, and pick up the other thing. This especially applies when the player has 5+ spare identify scrolls in their inventory, which is fairly common around the time of Vaults and Depths. Troves asking for identify scrolls encourages players to employ the tedious second behaviour, and to some extent take risks with wear-identifying artefacts, in order to horde the scrolls and eventually enter the trove. Additionally, being reduced to 0 identify scrolls by a trove hardly makes a significant difference to the strength of a character - rather it simply means once again that the tedious wear-identification process is required. Note that the wear-identification of artefacts that is encouraged by this isn't particularly dangerous beyond the early game anyway. The only bad effects are *Drain and *Contam, where *Drain is unlikely to have a significant impact, and *Contam may cause 1 malmutate before wearing off that the player can probably eliminate by using a mutation potion. Hence, remove troves asking for scrolls of identify, because they encouraged tedious behaviour instead of meaningful decision making. -------------------------------------------------------------------------------- 8abc067276 | theJollySin | 2019-10-01 20:36:48 -0400 Add more flavour to the Halloween welcome spam -------------------------------------------------------------------------------- 7e681d2d23 | theJollySin | 2019-10-01 20:36:48 -0400 Vary orb descriptors in the welcome text -------------------------------------------------------------------------------- ebba34edf6 | theJollySin | 2019-10-01 20:36:48 -0400 Add more random uselessness messages [Committer's note: Closes #1161. Removed messages that suggested some in-game happening or portal vault. Random uselessness is for flavor, we don't want it to intentionally confuse. Squashed and re-organized the PR into this and the next two commits.] -------------------------------------------------------------------------------- 463e120319 | theJollySin | 2019-10-01 20:36:48 -0400 Clean up Paradise Lost quote citations -------------------------------------------------------------------------------- 26e8666362 | theJollySin | 2019-10-01 20:36:48 -0400 An assortment of item and location quotations [Committer's note: Closes #1153. Squashed and revised the PR.] -------------------------------------------------------------------------------- 6aba9404ae | srvanmeter87 | 2019-10-01 19:43:01 -0400 Rephrase MP-powered wands player alert (#984) [Committer's note: Closes #984, #1133, #1143] -------------------------------------------------------------------------------- 4e6fe308c7 | Aidan Holm | 2019-10-02 04:13:04 +0800 Fix sealed-off sensed monsters stopping travel (gammafunk) Sensed monsters were handled with a separate check that did not take into account whether they were reachable. The new way uses the list of monsters returned by get_nearby_monsters, which does test reachability. -------------------------------------------------------------------------------- 323ad4e9fb | Aidan Holm | 2019-10-02 03:02:37 +0800 Fix clinging monsters breaking autoexplore (shalmezad, 11924) Clinging monsters in vaults could pathfind their way through the runed door, and were therefore marked as not safe, preventing autoexplore. This was caused by mons_traversable() sidestepping checks for runed cells and uninhabitable cells in mons_can_traverse() if the monster can cling. I've just hoisted them out here. In addition, cell_can_cling_to() only checks physical location, and so couldn't check whether a feature is passable by a given monster. Last but not least, the call to cell_is_clingable() previously passed the wrong parameter. -------------------------------------------------------------------------------- ca5e8cfc3f | Aidan Holm | 2019-10-01 16:41:10 +0800 Use quads for line drawing (advil) Line drawing with GL_LINES seems to be subject to a number of rendering bugs and limitations that vary by OS and driver. This commit renders all lines with a single quad. This removes support for arbitrary lines that are not horizontal or vertical, but we don't currently draw any such lines. -------------------------------------------------------------------------------- 940da44966 | Aidan Holm | 2019-10-01 16:34:05 +0800 Tidy up some duplication and incorrect naming -------------------------------------------------------------------------------- 6844edd79d | Aidan Holm | 2019-10-01 16:34:05 +0800 Fix difficult-to-read main menu labels on console (advil) Menu labels previously relied on libunix.cc's adjustment of identical foreground and background colours, which didn't work properly with allow_extended_colours = true, since white and lightgrey are not identical. This commit manually adjusts all button label colours on focus change, both foreground and background. This fixes a bug on the weapon selection menu on console where the background did not extend under the listed aptitudes, due to them being in a separate text widget. It also cleans up the hacky code that was previously used to recolour the buttons. You can specify the foreground colour to use when focused; the default is black. This code assumes that all text widgets have a single colour, and will not correctly restore multi-coloured text on unfocus. -------------------------------------------------------------------------------- 3ed16d2262 | Aidan Holm | 2019-10-01 16:34:05 +0800 Refactor curses colour and attr munging -------------------------------------------------------------------------------- 011b83adde | NormalPerson7 | 2019-10-01 00:59:26 -0400 Let Trog and Okawaru gift regular boomerangs and javelins Previously, when tomahawks and javelins had no innate special properties and each had about 5 different brands, it made sense that Trog and Okawaru should always gift branded tomahawks and javelins. However, there are now only two different types of javelin: plain and silver; and three different types of boomerang: plain, silver and dispersal. This behaviour led to all such ammo gifts being silver javelins, or silver or dispersal boomerangs, which seems a little unbalanced. Additionally, new javelins are equivalent to branded penetration javelins previously, and likewise with boomerangs and tomahawks of returning, so this behaviour no longer makes sense. As such, Trog and Okawaru now gift regular boomerangs and javelins, with these having weight 120. This means the chance of a javelin gift giving silver javelins is reduced from 100% to 43%, and the chance of a boomerang gift being branded is reduced from 100% to 33%. This commit preserves Trog and Okawaru only gifting curare/datura/atropa-tipped darts and not poisoned darts, and also preserves the behaviour of ISPEC_GOOD_ITEM always producing branded missiles, so as to not affect dungeon generation in any way. [Closes #1131] -------------------------------------------------------------------------------- ac2e79e1c7 | Nikolai Lavsky | 2019-10-01 00:44:13 -0400 Add descriptions for awoken autumnal and dead trees Use the same description as for regular awoken trees. -------------------------------------------------------------------------------- f61156fd2a | Nikolai Lavsky | 2019-10-01 00:44:13 -0400 Distinguish flammable and non-flammable trees Even though Summon Forest's trees cannot be burned since 0a4d0e94, their description still mentioned that mechanic. Fix this and add a way to distinguish summoned trees from regular ones in the x-mode. Also, update a comment: trees cannot be disintegrated since 85f13f00. -------------------------------------------------------------------------------- 0e0b6798f1 | Edgar A. Bering IV | 2019-10-01 00:35:02 -0400 Tiles for the staff of Battle (CanOfWorms) -------------------------------------------------------------------------------- 2f2aade273 | olowin | 2019-10-01 00:35:02 -0400 The unrand staff of Battle A staff of conjuration with. It will automatically spawn a battlesphere when monsters are in sight and automatically dismisses the battlesphere on unwield. Trog hates it; using it to spawn a battlesphere is as bad as casting a spell in Trog's eyes. Unlike an evokable this is real magic. [Committer's note: Squashed and rebased; made the staff battlesphere have the same spellpower as the player's (to avoid weird re-casting incentives); removed +4 SH, it is one-handed on normal species. Closes #1040] -------------------------------------------------------------------------------- f1a930fc54 | advil | 2019-09-30 15:38:58 -0400 Don't pull abyss terrain from the vestibule The issue is that if the player hasn't visited the vestibule, a level excursion there will trigger asserts regarding the up stairs, which haven't been set up yet. This could be made conditional on having visited the vestibule, but even for the abyss I'd rather avoid dependencies on level traversal order. -------------------------------------------------------------------------------- be6272a890 | gammafunk | 2019-09-30 14:26:34 -0500 Use no_tele_into in a Bazaar map (wizard44) The water (or lava) areas outside of the central area with shops needs `no_tele_into` in order to prevent teleports from stranding players who are amphibious or flying. -------------------------------------------------------------------------------- 3c9d5f24f3 | advil | 2019-09-30 12:59:04 -0400 Remove full_name logic from main menu These features were supposed to make typing the player name easier, but they're very hard to predict from standard text box behavior, and also buggy with names that are a partial match to another name. In addition, the behavior pre-0.24 that this logic is based on seems to have been fairly broken; at least I can't figure out the pattern from the UI in older versions for when `full_name` is set to true. Should replace this with some more of the standard text editing shortcuts, e.g. ctrl-u. -------------------------------------------------------------------------------- 261a0b2417 | advil | 2019-09-30 12:32:32 -0400 Main menu improvements and streamlining * move info about rc file off main screen -- without linewrapping this doesn't work well on either console or tiles. * don't explain arrow keys and enter * use some of the reclaimed space to improve description of [tab], add description of [ctrl-p]. This latter is mainly just so players know where to find the rc file info. Eventually the canonical place to find the rc file should be an about screen, not the startup log. -------------------------------------------------------------------------------- 5fed5919c2 | Aidan Holm | 2019-09-30 21:49:45 +0800 Reduce popup padding on small screens (alexjurkiewicz) -------------------------------------------------------------------------------- bbc45b03fd | Aidan Holm | 2019-09-30 14:23:31 +0800 Fix newgame menu highlight width on remote console On TILEWEB=y console games, the text widget was not expanding to take the full width of the box it was contained in. When its background colour was changed, only the section of the menu button with letters changed colour. This isn't a problem in pure console builds because in that case the text widget is the direct child of the MenuButton widget and so takes its full size. -------------------------------------------------------------------------------- 2d00395b2e | Aidan Holm | 2019-09-30 14:23:31 +0800 Fix memorise menu entry letter colour Previously, the entry letter was always lightgrey; now it is darkgrey if the spell is not castable, etc. -------------------------------------------------------------------------------- 828224901c | Aidan Holm | 2019-09-30 14:23:30 +0800 Refactor memorise menu entry colour code -------------------------------------------------------------------------------- 5a4ac4e04d | Aidan Holm | 2019-09-30 13:10:21 +0800 Remove debug logging -------------------------------------------------------------------------------- 2d0fce64a1 | advil | 2019-09-29 19:48:04 -0400 Don't generate unknown weapons for weapon selection I'm not sure if this is causing the windows crash (which is happening somewhere in give_items_skills), but it is definitely an odd thing that this code is doing when used before weapon selection. -------------------------------------------------------------------------------- 0b739ee41d | advil | 2019-09-29 17:47:54 -0400 One more batch of debug code see 40886de7c. -------------------------------------------------------------------------------- 40886de7c5 | advil | 2019-09-29 17:09:38 -0400 More public bisection (The reason that I'm doing this bisection in trunk like this is that we are chasing a crash that only replicates on the windows tile builds done by CDO.) -------------------------------------------------------------------------------- bfea814871 | advil | 2019-09-29 16:46:00 -0400 Apply some brute-force output debugging to the problem -------------------------------------------------------------------------------- f68d918292 | advil | 2019-09-29 15:36:51 -0400 checkwhite [skip ci] -------------------------------------------------------------------------------- 964def8651 | advil | 2019-09-29 15:36:00 -0400 Fix a compiler warning (shadowed variable) -------------------------------------------------------------------------------- 5bd470a277 | advil | 2019-09-29 14:21:12 -0400 Don't clear player name when selecting arena (12075) I agree that this behavior is unintuitive given the menu structure (especially when navigating with keyboard), even though arena doesn't use player name. -------------------------------------------------------------------------------- 2bac2fb150 | advil | 2019-09-29 14:21:12 -0400 Restore centering for the progress popup in console -------------------------------------------------------------------------------- aa951a354a | Aidan Holm | 2019-09-30 01:34:06 +0800 Fix hiscores not showing in webtiles (12077, Ge0ff) Console viewers will still get a view that adjusts to their screen size; webtiles viewers get a hardcoded size of eleven lines, which IIRC was the typical size before. -------------------------------------------------------------------------------- b6411803c1 | advil | 2019-09-29 10:41:47 -0400 Fix a crash with full pregen This was introduced in 80d7c3d5c -------------------------------------------------------------------------------- cb3158e78b | Kyle Rawlins | 2019-09-29 10:08:39 -0400 just one more windows install instructions tweak This incorporates both solutions from #1134. Thanks to amcmullan and Goratrix for figuring this out; as of Feb or so, msys2 makes python 3 the default python version for everything. Resolves #1134 [skip ci] -------------------------------------------------------------------------------- 0f4390f660 | advil | 2019-09-29 09:53:45 -0400 Replace some symbolic links with copies In order to fix windows builds. -------------------------------------------------------------------------------- 6ba659e1ad | Kyle Rawlins | 2019-09-29 09:36:27 -0400 Tweak windows install instructions again [skip ci] -------------------------------------------------------------------------------- d2de06d31d | Kyle Rawlins | 2019-09-29 09:20:59 -0400 tweak windows install instructions -------------------------------------------------------------------------------- aeb99fb3f2 | advil | 2019-09-28 18:41:54 -0400 Fix another webtiles console menu glitch These values were being interpreted as characters when rendering console, and are apparently unused for webtiles browser. So, just set them to 0. -------------------------------------------------------------------------------- 6234c29d7a | advil | 2019-09-28 18:27:05 -0400 Address an uninitialized variable This *might* be the windows crash, not sure. In any case, tileidx_t is uint64_t and so needs to be initialized to something. -------------------------------------------------------------------------------- 7b85b32444 | advil | 2019-09-28 18:07:42 -0400 Slightly improve console MenuButton highlighting code This now handles another bug by generalizing slightly from 5a66b1aa3b36: the weapon selection menu wasn't highlighting correctly in local console because those buttons on console consist of a bin with two Texts. The new version finds the first Text child (if any) and does the highlighting on it, and because of this also does away with the #ifdefs. -------------------------------------------------------------------------------- 5a66b1aa3b | advil | 2019-09-28 17:09:28 -0400 Fix(ish) for menu highlighting issues in webtiles console The problem was that webtiles console, because it can be showing complex menu items via a browser client, has a different menu structure than regular console, so the assumption that it contained a single Text child was incorrect. This fairly hacky solution also tries setting the background color of any label in position 1 in case the button is a container. There should probably be something more general here, perhaps highlighting every Text contained in the button widget (Which would get both of the currently-used cases as special cases), but I'll leave that for aidanh. -------------------------------------------------------------------------------- 60d090ba07 | advil | 2019-09-28 13:10:22 -0400 Fix a shadowed variable warning in webtiles -------------------------------------------------------------------------------- 8e49684493 | advil | 2019-09-28 12:13:11 -0400 Use MenuButton highlight color in local console This does not fix 12076; I think the dynamic_cast is not working at all for webtiles console. -------------------------------------------------------------------------------- d18775d16a | Aidan Holm | 2019-09-28 14:05:05 +0800 Reduce webtiles newgame menu height (12074, kitchen_ace) This attempts to fit the entire menu in without needing to scroll; it only takes effect on windows less than 780px high though. -------------------------------------------------------------------------------- 53c33f0441 | Aidan Holm | 2019-09-28 14:04:42 +0800 Fix webtiles newgame menu background colour -------------------------------------------------------------------------------- bbc8897137 | Aidan Holm | 2019-09-28 03:16:22 +0800 More dead code removal -------------------------------------------------------------------------------- 39a19ac0f1 | Aidan Holm | 2019-09-27 23:33:44 +0800 Remove unused smart cursor interface This also fixes a bug on win32 console where the mouse cursor was visible on the main menu. -------------------------------------------------------------------------------- 40b4c61300 | Aidan Holm | 2019-09-27 23:33:44 +0800 Add rudimentary win32 console colour adjustment libunix.cc will adjust the foreground colour when both foreground and background are indistinguishable. This commit ports a much-reduced version of that functionality to win32 console, primarily so that the main menu will be readable. -------------------------------------------------------------------------------- db4295c90e | Aidan Holm | 2019-09-27 23:33:44 +0800 Fix broken win32 console text colouring API Crawl code assumes that the terminal text and background colours can be updated independently; the win32 console backend, however, was setting the background colour from the high bits of the provided text colour. This resulted in a textcolour() call followed by a textbackground() call to function normally, but the reverse would not. -------------------------------------------------------------------------------- 17bb1006d4 | Aidan Holm | 2019-09-27 23:33:44 +0800 Refactor identical colourpair remapping code -------------------------------------------------------------------------------- 1fcc531f06 | Aidan Holm | 2019-09-27 23:33:44 +0800 Refactor MenuFreeform methods with find_if() -------------------------------------------------------------------------------- 3e190a46ec | Aidan Holm | 2019-09-27 23:33:44 +0800 Remove unused menu code -------------------------------------------------------------------------------- cd35390ea8 | Aidan Holm | 2019-09-27 23:33:44 +0800 Improve end-game hiscore list appearance -------------------------------------------------------------------------------- bb89a6cd1e | Aidan Holm | 2019-09-27 23:33:44 +0800 Improve newgame name choice prompt -------------------------------------------------------------------------------- 5dd181b815 | Aidan Holm | 2019-09-27 23:33:44 +0800 Add alignment options to Switcher widget -------------------------------------------------------------------------------- 6919a330b2 | Aidan Holm | 2019-09-27 23:33:44 +0800 Add enable_shared_from_this to Widget -------------------------------------------------------------------------------- ba565db48d | Aidan Holm | 2019-09-27 23:33:44 +0800 Fix Switcher widget handling mouse events incorrectly -------------------------------------------------------------------------------- 94b374d741 | Aidan Holm | 2019-09-27 23:33:44 +0800 Add tile to game-over screen -------------------------------------------------------------------------------- a0fde063d1 | Aidan Holm | 2019-09-27 23:33:44 +0800 Add pgup/pgdn/home/end support to OuterMenu -------------------------------------------------------------------------------- 41769e37c5 | Aidan Holm | 2019-09-27 23:33:44 +0800 Add HTML newgame menus, more tiles -------------------------------------------------------------------------------- bbc46fc816 | Aidan Holm | 2019-09-27 23:33:44 +0800 Make send_doll() public -------------------------------------------------------------------------------- e13cadf35d | Aidan Holm | 2019-09-27 23:33:44 +0800 Add operator[] accessor for container widgets -------------------------------------------------------------------------------- 77bbe519b1 | Aidan Holm | 2019-09-27 23:33:44 +0800 Respect popup child widget's preferred size -------------------------------------------------------------------------------- 94e85a77e3 | Aidan Holm | 2019-09-27 23:33:44 +0800 Add species attributes to starting weapon menu (VeryAngryFelid) -------------------------------------------------------------------------------- efe2a7dc0d | Aidan Holm | 2019-09-27 21:07:02 +0800 Let Box widgets stretch children on main axis -------------------------------------------------------------------------------- 23a3942107 | Aidan Holm | 2019-09-27 21:07:02 +0800 Add species/job tiles (CanOfWorms) -------------------------------------------------------------------------------- b661a63e8a | Aidan Holm | 2019-09-27 21:07:02 +0800 Convert newgame menus to new UI framework -------------------------------------------------------------------------------- 9f778ef799 | Aidan Holm | 2019-09-27 21:07:02 +0800 Fix ui::Image widget using uninitialized data -------------------------------------------------------------------------------- ded90f589a | Aidan Holm | 2019-09-27 21:07:01 +0800 Convert hiscores menu to new UI framework -------------------------------------------------------------------------------- 20abbd21e0 | Aidan Holm | 2019-09-27 21:07:01 +0800 convert hints menu to new UI framework -------------------------------------------------------------------------------- 3169f2527e | Aidan Holm | 2019-09-27 21:07:01 +0800 Convert startup menu to new UI framework -------------------------------------------------------------------------------- 87535eea1a | Aidan Holm | 2019-09-27 21:07:01 +0800 Add species/background newgame doll generator This adds a helper function to generate dolls for character combos. This is done in a rather ugly fashion by (partially) generating the new game character. A small segment of the character setup code in _setup_generic() that's relevant to initial equipment is duplicated, with some minor changes; this code modifies the global `you` variable, and fill_doll_equipment() is then called to generate the doll corresponding to the character in `you`. Regarding the modified character generation code, everything after give_items_skills() is removed, since that's what determines a player's starting equipment, and thus the doll appearance. An exception is the item colour randomization. Separately, _unfocus_stats() was not included, since I'm reasonably sure that this has no effect on initial item generation, and I didn't want to make it non-static. -------------------------------------------------------------------------------- 1274d92874 | Aidan Holm | 2019-09-27 21:07:01 +0800 Add PlayerDoll widget -------------------------------------------------------------------------------- 99709490d1 | Aidan Holm | 2019-09-27 21:07:01 +0800 Add descriptions to outer menu buttons -------------------------------------------------------------------------------- 7134dd49da | Aidan Holm | 2019-09-27 21:07:01 +0800 Add OuterMenu, MenuButton widgets -------------------------------------------------------------------------------- 72f1adce67 | Aidan Holm | 2019-09-27 21:07:01 +0800 Add debug drawing -------------------------------------------------------------------------------- f253313b81 | Aidan Holm | 2019-09-27 21:07:01 +0800 Add per-layer focus -------------------------------------------------------------------------------- b86fa12273 | Aidan Holm | 2019-09-27 21:07:01 +0800 Add add_event_filter() -------------------------------------------------------------------------------- 0428708d7b | Aidan Holm | 2019-09-27 21:07:01 +0800 Add UI widget input focus -------------------------------------------------------------------------------- 50bd2e0d7e | Aidan Holm | 2019-09-27 21:07:01 +0800 Add text widget background colour (console-only) -------------------------------------------------------------------------------- 4d30056526 | Aidan Holm | 2019-09-27 21:07:01 +0800 Remove black background from high scores tile This tile is still in need of work; apart from anything else, it fills its entire 32x32 region, which makes it visually inconsistent with the other main menu entry tiles. -------------------------------------------------------------------------------- 01783e0825 | Aidan Holm | 2019-09-27 21:07:01 +0800 Add UIGrid stretch_h, stretch_v -------------------------------------------------------------------------------- 2a432842a1 | Aidan Holm | 2019-09-27 21:07:01 +0800 Fix invalid read during program shutdown Invalid memory accesses were caused by the Slot destructor freeing slots, which freed shared_ptrs, which caused remove_by_target() to access handlers, which was already partially destroyed. -------------------------------------------------------------------------------- 406b842e22 | Aidan Holm | 2019-09-27 21:06:55 +0800 Add ui_render() -------------------------------------------------------------------------------- ff19f33cdb | Alex Jurkiewicz | 2019-09-27 15:36:43 +0800 Mark trove portals as single-use Fixes #1126. -------------------------------------------------------------------------------- 80d7c3d5c1 | advil | 2019-09-26 18:27:52 -0400 Fix ungenerated branches in wizmode + pregen (12071) These were falling through the cracks of _branch_pregenerates, but not generating as part of the generation order. This commit just moves you directly to them without any pregeneration (which needless to say will break the seed, but if you're doing this you probably don't care). -------------------------------------------------------------------------------- 3936067ed8 | kitchen-ace | 2019-09-26 00:14:35 -0700 A meagre spelling correction for AUS english (#1157) -------------------------------------------------------------------------------- 46ecf6da75 | Aidan Holm | 2019-09-26 01:40:04 +0800 Remove unused function chop_tagged_string() -------------------------------------------------------------------------------- 4b16227417 | Aidan Holm | 2019-09-26 01:40:02 +0800 More refactoring of formatted_string code -------------------------------------------------------------------------------- d158fba778 | Aidan Holm | 2019-09-25 23:57:46 +0800 Fix some compile warnings (geekosaur) Returning std::move() here is fine because the parameter is an rvalue reference, so RVO is not relevant, and a move() call is required to prevent a copy. -------------------------------------------------------------------------------- 0b1efcbfd7 | Aidan Holm | 2019-09-25 23:52:45 +0800 Revert "Fix some compile warnings (geekosaur)" This reverts commit 0e779d289c517aeb1bab0ed4e172b85274d776cf. -------------------------------------------------------------------------------- eb4d282544 | Aidan Holm | 2019-09-25 23:49:37 +0800 Reduce unnecessary text widget allocations -------------------------------------------------------------------------------- 6ad10583fd | Aidan Holm | 2019-09-25 23:49:37 +0800 Remove some formatted_string functions Spell range strings don't use colour codes any more. As for explore discoveries, it's simpler to parse the tagged string and then use the dedicated width() method. -------------------------------------------------------------------------------- 0627d6e13b | Aidan Holm | 2019-09-25 23:49:37 +0800 Remove unused and rename used fs_op members -------------------------------------------------------------------------------- 0e779d289c | Aidan Holm | 2019-09-25 23:43:23 +0800 Fix some compile warnings (geekosaur) Returning std::move() here is fine because the parameter is an rvalue reference, so RVO is not relevant, and a move() call is required to prevent a copy. -------------------------------------------------------------------------------- 049a78546b | Aidan Holm | 2019-09-25 14:23:27 +0800 Simplify macro_buf_add_with_keymap We only ever add a single key at a time to the macro buffer; better to enforce that. This also asserts in remap_key() that the macro buffer is empty before remapping a key; this must be the case because ui::pump_events() first tries to get a key from the macro buf, and only remaps a new key if there is no macro key available. -------------------------------------------------------------------------------- 678ee33c32 | Aidan Holm | 2019-09-25 14:23:27 +0800 Refactor _getch_mul() -> _getch_single() While you could theoretically have multiple keys returned from _getch_mul, in practice I never managed to make it happen, and it's preferable for the code paths through the macro system to be as simple as possible. -------------------------------------------------------------------------------- 5a8975c3e2 | Aidan Holm | 2019-09-25 14:23:27 +0800 Simplify macro code This makes the difference between getchm and getch_with_command_macros slightly clearer. -------------------------------------------------------------------------------- 3ea5ddb52c | Aidan Holm | 2019-09-25 14:23:27 +0800 Remove support for multi-key macro binds Apparently it was previously possible, for some definitions of the word 'possible', to have multi-key macro binds; e.g. 'ab' -> foo. I couldn't actually get any of these to trigger, however, even when using xdotool to quickly deliver keypress events. This commit simplifies the complicated macro expansion code that resulted. Saved macros that have multi-key binds are silently truncated to the first character. This commit also slightly refactors filtering of empty macros. -------------------------------------------------------------------------------- e7cd8ce796 | Nikolai Lavsky | 2019-09-23 11:37:32 +0800 Fix a crash when cloning an almost dead monster (geekosaur) A copy created via rakshasa's Phantom Mirror has only 35% of the target's hp and max hp. If the original monster is almost dead (1-2 HP), its copy will have 0 hp, which crashes the game. Fix this by giving cloned monsters at least 1 hp. Also, it allows rakshasas to clone lurking horrors, who always spawn with only 1 hp. -------------------------------------------------------------------------------- b70a11d811 | Aidan Holm | 2019-09-20 22:30:25 +0800 Fix monster list position when re-running arena The call to expand_mlist() assumes that the monster list has its initial position and size; this is not the case if you run arena mode more than once without quitting the game in between. After this fix, the UI is still broken if you run arena then a regular game. I tried using an unwind_var, but that caused crashes, and a better fix is in the works anyway (using the widget toolkit). -------------------------------------------------------------------------------- cb9520c128 | Aidan Holm | 2019-09-20 22:30:24 +0800 Remove cprintf calls that do nothing -------------------------------------------------------------------------------- 7c97eb6acf | Aidan Holm | 2019-09-20 22:30:24 +0800 Remove explicit cursor positioning -------------------------------------------------------------------------------- 79b4920dd9 | Aidan Holm | 2019-09-20 22:30:24 +0800 Remove support for yesno outside the messge window -------------------------------------------------------------------------------- 2190daeb1e | Aidan Holm | 2019-09-20 22:30:24 +0800 Remove unused player name error messages -------------------------------------------------------------------------------- 0d320154d2 | Aidan Holm | 2019-09-20 22:30:24 +0800 Remove useless textcolour calls -------------------------------------------------------------------------------- c6fd4e6165 | Alex Jurkiewicz | 2019-09-20 20:44:35 +0800 Default show_more to false in debug builds Debug builds unsurprisingly spew large numbers of messages, so repeatedly showing a more prompt is very inconvenient. -------------------------------------------------------------------------------- 5ea6cb6c5a | Nikolai Lavsky | 2019-09-20 20:30:27 +0800 Fix HP of summons created via the Phantom Mirror spell Because of an incorrect formula added in a559921a, Mara and rakshasa clones had 200% hp of their original instead of 50%. Regular monsters copied via `cast_phantom_mirror()` had 286% hp and max hp instead of 35%. -------------------------------------------------------------------------------- 346d576932 | advil | 2019-09-19 20:06:03 -0400 Fix some issues with singing sword revealed in arena (p0a) The `get_tension` check is not well-defined without a player, and also isn't used for monster attackers. Also, the singing sword was shouting at the player's location, not the attacker (which caused another crash in arena). -------------------------------------------------------------------------------- 0d56a851f4 | Aidan Holm | 2019-09-19 01:51:59 +0800 Don't prewrap level builder logs Pre-wrapping to a given screen-width should be avoided in general because the screen can be resized. In addition, the GOTO_CRT region size is not a well-defined concept on local tiles. -------------------------------------------------------------------------------- 290c21e5aa | Aidan Holm | 2019-09-19 01:51:59 +0800 Replace line_reader use with cancellable_get_line -------------------------------------------------------------------------------- 5f7070a834 | Aidan Holm | 2019-09-19 01:51:59 +0800 Add per-text-widget fonts -------------------------------------------------------------------------------- f0453101f8 | Aidan Holm | 2019-09-19 01:51:59 +0800 Remove probably-no-longer-needed kludge The handle_terminal_resize() call in startup.cc (added in e03bc23d4eded) seems to no longer be required, since the code to determine the HUD size based on species (added in the same commit) is no longer present, and thus the HUD should not need to be resized any more. This permits some minor simplification of handle_terminal_resize(). -------------------------------------------------------------------------------- d29bdeb3b0 | Aidan Holm | 2019-09-19 01:51:59 +0800 Fix layout error for empty ellipsizable text widget m_wrapped_lines being empty caused the size request calculation to yield a natural size (0 lines) smaller than the minimum size (1 line), causing assertion failures. -------------------------------------------------------------------------------- 3da5d4e088 | Aidan Holm | 2019-09-19 01:51:59 +0800 Allow querying current scissor without UI layout Widgets may query the current scissor region to reduce render calls, e.g. by not rendering children or other elements that are not visible. During a regular layout and render cycle, the UI framework pushes a scissor region of the entire screen, so this works fine. When doing ad-hoc rendering (while we transition to full use of the UI framework), this is not the case, which caused crashes. -------------------------------------------------------------------------------- e6ffb7a55f | Aidan Holm | 2019-09-19 01:51:59 +0800 Fix menu items being unnecessarily ellipsized The menu already ellipsizes menu items as needed based on screen size. -------------------------------------------------------------------------------- 3dea98854c | Aidan Holm | 2019-09-19 01:51:59 +0800 Fix tooltips freezing local tiles window The previous implementation added a tooltip timer before blocking for the next SDL event, and removed it before returning. If resize or move events were received, however, the function would return early, and the timer would never be removed and would instead timeout periodically. Subsequent move events would add additional timers, leading to a flood of timeouts clogging up the event loop. This new implementation only ever adds a timer when the mouse is moved, and timers only fire once. remove_timer() is also changed to take an int& for convenience. -------------------------------------------------------------------------------- 94eeae6f7e | Aidan Holm | 2019-09-19 01:51:59 +0800 Add remaining tilesdl font getters -------------------------------------------------------------------------------- f19a5e4d30 | Aidan Holm | 2019-09-19 01:51:59 +0800 Tidy up tilesdl font members -------------------------------------------------------------------------------- 15dcb325b9 | Aidan Holm | 2019-09-18 21:25:34 +0800 Fix UI cutoffs not being cleared properly (vt, 12061) UI cutoffs prevent any any UI layers with index <= the cutoff index from being displayed. If there's no cutoff, the cutoff index should be -1; the old value of 0 was causing the lowest UI layer to not be unhidden. -------------------------------------------------------------------------------- b7544fd237 | Nikolai Lavsky | 2019-09-16 00:54:56 -0500 Upgrade Wyrmbane's tile according to its enchantment As a followup to 1cd5daa3, this commit adds code to upgrade Wyrmbane's tile as the lance grows more powerful. -------------------------------------------------------------------------------- e4662a2d14 | theJollySin | 2019-09-14 21:14:06 +0800 #1125 spellbooks are no longer 'r'ead -------------------------------------------------------------------------------- 92e081b058 | Umer Shaikh | 2019-09-14 21:12:59 +0800 Change gauntlet teleportation message (bugfix) On entering the gauntlet the current message misleadingly suggests no one can teleport, but the restriction is on the player only. -------------------------------------------------------------------------------- e2a249a6fd | advil | 2019-09-12 22:25:45 -0400 Remove throttling notification It's crashing for ., not sure why. Remove for now. -------------------------------------------------------------------------------- 751f86b5a9 | Aidan Holm | 2019-09-13 01:40:25 +0800 Fix webtiles rendering using outdated map_knowledge (Artagas, 12064) -------------------------------------------------------------------------------- eaf2f25370 | advil | 2019-09-11 20:06:02 -0400 Limit repeats via 0 somewhat for online play This implements two changes for DGAMELAUNCH builds: * it disallows using CMD_REST at all with 0. (If someone comes up with an actual use-case for this I can reconsider.) * After 100 repeats, it throttles repeats by sleeping for 0.5 seconds. This (at least on my local device) brings cpu use back to what normal play would be like. An alternative would be to disable this altogether, but I prefer the throttling approach as it keeps the features more similar between online and offline. -------------------------------------------------------------------------------- 1ff6aac338 | Aidan Holm | 2019-09-09 23:18:24 +0800 Fix bad comma -------------------------------------------------------------------------------- e11a5d91ad | Aidan Holm | 2019-09-09 23:10:28 +0800 Fix headsup crashloop with >4 monster types (nikopol, 12059) Headsups needed access to the number of monsters of each type to determine the appropriate grammar, but used a map of pre-condensed monster types. -------------------------------------------------------------------------------- fb3efd073d | Aidan Holm | 2019-09-09 12:34:07 +0800 Add all autoexcludes simultaneously This fixes two bugs; autoexclude spam when encountering multiple monsters that require autoexcludes, and autoexplore not showing the correct region of the map before forcing a more prompt. Monsters now no longer force a more prompt if they awaken immediately. This commit also slightly improves maybe_remove_autoexclusion(): the ballistomycete case is already handled in _need_auto_exclude(). -------------------------------------------------------------------------------- 9501b9e7a0 | Aidan Holm | 2019-09-09 12:34:07 +0800 Factor out describe_monsters_condensed() helper function -------------------------------------------------------------------------------- de3ff83e2e | Aidan Holm | 2019-09-09 12:34:07 +0800 Remove unused headers -------------------------------------------------------------------------------- ff1bdec7c2 | Aidan Holm | 2019-09-09 12:34:07 +0800 Fix magic mapping water colour in sewer -------------------------------------------------------------------------------- a4a55ebecd | Aidan Holm | 2019-09-09 12:34:07 +0800 Fix border between mapped and unmapped water tiles The idea here is that wave borders against the edge of LOS should not be added if the adjacent out-of-LOS terrain type is unknown. This is relevant when using magic mapping, which does not reveal the depth of water, showing all water as shallow. This caused deep water on the edge of LOS to incorrectly have wave borders on that edge. -------------------------------------------------------------------------------- ef970caa61 | Aidan Holm | 2019-09-09 12:34:07 +0800 Always clear tile flavour when destroying walls (kitchen_ace, 12053) It's not clear to me why the tile flavour was only cleared if the terrain had been transformed; in any case, this function is only ever called from destroy_wall(), so this should be safe. -------------------------------------------------------------------------------- f216e90430 | Aidan Holm | 2019-09-09 12:34:07 +0800 Fix rest_delay = -1 option -------------------------------------------------------------------------------- 4db8f8041d | Aidan Holm | 2019-09-09 12:34:07 +0800 Simplify wave overlay packing code -------------------------------------------------------------------------------- 2324e3a9ae | Aidan Holm | 2019-09-09 12:34:07 +0800 Cache map knowledge for later rendering Rendering cell overlays needs access to the state of adjacent cells, in order to properly render waves. Previous code was directly accessing the current simulation state in env.map_knowledge, which caused glitches when viewwindow was exiting early (due to run_dont_draw) and not copying the current tile fg/bg. In general, render code should never access the global game state. This commit copies the current env.map_knowledge for each cell into packed_cell; this structure notably includes cloud_info, item_info, and monster_info structs copied from their corresponding global instances (so they're safely accessible). There are still a few locations where global state is accessed, such as player_in_branch() calls. These are relatively benign, but they should be removed as well. -------------------------------------------------------------------------------- d8832a91eb | Aidan Holm | 2019-09-09 12:34:07 +0800 Properly cache global state for later rendering Local tiles rendering code should use only the state stored in the view buffer passed to load_dungeon; in particular, it should *not* access env.* whenever a redraw is needed, since this state may have been updated. Tile flavours are unlikely to change, but you never know... -------------------------------------------------------------------------------- bdd17524c8 | Aidan Holm | 2019-09-09 12:33:37 +0800 Remove dead inscription hints code -------------------------------------------------------------------------------- 12c97a3ad0 | Aidan Holm | 2019-09-09 12:33:37 +0800 Fix bad FAQ menu entry wrapping -------------------------------------------------------------------------------- b99ddf99ac | Aidan Holm | 2019-09-09 12:33:37 +0800 Make menu colours more consistent -------------------------------------------------------------------------------- a2d57835b7 | Aidan Holm | 2019-09-09 12:33:37 +0800 Fix deck menu being easily closable -------------------------------------------------------------------------------- ac8ac2ac75 | Aidan Holm | 2019-09-09 12:33:37 +0800 Fix extra newlines in local tiles tooltip -------------------------------------------------------------------------------- 65986e55db | Aidan Holm | 2019-09-09 12:33:37 +0800 More font rendering refactoring This commit splits render_string() into render_hover_string(), used for rendering labels over dungeon tiles, and render_tooltip(). -------------------------------------------------------------------------------- 56e724e302 | Aidan Holm | 2019-09-09 12:33:37 +0800 Improve local tiles tooltip appearance This commit removes the ability to specify a background colour with render_string(), and switches on the tooltip parameter instead. -------------------------------------------------------------------------------- e7559507c6 | Aidan Holm | 2019-09-09 12:33:37 +0800 Fix trailing empty lines on help screens -------------------------------------------------------------------------------- 2f91b30d3a | Aidan Holm | 2019-09-09 12:33:37 +0800 Fix player being off-centre on local tiles -------------------------------------------------------------------------------- 9a1d66b0e3 | kitchen-ace | 2019-09-09 01:29:13 +0800 Don't show draconian head with full helms Only really relevant for wearing the mask of the dragon. -------------------------------------------------------------------------------- 4bb3bc1208 | kitchen-ace | 2019-09-09 01:29:13 +0800 Give draconians their own horns tile -------------------------------------------------------------------------------- a6a8d0c736 | Alex Jurkiewicz | 2019-09-08 22:37:08 +0800 Document timed_effects / timed_effect_type link -------------------------------------------------------------------------------- 611b3b1973 | wjchen | 2019-09-08 22:36:08 +0800 Ensure stash update on being shafted (minqmay) Currently, if a player discovers an altar and get shafted by a trap at the same time, the altar will appear in dungeon overview but not in stash tracker. This change ensures items, shops, and altars discovered at the moment the player gets shafted are correctly registered. -------------------------------------------------------------------------------- 8e11da7cb5 | dplusplus | 2019-09-08 22:34:47 +0800 fix mutations/vamp-attrs toggle -------------------------------------------------------------------------------- aff5e891e6 | kitchen-ace | 2019-09-08 22:21:59 +0800 Show scarves on player in tiles (11977) Scarves weren't being shown at all unless the player chose one through the doll editor. And even then they were practically invisible, since they were drawn behind the body (like cloaks) instead of in front where I think they were meant to be. The green scarf tile looks quite strange to me, but that's a separate problem. -------------------------------------------------------------------------------- 8e0e932a4c | Kate | 2019-09-06 23:44:15 +0100 Update mailmap [skip ci] -------------------------------------------------------------------------------- 5c5dc1b5cb | Kate | 2019-09-06 22:25:44 +0100 Update CREDITS.txt [skip ci] -------------------------------------------------------------------------------- 9d6b971ae4 | Nikolai Lavsky | 2019-08-28 22:15:16 +0800 Add missing feature tiles to the stash search menu PR #1051 allowed searching for traps, but several trap tiles are absent from the stash search menu. As mentioned in 276b1762, the current method of picking feature tiles by the search result description has some limitations. It works correctly for features that have a separate dungeon_feature_type, for example, regular teleport traps or altars. But there are dungeon features that have the same dungeon_feature_type, but different description: * Net traps, pressure plates, and all other mechanical traps are all DNGN_TRAP_MECHANICAL. * Permanent teleport traps share DNGN_TRAP_TELEPORT type with regular teleport traps. * Doors can have different descriptions too: 2-3 adjacent runed doors become "large runed doors", 4+ doors become "huge runed gates." If there is no matching description, feat_by_desc() returns DNGN_UNSEEN, which is why the search menu doesn't show tiles for these dungeon features. This commit fixes that by handling tile picking for traps and runed doors separately. -------------------------------------------------------------------------------- 87330a484a | advil | 2019-08-27 13:38:39 -0400 Enable incremental pregen as a default for new games, track in save Finally flipping the switch. Reason for adding to the save: This turns out to make more sense if the option sets a flag in the save, rather than the option determining the behavior of the current crawl session. Something like this should probably have been in the beginning, but the option of using "classic" levelgen was added quite late in the process. All of this could be simplified from the user's perspective by making the existence of classic levelgen less obvious, or debug-only, and I may do this in a future commit. -------------------------------------------------------------------------------- 4d4af813a0 | Alan Malloy | 2019-08-25 12:40:14 -0700 Revert "Add attack-no-move bindings for Colemak" (#1140) This reverts commit c0fa6600bf77c549186ab8d4e74820f4ac84c170. -------------------------------------------------------------------------------- c0fa6600bf | runrin | 2019-08-21 16:15:06 -0700 Add attack-no-move bindings for Colemak -------------------------------------------------------------------------------- 6a6c3f83c1 | advil | 2019-08-20 15:26:51 -0400 Fix another misc compiler warning Also, unbrace. -------------------------------------------------------------------------------- 962dd19927 | advil | 2019-08-20 15:23:09 -0400 Fix a gcc warning Noticed while rebuilding cbro -------------------------------------------------------------------------------- f1077d3298 | advil | 2019-08-20 15:06:32 -0400 Don't update brentry for portal mimics Also, change the ASSERT to an mprf for now, in lieu of real save compat (which doesn't seem worth the effort). I will likely change this back at some point, because annoying as it is, this ASSERT has found a ton of bugs and edge cases. -------------------------------------------------------------------------------- dfe76135ef | advil | 2019-08-20 14:46:18 -0400 Put seed in crashlogs This is risky in that it has some cheating potential, we may even want to disable this for tournaments or in general, but it's incredibly frustrating to not have this information in trunk crashes right now. -------------------------------------------------------------------------------- 91963d7417 | advil | 2019-08-20 13:41:25 -0400 Remove a debugging check that is tripping for dith chars Will return once I figure out why this is triggering. -------------------------------------------------------------------------------- d66451a9e9 | advil | 2019-08-20 11:41:47 -0400 Handle portals differently in dungeon overview (12048) 44eecae1 changed how portals are handled in the branch structure, and in so doing caused a change in behavior where they got added to `stair_level` if entered (via enter_branch, which didn't used to get called on them), and therefore showed up in the overview and G menu even though after exiting the portal branch. The entry in that structure is just an empty set, which previously wasn't possible, and caused them to render in a confusing way in the overview. This commit embraces the bug and shows previously entered portals in the overview as e.g. `IceCv (visited)`. A portal you are currently in will show as `IceCv (1/1)`. The empty set case is also now handled for `G`. An empty entry to stair_level, previously not possible, now has the semantics of a branch that no longer has stairs; it is worth noting that I didn't implement any way for portal stair sources to actually appear in this structure, so this semantics as described is not fully implemented (in that a portal branch will still have no source stairs even while the player is in it or have seen but not traversed the portal entry). There are some complexities with fully implementing this part that made it not seem worthwhile, including handling seen portals vanishing while not in los, and the fact that multiple bazaar entries could in principle exist at once (I think). Any game played between 44eecae1 and now may have missing portal branches if they were entered with `<` instead of `>` -- not going to worry about this. -------------------------------------------------------------------------------- 7d3d5a44bd | advil | 2019-08-19 19:50:43 -0400 Simplify pregen options and update documentation. -------------------------------------------------------------------------------- b1ee012021 | advil | 2019-08-19 19:50:43 -0400 Further domino call refactoring If a level does not use dominoes, there is no need to pass a value at all to the domino parameter as far as I can tell. Random tile variants are selected via other means. -------------------------------------------------------------------------------- 58b1be019b | advil | 2019-08-19 19:50:43 -0400 Default disable incremental pregen for testing This is for the merge of the incremental_pregen branch: the branch includes a wide range of rng improvements etc that are independent of the generation method, so it will be simpler to test the branch online without incremental pregen being enabled by default. If players are interested, they can still enable it in their rc file (`incremental_pregen=true`). Later, I'll default this to true. -------------------------------------------------------------------------------- bd264f5708 | advil | 2019-08-19 19:50:43 -0400 Separate unique vault tracking for abyss from everything else This commit doesn't affect vaults that place only in one or the other, but for vaults that place in both and are supposed to be unique (e.g. hangedman_summoners_spam, lemuel_flamethrower_hall), these vaults can now in principle independently place twice, once in the abyss and once outside. (The behavior of unseen vaults in the abyss isn't changed, so if they aren't seen in the abyss, they can keep re-placing there.) This is consistent with abyss's flavor as a shadowy mirror of the outside world. Something like this is necessary for seed stability, as long as regular levelgen can be interleaved with the abyss: maps that can place in both abyss and elsewhere and are unique in some way can interfere with incremental pregeneration if they place in the abyss and are seen there, and then would try to place in an as-yet-ungenerated level. There aren't a lot of vaults that this affects, but there are a few, mostly placing in depths and elf. Abyss should be the only branch that this problem applies to. Pan is handled differently, by forcing everything else to pregenerate, and zigs + bazaars have non-overlapping vault lists (plus zigs will force complete pregeneration as well). The implementation is therefore a bit ad hoc in terms of serializing, though I have generalized how unique vault lists are accessed. Semi-related debugging changes: This commit also affects how vaults are shown in morgues, and might be kind of spammy for abyss / pan (it shows every vault that ever places), so this part may need further tweaking. There's also a bit of useful debugging infrastructure. -------------------------------------------------------------------------------- b9928c7577 | advil | 2019-08-19 19:50:43 -0400 Remove some mutation validation ASSERTs (11807) If the player gets a lot of xp, the temporary mutation xp value may well be negative and stay negative. A negative value means that the player will get more temp mutations removed the next time they got any xp. There are various alternatives (e.g. maxing this value at 1, running temp_mutation_wanes in a loop until it is non-negative), but I've convinced myself that the current behavior is more or less what's intended. -------------------------------------------------------------------------------- 93dbe2d410 | advil | 2019-08-19 19:50:43 -0400 Isolate trove portal generation from levelgen rng The toll is calculated while generating the trove, and the number of rng draws that make up this calculation depends on the player (skills, species, etc). So, isolate it as a subgenerator calculation so that it always makes the same number of draws from the main rng. -------------------------------------------------------------------------------- 452b1d95ea | advil | 2019-08-19 19:50:43 -0400 Handle certain random attack specs differently Four monsters (chaos spawn, cherubs, eidolons, and ghost moths) have a random attack type or flavor that is randomized as part of `mons_attack_spec`. This led to two bugs. First, the monster description changed each time you look at it; this is cosmetic for chaos spawn/cherub as the damage wasn't affected, but for eidolons and ghost moths a newer player would not realize that the stat affected by AF_DRAIN_STAT is randomized per hit. Second, and more involved, this led to a seed bug, depending on the state of the area grid when the builder was called. When placing an item, the builder checks if the player can hear the position where the item is, in order to decide whether to make a splash noise. As part of this check, it looks to see if the position is silenced. This involves checking the area grid, and if the area grid is invalid, rebuilds it. Part of rebuilding the area grid involves running holiness checks on potentially every monster in the level. Running a holiness check involves checking attack flavors, to look for evil attacks etc. This would therefore then do some random calls, on the levelgen rng. The result: the rng state was different depending on whether the area grid is valid. (Probably every stage of this calculation could be simplified out of existence for the levelgen case, but no matter.) I *think* that the area grid should always be valid except on turn 0, so this mainly led to a difference between the seed explorer and actual games; because these monsters are not super common it wouldn't manifest until lair branches or depths usually. This commit fixes these bugs in two ways. First, it makes `mons_attack_spec` non-random unless that is explicitly called for, which it only should be when actually doing the attack. This leads to better descriptions of these four monsters. Second, as a sanity check it also isolates the area grid rng, in case there's other code that could be triggered by it that is random. There's also a bit of debugging code / builder spam adjustment in this commit. -------------------------------------------------------------------------------- 5121451e89 | advil | 2019-08-19 19:50:43 -0400 Don't pregenerate bazaars (for now at least) The problem is that multiple bazaars can generate, which I hadn't realized. It would be possible to pregenerate the first one without too much trouble, but this leads to some oddness with the current incremental pregen setup. Ideally, we would pregenerate all bazaars, but this would require some tricky changes to how portal vaults are currently handled. -------------------------------------------------------------------------------- ad2a101408 | advil | 2019-08-19 19:50:43 -0400 Fix a sequence point issue in rng::subgenerator -------------------------------------------------------------------------------- aa2f355350 | advil | 2019-08-19 19:50:43 -0400 Isolate shoals tide from levelgen rng The builder calls some tide code when finishing up a shoals level, roughly to initialize things. However, tide code is dependent on global state, for things like shoals tide direction, and it is also randomized, so it would have a different impact on the rng depending on this state. This means that for incremental pregen (or just regular games before incremental pregen) the outcome of later levelgen would be impacted by the global tide state when entering a level. This commit ensures that tide state only ever impacts the gameplay rng. -------------------------------------------------------------------------------- 215db2b007 | advil | 2019-08-19 19:50:43 -0400 Reset brentry for portals correctly in tests/wizmode Now that portal information is stored here, we need to deal with tests that clear uniq_map data, allowing portals to be generated multiple times. -------------------------------------------------------------------------------- da9c0b029a | advil | 2019-08-19 19:50:43 -0400 Update seed explorer for incremental pregeneration This mostly consists of handling portals correctly. Also, smaller changes: * Add Gehenna to the seed explorer. Somehow this was missing? * Change the seed explorer default depth to exclude hells; the hells are too spammy, and not what most use cases are interested in. -------------------------------------------------------------------------------- 44eecae16b | advil | 2019-08-19 19:50:43 -0400 Generate portal levels at the same time as their source Whenever a regular level has a portal, this will generate the portal levels immediately after the regular level's generation is triggered. This imposes a deterministic generation order on portal levels for incremental pregen, as well as a deterministic order between portals when there are multiple ones from the same level (which is missing from even full pregen before this commit). This commit also puts ziggurats in the generation order, though they are handled a bit differently; this is so everything else generates before they do, to try to minimize the impacts of item placement in zigs. -------------------------------------------------------------------------------- 66c84cb112 | advil | 2019-08-19 19:50:43 -0400 Add pan to level generation order This forces everything before pan to be generated before entering pan; since there is occasional overlap of vaults and uniques, entering pan can therefore interfere in any later levelgen. -------------------------------------------------------------------------------- 38a37b7ff7 | advil | 2019-08-19 19:50:43 -0400 Isolate shop rolls from levelgen This will make it not a complete disaster to try to place specific unrands in shops, though I would still want to discourage this. I believe there is currently one shop that does this, minmay_shop_mayhem, which doesn't have a simple fix. (One option might be to let some lua post-place script cull shop items, rather than try to filter the list beforehand, but I think this would be pretty involved.) -------------------------------------------------------------------------------- 7e99aecb7e | advil | 2019-08-19 19:50:43 -0400 Use fallback randarts for minmay_shop_chei This works fine, you get randart bardings/hats with ponder. -------------------------------------------------------------------------------- cbae52a9c1 | advil | 2019-08-19 19:50:43 -0400 Make ds, wn, and dswn starts more deterministic by seed This should make the rng for setting up each of these start categories fully determined by the game seed, and independent from each other (as well as all other start choices). Before, these were somewhat accidentally dependent on seed, but dswn led to an interaction between the two (and potentially with any other randomness that might happen during character initialization, if there is any). Even if we decide that this is a bad idea at some point, these are still the right code changes to make these rolls independent of the rng as well -- would just need to initialize the subgenerator differently. Thanks to discord user Blue for pointing out the dswn interaction. -------------------------------------------------------------------------------- 82437c2fa6 | advil | 2019-08-19 19:50:43 -0400 Update seed menu for incremental pregen Removes the toggle except on debug builds. It is still possible to enable full pregen in the rc file for offline games. -------------------------------------------------------------------------------- a46ea00baf | advil | 2019-08-19 19:50:43 -0400 Remove almost all instances of you.unrands This technique for controlling unrand placement has a bad interaction with incremental pregen. Basically, any change to item placement in a vault description can impact rng state, and it's a bit hard to keep these effects limited. (Though possibly, uses of this technique that replace exactly one unrand with exactly one other thing might be more or less ok.) With full pregen, this is not an issue, because dungeon unrand selection is done before the player can do anything. With incremental pregen, because unrands can be generated by acquirement, any such generation can the effect levels that are in the future. Crawl already did some automatic fallback placement for unrands that were not wrapped in you.unrands checks: if unrand placement fails, it placed an unrand with the same base type and subtype. However, in various cases vault designers wanted something more specific. To solve this problem, this commit makes the following changes: 1. Item generation all happens on a sub-generator, so all single items make exactly the same number of draws from the level's rng (4). This means that fallback placement as described above doesn't affect the rng over and above regular unrand placement. 2. The vast majority of uses of you.unrands in vault design just tweaked what would happen without a lua check slightly, by adding a brand or changing the subtype. I've enhanced the syntax of art-data.txt to allow explicit specification of fallback type and subtype (e.g. so things like Glaive of the Guard can place as a bardiche), as well as allowing specification of a brand for the fallback. Before, item generation didn't try to mimic the unrand's brand, but now it does. Nearly everything that was previously done with you.unrands in lua can now be done with the new syntax in art-data.txt, in a more generalized way. Most of the time I took the fallback details from specific vaults. In a few cases, the logic that this replaces was complicated enough that I didn't try to reproduce it exactly, but I really don't think that most of these extra complicated cases added much. So, here's an example of what should happen. Suppose the old item spec looked like this: ``` : if you.unrands("frostbite") then KITEM: 2 = executioner's axe ego:freezing randart ident:type / \ battleaxe ego:freezing randart ident:type / \ broad axe ego:freezing randart ident:type : else KITEM: 2 = frostbite / \ battleaxe ego:freezing randart ident:type / \ broad axe ego:freezing randart ident:type : end ``` This has been replaced by the following, which now accomplishes exactly the same thing: KITEM: 2 = frostbite / \ battleaxe ego:freezing randart ident:type / \ broad axe ego:freezing randart ident:type If frostbite has already generated, and the vault rolls the first item in this list, then it will generate a fallback randart of the same type and subtype (exec axe). In fact this would have already happened with this item spec before this commit. Because frostbite specifies a brand (SPWPN_FREEZING), the randart will pick this up as well (this part is new). Because all this is partitioned off from the levelgen rng, nothing else about a level should change beyond the substitution of an unrand with a similar randart. There's still some details not in this commit; in particular there're a few shops that still use you.unrands that I'll address in a separate commit. -------------------------------------------------------------------------------- 9ece634645 | advil | 2019-08-19 19:50:43 -0400 Improve the rng subgenerator API This makes it easier to spin up a temporary rng based on current rng state (or not). Subgenerators are designed for one-off calculations where it is desirable to keep the main rng state fairly stable. A couple pieces of code already use this technique, and they are now a lot better, both converted to use unbiased bounded random calls (though the domino code is complicated enough that I didn't want to convert it over fully). This commit changes make_name to be use randomness better relative to its 32 bit seed parameter; I'm not sure if it will be qualitatively noticeable but the old behavior is recoverable if necessary. -------------------------------------------------------------------------------- bc886685f7 | advil | 2019-08-19 19:50:43 -0400 Update the bounded random implementation This moves to an implementation of unbiased bounded random number generation based on a recent algorithm by Daniel Lemire with an implementation by Melissa O'Neill. This change has two advantages: (i) the big one, this is off-the-shelf code written by an rng expert, implementing an algorithm designed by someone who specializes in this kind of optimization. Ours was *probably* fine, but didn't exactly match any standard way of doing this that I was able to find. (ii) It gets a 10% speedup for typical range values compared to our old implementation, because it avoids using /,% where possible. This is probably not a big deal in the scale of things that are slow in crawlcode, but we do call the rng a *lot*, mostly with range values that this function is optimized for. See: http://www.pcg-random.org/posts/bounded-rands.html https://lemire.me/blog/2016/06/27/a-fast-alternative-to-the-modulo-reduction/ https://arxiv.org/abs/1805.10941 This also updates the API for this call, moving it the implementation into the pcg class, as well as updates some comments in pcg.cc to be more detailed and correct. -------------------------------------------------------------------------------- 8fead6faaf | advil | 2019-08-19 19:50:43 -0400 Change PCG initialization to something more standard Perhaps because of the age of our PCG implementation (it comes from before the official implementations were well-developed/documented), our initialization process was fairly ad-hoc, which is not usually a good idea in RNG design. This commit converts the initialization behavior to match what the official implementations do, for example: https://github.com/imneme/pcg-c-basic/blob/master/pcg_basic.c Possibly it would be best even to just use the official c++ PCG implementation, but this commit doesn't go that far. Needless to say, this change affects all seeds. -------------------------------------------------------------------------------- 159d84b62b | advil | 2019-08-19 19:50:43 -0400 Cosmetic refactoring of the rng interface Move the more internal parts into their own namespace, and rename some functions accordingly. This still leaves the external interface (random2 etc) outside the `rng` namespace, because I'm not up for the consequent mass edit right now. -------------------------------------------------------------------------------- 62a95a1fbf | advil | 2019-08-19 19:50:43 -0400 Add an option to disable incremental pregen, use it for fireworks This option isn't a very direct solution to the immediate problem, but it's something players might want anyway. The immediate problem is that after the incremental pregen commit, wizmode `&~` is not safe to use in a long sendkeys sequence, because if it triggers pregen, the pregen progress window will absorb any following keystrokes until it is done. For fireworks, the script just goes to temple because it's a straightforward area clear of monsters that it's safe to use for testing, so disabling pregen makes sense. No other official scripts really use this. If it turns out that a more complete solution is needed for some reason, I could imagine either (i) letting wizmode `&~` trigger a fancier menu that has an option to toggle pregen, or (ii) adding some kind of bot mode that suppresses the progress popup. Most bots trigger on ready() though, so won't get tripped up by this popup as far as I can see. -------------------------------------------------------------------------------- 11bec38995 | advil | 2019-08-19 19:50:43 -0400 Initial implementation for incremental pregeneration This accomplishes the main mechanics, but doesn't solve most of the hard seeding problems. After this commit, the dungeon always generates in a stable order for non-pregen games; if you skip levels relative to the defined order it will catch up. -------------------------------------------------------------------------------- 45f0056d81 | Aidan Holm | 2019-08-19 00:30:35 +0800 Speed up level traversal by 33% The Wang tile generator in domino.h is unfortunately pretty slow. It's also not necessary on levels outside the crypt, which don't use wang tiles, so defaulting to random tile indices in this case is a simple fix. Improves (not-into-crypt) level traversal speed by around a third. -------------------------------------------------------------------------------- 0c8b59c118 | Aidan Holm | 2019-08-19 00:26:00 +0800 Revert "Speed up level traversal by 33%" This reverts commit 070f72b007c478799c7b6210fd4ce8416dc5f516. -------------------------------------------------------------------------------- 070f72b007 | Aidan Holm | 2019-08-18 23:12:10 +0800 Speed up level traversal by 33% The Wang tile generator in domino.h is unfortunately pretty slow. It's also not necessary on levels outside the crypt, which don't use wang tiles, so defaulting to random tile indices in this case is a simple fix. Improves (not-into-crypt) level traversal speed by around a third. -------------------------------------------------------------------------------- 61eb7a8b75 | Aidan Holm | 2019-08-18 23:07:43 +0800 Fix newline at end of message log -------------------------------------------------------------------------------- d1b266bae6 | Aidan Holm | 2019-08-17 21:50:59 +0800 Fix excess padding on webtiles book spell list -------------------------------------------------------------------------------- 8077b2f243 | wjchen | 2019-08-17 21:22:26 +0800 Allow traveling and annotating current level from ^O G, _, $, and ! in dungeon overview are made shortcuts to G, G_, Ctrl+F "shop", and level annotation respectively allowing selection of target for travel and annotating current level from dungeon overview. -------------------------------------------------------------------------------- f04b0cdf28 | wjchen | 2019-08-17 21:22:26 +0800 Allow using G_ to select altar for travel Pressing _ in G now lists discovered altars, user can then select the altar for travel by entering the initial of a god (except for TSO, which is replaced by 1). Once a god is selected, travelling to the nearest altar is started. Help file is also modified to reflect this change. -------------------------------------------------------------------------------- b950e110d4 | wjchen | 2019-08-17 21:22:26 +0800 Add _god_from_initial() to travel.cc _god_from_initial(const char god_initial) returns a god_type enum when the initial of a god (i.e., god_initial, case-insensitive) is given. (except for TSO, which is replaced by '1'). If the given letter does not match any god's initial, GOD_NO_GOD will be returned instead. For example: _god_from_initial('a') or _god_from_initial('A') will return GOD_ASHENZARI. This function is later used for allowing players to select an altar for travel by the initial of a god. -------------------------------------------------------------------------------- 4167bdcbf3 | wjchen | 2019-08-17 21:22:26 +0800 Allow predefined keyword for search_stashes() Modify StashTracker::search_stashes() to accept an optional predefined keyword. It now directly return search results without asking what to search for when the keyword is specified. -------------------------------------------------------------------------------- fe73009c60 | Aidan Holm | 2019-08-17 20:29:10 +0800 Check bounds for Grid widget row/col growths It's very easy to cause memory corruption if you unconditionally set the growth amount for a column / row, but conditionally add widgets to that column / row. -------------------------------------------------------------------------------- 6aae15eeb0 | Aidan Holm | 2019-08-16 17:36:42 +0800 Fix mouse cursor on unselectable items -------------------------------------------------------------------------------- 3b46b88f1c | Aidan Holm | 2019-08-16 17:32:04 +0800 Prevent widget parent clobbering (12046) If a widget's parent was recreated and reassigned to a shared pointer variable, it was possible for the old instance's destructor to clear the child's parent pointer after the new instance had initialized it: auto parent = make_shared(child); // child->m_parent == parent.get(); parent = make_shared(child); // child->m_parent == parent.nullptr When the second line runs, the first Parent instance is destructed after the second instance is constructed, clobbering the child's m_parent. -------------------------------------------------------------------------------- 2d01d4ab0a | advil | 2019-08-11 11:28:14 -0400 Fix some non-working code in `your_talents` I'm still not sure under what natural circumstances this code can get triggered, but it seems to be happening in this megazig character: http://crawl.akrasiac.org/rawdata/malcoda/crash-malcoda-20190811-143529.txt This bit of code for doing backup hotkey assignment for abilities has apparently never worked, but it also is hard to get to, so no one has noticed before. -------------------------------------------------------------------------------- dd4cf15266 | Nikolai Lavsky | 2019-08-10 13:01:29 -0400 Fix red draconian Tiamat tile (12043) In mon-data.h, the colour of red draconians is LIGHTRED, not RED, since 54374eb4. Because tilepick.cc:tileidx_monster_base() had no matching colour for red draconian Tiamat, it returned a tile with offset 0, the black draconian Tiamat tile, instead. -------------------------------------------------------------------------------- bb0d440638 | gammafunk | 2019-08-08 21:46:59 -0500 Update Sif Muna's altar (CanOfWorms) This adds new animated altar tiles courtesy of CanOfWorms. The tile concept is a sort of shimmering orb of magic atop a deep blue pedestal inscribed in powerful LORE. The description is updated accordingly, and Sif's altar now has ETC_SHIMMERING_BLUE as its color instead of simply blue. -------------------------------------------------------------------------------- 42aaa33449 | gammafunk | 2019-08-08 20:48:00 -0500 Remove an unused description -------------------------------------------------------------------------------- 939521aa74 | Seve Monahan | 2019-08-08 19:10:12 -0400 Add rmcneive to CREDITS.txt -------------------------------------------------------------------------------- c9afb8a149 | Seve Monahan | 2019-08-08 19:05:20 -0400 Merge branch 'rmcneive-Vaamat_quotes_1' Some of these quotes are not currently visible in game due to mantis bug 12032 -------------------------------------------------------------------------------- 18ba70b503 | advil | 2019-08-06 07:37:22 -0400 Don't let dgn_move_entities_at move statues onto clouds This resulted in a crash in world_reacts; it could be reliably replicated by running lugonu corrupt near the vault statue_in_the_mist_lemuel. -------------------------------------------------------------------------------- 0b98641fa2 | Seve Monahan | 2019-08-06 00:43:41 -0400 Remove extraneous Nikoli Lavsky credit -------------------------------------------------------------------------------- 98e85ec62a | Seve Monahan | 2019-08-04 11:18:03 -0400 Add Nikolai Lavsky to CREDITS.txt -------------------------------------------------------------------------------- c3251c534c | reaverb-Crawl | 2019-08-04 11:09:40 -0400 Merge pull request #1124 from nlavsky/zigfig-warning Warn the player about leaving a ziggurat figurine behind (u/Quatzecoatl) -------------------------------------------------------------------------------- cb87913eb9 | Nikolai Lavsky | 2019-08-01 14:17:47 +0300 Warn the player about leaving a ziggurat figurine behind (u/Quatzecoatl) Ziggurat figurines are usually buried below other loot and could be easy to miss. This commit adds a confirmation prompt when exiting Zig:27 without the figurine. This change was suggested here: https://www.reddit.com/r/dcss/comments/al6bxh/ -------------------------------------------------------------------------------- 9231cdcba1 | Seve Monahan | 2019-07-31 00:18:52 -0400 Don't mention Invocations skill in Drain Life spell description (#11947) -------------------------------------------------------------------------------- f43b32f898 | Seve Monahan | 2019-07-29 23:22:00 -0400 Ensure Zigsprint never fails to place guaranteed items (#12033) -------------------------------------------------------------------------------- e2f623c2b9 | Seve Monahan | 2019-07-29 23:00:39 -0400 Have fsim test magical staffs with different Staves skill values (#12034) It would probably better to give the fsim user control over which skill(s) to vary, but if somebody needs that functionality it should be relatively simple to implement. -------------------------------------------------------------------------------- 04f7f4e3a9 | Seve Monahan | 2019-07-29 20:16:11 -0400 Use "spell power" over "magical power" in !brill description (Yermak) "Magical power" is often used to refer to magic points, such as in the ring of magical power. There should probably be more consistent names for magical points and spell power, which should ideally both avoid using the word "power". -------------------------------------------------------------------------------- bf7f94f634 | rmcneive | 2019-07-27 11:05:17 -0400 Update quotes.txt -------------------------------------------------------------------------------- 122614bf49 | Aidan Holm | 2019-07-27 17:21:15 +0800 Fix typo (runrin) -------------------------------------------------------------------------------- 8fd06ad0bc | Seve Monahan | 2019-07-22 22:53:24 -0400 Rename a column of crash dumps from "can_train" to "can_currently_train" Split this off from 7ac07d978e2f31 so that this commit can be easily reverted. Reverting this commit would be useful if some outside system is fragile to the crash format changing. It might be better to split the skills table header into two lines for readability's sake. This would allow each column header to wrap once. -------------------------------------------------------------------------------- 7ac07d978e | Seve Monahan | 2019-07-22 22:49:23 -0400 Rename you.can_train to you.can_currently_train Logic errors such as the one fixed by 284f782df56 are much less likely to occur with this more precise name. Lua functions are unchanged to conserve compatibility with old scripts. Crash dumps will be changed in the next commit. -------------------------------------------------------------------------------- 9d8d8d5b78 | Seve Monahan | 2019-07-22 17:25:49 -0400 Ensure the Faerie Dragon scales are always id-ed (Mantis 12031) Now if you managed to kill the Enchantress before seeing her, the Faerie Dragon scales will be identified. This also ensures that if the Faerie Dragon scales are placed in a vault, they will be identified. -------------------------------------------------------------------------------- d52e2fb918 | Seve Monahan | 2019-07-21 18:35:10 -0400 Revert "Another try at "Don't crash if redrawing a prompt triggers a flash"" This reverts commit 9de272bb65679e0acb2c0d648a7bf934a2dbe1e2. This commit appears to cause crashes similar to a379d5e2002d17 Example: https://crawl.xtahua.com/crawl/morgue/hittemvvvvvvvhard/crash-hittemvvvvvvvhard- 20190721-214938.txt It's possible this is coincidence, if so this commit can be reverted. -------------------------------------------------------------------------------- 9de272bb65 | advil | 2019-07-20 19:01:55 -0400 Another try at "Don't crash if redrawing a prompt triggers a flash" Not exactly a revert of be7f5e2e8dd2d2250346b0928555b9967f520fba. This tries under fewer circumstances to restore cursor position after a flash, doing it only while printing to the message window; it is apparently possible for a flash to be called in situations where the cursor position is incoherent with the region. However, things should be coherent within _mpr. This also disables flashing entirely in the arena, as the arena reliably instantiates one of these cases, and I couldn't figure out why. -------------------------------------------------------------------------------- be7f5e2e8d | advil | 2019-07-20 15:17:44 -0400 Revert "Don't crash if redrawing a prompt triggers a flash" This reverts commit a379d5e2002d1753cc2fdd47a06dc70336d03bd7. -------------------------------------------------------------------------------- a379d5e200 | advil | 2019-07-20 14:10:22 -0400 Don't crash if redrawing a prompt triggers a flash This is probably a webtiles-specific bug: if a prompt triggered a flash (on just webtiles builds, I think), and there were monsters in view, then the redraw involved in the flash would lose the cursor position and leave the region in the mlist. This is a kind of minimalistic fix in that it only addresses flash calls specifically -- viewwindow on relevant builds (as well as update_monster_pane) can change the region as a side effect, leaving it in the monster list. However, I'm not yet certain whether it would have other consequences to adjust this more generally. But probably a more general fix is needed, and all the occasional cursor out of bounds issues we see with GOTO_MLIST do result from this side effect of viewwindow. -------------------------------------------------------------------------------- 284f782df5 | Seve Monahan | 2019-07-19 22:50:02 -0400 Show XL to reach relevant skill level on more items (Mantis #12018) Before, if you could not *currently* train a particular skill, you would not see the "At X% training you would reach Y in about Z XLs" line. For example, if you did not have any short blades in your inventory but were looking at a rapier in a shop, the line would be missing. This fixes the description code to only exclude the line if a skill is *permanently* untrainable. -------------------------------------------------------------------------------- 2b48af375b | advil | 2019-07-19 09:08:24 -0400 Fix a potential cursor rendering issue in glyph mode What was happening here was if w or h were non-integer, then the scale value ended up slightly different than the cell sizes. In glyph mode, this was happening to the width parameter depending on font details (applying at least to firefox/mac on default settings). When rendering the mouse cursor, this scale value is used, so it would be a bit larger horizontally than a single cell, by 1-2 pixels. On firefox this meant that the cursor didn't get cleanly cleared when it moved, leaving vertical lines when moving the mouse cursor across the dungeon view. In testing, I have seen no consequences of using a scale based on the floored versions of w and h, even though in principle this might mean that the width of glyphs is slightly larger than the cell size is expecting. -------------------------------------------------------------------------------- 71c5d99ebc | advil | 2019-07-19 09:08:24 -0400 Handle hidpi screens in webtiles glyph mode This was not factoring in the device pixel ratio correctly, and so ended up too small on hidpi screens. This commit also adds support for crawl-internal zooming (via rc options, or {} in X) of the dungeon. Browser zoom affecting glyph mode is a different story, I'm not sure how possible this is going to be. -------------------------------------------------------------------------------- 9253d746ad | Alex Jurkiewicz | 2019-07-19 16:45:50 +0800 Compress title PNGs a little bit better Using: advpng -z4 -i 1000 Then: zopflipng --iterations=1000 --filters=01234mepb --lossy_transparent -------------------------------------------------------------------------------- a1643a6788 | Seve Monahan | 2019-07-18 22:52:16 -0400 Ensure artefact jewellery is always auto-picked-up (Mantis #12029) This was caused by commit 32ec7cac8f0e. 32ec7cac8f0e did not correctly handle artefact jewellery when it changed some jewellery autopickup from using simple autopickup exclusions to a lua function which checks the player's inventory. -------------------------------------------------------------------------------- af07aaf802 | Alex Jurkiewicz | 2019-07-18 18:47:22 -0700 Add guidelines for no_tele_into usage (#1118) Discourage overuse and explicitly reject the idea all runed door / transporter vaults require it. -------------------------------------------------------------------------------- 3e8b242632 | Seve Monahan | 2019-07-17 21:04:30 -0400 Clarify Beastly Appendage Octopode mutation conflict. (Mantis #12028) This makes it explicit in the description for Beastly Appendage it is ineffective for Octopodes which already have levels of the tentacle spike mutation. -------------------------------------------------------------------------------- 958ff8eaa0 | Seve Monahan | 2019-07-17 17:33:07 -0400 Make Qazlal's noise conduct more clear (Mantis #12025) Specifically, clarify that Qazlal followers generate noise even if there are no clouds around them. -------------------------------------------------------------------------------- bda620ff8e | Seve Monahan | 2019-07-17 17:32:47 -0400 Fix misspelling in describe.cc comment -------------------------------------------------------------------------------- cfb02b9d07 | nlavsky | 2019-07-15 12:46:23 -0700 Update scroll of brand weapon description (#1114) As blowguns are no more. -------------------------------------------------------------------------------- b815cdf0ff | Aidan Holm | 2019-07-15 15:19:12 +0800 Fix spurious key events when adjusting map zoom -------------------------------------------------------------------------------- e6e1909c86 | Aidan Holm | 2019-07-15 15:15:54 +0800 Fix visual jump when toggling floor / inv items For unselectable items, the hotkey is a space character, which produced an extra (presumably unintentional) indentation. I tried indenting to align the item titles, but this looked even more out of place, so flush left it is. -------------------------------------------------------------------------------- c560d0b20c | Alex Jurkiewicz | 2019-07-15 13:26:20 +0800 Mark two unrand vaults no_tele_into As both are protected by runed doors / transporters, it shouldn't be possible to teleport randomly inside. -------------------------------------------------------------------------------- 46574c2197 | Seve Monahan | 2019-07-14 01:06:22 -0400 Add escape hatch to mumra_spider_spiderweb (Mantis #12013) It was possible for the inner area of this vault to generate cut off from the rest of the level (by deep water). -------------------------------------------------------------------------------- 1074bba3cf | Seve Monahan | 2019-07-13 22:42:20 -0400 Ensure Bat Form warns about Stat Zero (Mantis #12006) I have changed the bat form drain formula to drain 2 from each stat. The old formula was very high variance (For example, there was a 1 in 70,000 chance of causing any particular stat to drop by 7). This made it difficult to communicate to the player the chance of causing stat zero, which I think is important. The old formula drained an average of 4.5 points, while the new formula drains 6 points. I do not believe this is a significant change. -------------------------------------------------------------------------------- e00f04a389 | Seve Monahan | 2019-07-12 23:56:26 -0400 Extract new helper function "_player_is_gnoll()" in skills.cc -------------------------------------------------------------------------------- 5a03d68f59 | Seve Monahan | 2019-07-12 21:33:12 -0400 Ensure train targets turn off once reached with !experience (#11993) This bug was caused by commit ece4408. I have tested the bug fixed by ece4408 (#11943) to ensure this commit did not cause a regression. -------------------------------------------------------------------------------- be733cd003 | marksg07 | 2019-07-12 13:43:31 -0700 Revert "Allow running clua from map viewing mode (#1103)" (#1107) This reverts commit 1c7b743a30f0ffe3337a8d576059ebbbcae2e84a. -------------------------------------------------------------------------------- d30f2f123c | olowin | 2019-07-12 12:03:45 -0400 Remove blood from Gozag shop description Now that vampires are hungerless. -------------------------------------------------------------------------------- 17ce2c7205 | Seve Monahan | 2019-07-12 00:37:23 -0400 Correct alphabetization in Makefile.obj -------------------------------------------------------------------------------- 7e4ddcd485 | advil | 2019-07-11 17:25:51 -0400 Fix a pronoun (12011) Ideally this should reflect player choice, but given that we aren't using the `it` form at all any more, this is at least more consistent. -------------------------------------------------------------------------------- df4b510d7a | advil | 2019-07-11 16:57:06 -0400 Trigger fineffs after blurrily reading a scroll (12016) Otherwise, they need to wait until the next turn. Two cases that I have tested: torment vs TRJ, and torment vs shock serpents. This is not a very general fix, and in principle might need to be generalized to any delay that queues a fineff. -------------------------------------------------------------------------------- 29c01f8b84 | advil | 2019-07-11 15:40:11 -0400 Fix arena logging (10060) For some time, arena logging has been writing the entire message history on each turn. This commit redoes arena logging using the message_tee paradigm instead of trying to read from the log history directly; doing it this way better handles continuous updates and the possibility of the message log filling up. -------------------------------------------------------------------------------- 534e725bec | marksg07 | 2019-07-11 10:44:49 -0700 Check for known map bounds in the clua travel library (#1102) The set_exclude, del_exclude, and set_waypoint functions all previously ignored the bounds normally set on your cursor in map mode, i.e. you can only move your cursors to points within the bounding box of the screen. This being ignored meant both that clua could do something that couldn't be done manually, and that your absolute coordinates could be leaked by careful use of the above functions. This fix will prevent both from happening. -------------------------------------------------------------------------------- 1c7b743a30 | marksg07 | 2019-07-10 17:33:25 -0700 Allow running clua from map viewing mode (#1103) This is made possible by adding user function recognition to key inputs while viewing map. A clua function can be run by adding a levelmap key map from a given key to ===functionName. When the clua function finishes, we will still be in map mode unless the function took us out of it. Additionally add clua functions for asking about map mode: crawl.in_map_mode, crawl.cursor_pos, and crawl.cursor_level cursor_pos and cursor_level return nil outside of map mode. cursor_pos also returns nil if the level of the cursor is not the same as the level of the player, because giving the relative position to the player in that case would leak information about the level map. -------------------------------------------------------------------------------- 33f6f7b652 | advil | 2019-07-10 18:11:47 -0400 Arena error improvements * keep arena from causing a full game exit if you mistype a monster. (In fact, just restart arena, at least if it was run from the main menu.) * Print multiple rounds messaging into a popup, it wasn't showing at all in interactive arena before. There's still a bunch of improvements that could be made to arena messaging, it doesn't say anything for 1-round fights, and is generally kind of lacking in local tiles (because of the lack of monster list). -------------------------------------------------------------------------------- 57318f2ed0 | Alex Jurkiewicz | 2019-07-08 21:46:12 -0700 Unify two loot lines (#1101) Based on absolutely nothing, I think the average stack size of mutation potions is a touch over 1, adjust the new weight accordingly. -------------------------------------------------------------------------------- ed8816983f | Alan Malloy | 2019-07-08 15:43:25 -0700 Add gmarks to CREDITS and mailmap after e77e6fb -------------------------------------------------------------------------------- e77e6fb256 | marksg07 | 2019-07-08 15:35:48 -0700 Add clua function to set waypoint (#1098) -------------------------------------------------------------------------------- 962a3eeff7 | Nikolai Lavsky | 2019-07-08 15:27:22 -0400 Remove dump_book_spells option Obsolete since the introduction of the spell library. -------------------------------------------------------------------------------- 98ea13e501 | Alex Jurkiewicz | 2019-07-08 15:26:04 -0400 Simplify logic -------------------------------------------------------------------------------- e98fbd9498 | advil | 2019-07-08 14:47:54 -0400 Adjust desolation fog machines It turns out that the desolation fog machines achieved their effect by running 200 times per turn (by being set with delay 0). After my previous commit causing delay to be max'd at 1, the amount of fog produced by these machines with the same settings is approximately halved. This commit tweaks the fog machines to try to get something more like the originally intended effect. They may need further tweaking from anyone who has a better sense how desolation fog should "feel". It's possible that the portal fog should be toned down more, as well. Needless to say, with a delay of 5 (2x per turn) these machines are a lot easier on the cpu than they used to be. This probably makes something like #948 not needed. -------------------------------------------------------------------------------- a9b13e7d51 | advil | 2019-07-08 14:47:54 -0400 Handle delay 0 values correctly in lm_trig.lua I think this code was infected by a classic lua gotcha: 0 does not evaluate to false, so the "or 1" here did not ever apply (since at least one of delay and delay_min/mix were guaranteed to not be nil). So if you set up a turn triggerer with delay 0, in `DgnTriggerer:turn` the countdown counter never got incremented and the loop there only exited because of the countdown_limit check. This means it ran 200 times, where the intended max appears to have been 10 for a single turn. (The 200 limit looks like it's something to do with apocalypserobin issues in the distant past, but I haven't figured out exactly under what conditions it was intended to apply.) Consequently, each fog machine in desolation ran 200 times per turn. This does a great job at getting lots of fog, but is really slow. From reading the logs it looks like no one realized this is how it was operating. I'll address desolation fog machines in a separate commit (since with this commit they will run only 10x a turn, and this turns out to mean putting out about half the fog.) Running 10x a turn is still heavy in the scale of things but in my testing it's negligible compared to the old 200x cap, so these changes may effectively fix the server cpu issues for salt even without further tweaking delay (which my next commit will also do). -------------------------------------------------------------------------------- 7da6c1453b | Alex Jurkiewicz | 2019-07-08 09:44:34 -0400 align braces -------------------------------------------------------------------------------- 9a978d2894 | Kyle Rawlins | 2019-07-05 12:22:18 -0400 Travis modernization (#1095) * Travis modernization * Enable ccache: travis can now save caches between builds (for every cell in the build matrix even!) so in the best case this massively speeds things up. Required some footwork for clang. * Move all apt stuff into .travis.yml, using a more complex build matrix and yaml references to cut down on repitition. This isn't quite as clean as the perl code it replaces, but doing this directly allows travis the option to do whatever caches / retries / etc it wants for apt. * Don't mess with compiler versions; xenial has modern enough compilers for c++11. * Switch the build matrix to use include rather than exclude, and prune it down so that clang isn't fully crossed with every env option. The choice of which builds to do with clang is a bit arbitrary and could be further tweaked if anyone has preferences. * Don't build non-needed contribs on BUILD_ALL for webtiles; this is covered by regular tiles builds and simplifies the dependencies. -------------------------------------------------------------------------------- e3eab0557c | advil | 2019-07-05 10:29:53 -0400 Fix join_strings args (amalloy) -------------------------------------------------------------------------------- 132cf697da | Stephen | 2019-07-05 09:48:27 -0400 Fedora build deps rename SDL* to SDL2* (#1076) The SDL build dependencies on Fedora are provided by the SDL2-devel and SDL2_image-devel packages. The current, non-"2", versions will cause the build to fail. [committer's note: copied PR message into commit] -------------------------------------------------------------------------------- f6c7d2a2e8 | Alex Jurkiewicz | 2019-07-05 09:44:36 -0400 Old Vampire cleanup (#1096) [committer's note: these braces are left over from b5eab8406da.] -------------------------------------------------------------------------------- 5b41c6f198 | gammafunk | 2019-07-04 16:44:40 -0500 Fix Death's Door HP at time of cast (Wise Wolf) Certain spells such as Death's Door, Tornado, and Dragon's Call do calculations of spell-power each turn for the purposes of spell effects. In the case of Death's Door, HP sanity checking code would immediately set hp to a value that didn't consider any spell-power bonuses that might be no longer active. This meant that HP would be lowered when using Sif's Divine Exegesis (due to loss of the Invocations bonus) or when swapping off e.g. a staff of death. This commit records the spell-power-derived HP at the time of casting and uses this for all subsequent turns of the current Death's Door duration. Changing the HP on subsequent turns is a result of the technical issue of implementing the sanity check for Death's Door and not part of the spell's intended design. This is a more general issue of how to handle spell-power for any spell with effects over multiple turns. Most duration-based spells, all summon spells, all conjurations that create a summon-like conjuration, and all cloud spells don't reconsider spell-power with every turn, which is inconsistent with how we do for Dragon's Call, Tornado, Borg's Vile Clutch, Searing Ray, and Olgreb's Toxic Radiance. If discouraging swaps is so important, we should not limit that restriction to a narrow subset of spells mainly for technical reasons. Clarity is the most important reason; most players probably don't expect that the former list of spells become worse over subsequent turns if they swap off enhancers. If we agree that encouraging swaps is bad, we should likely make *all* spells that have effects over time reconsider spell-power on each turn. -------------------------------------------------------------------------------- 47c397e050 | advil | 2019-07-04 11:26:09 -0400 Travis: Update mingw package names for xenial -------------------------------------------------------------------------------- 7d615089e7 | advil | 2019-07-04 09:52:29 -0400 Another travis dep... -------------------------------------------------------------------------------- 7b9cff83cf | advil | 2019-07-04 08:54:58 -0400 More travis dependency updates, this time for BUILD_ALL -------------------------------------------------------------------------------- 3302cd442e | advil | 2019-07-03 22:52:46 -0400 Try xenial (travis) This apparently could happen any day now anyways. -------------------------------------------------------------------------------- c1e67f237a | advil | 2019-07-03 22:13:21 -0400 More travis tweaking for local tiles -------------------------------------------------------------------------------- 4a4e93562d | advil | 2019-07-03 21:55:50 -0400 Remove old 3rd party sdl build from travis -------------------------------------------------------------------------------- 378ef55cfb | advil | 2019-07-03 18:06:12 -0400 Add local tiles zoom to key reference -------------------------------------------------------------------------------- a9e2c0f7d0 | advil | 2019-07-03 17:36:04 -0400 Let X be zoomed differently from main map, default to 60% In console, the `X` view is really useful in terms of getting a quick overview of the level map. However, it's always struck me as a bit useless / vestigial on tiles, because the amount of map displayed wasn't much different from what `x` displays, just with a different set of keys and behavior. The situation is slightly better on webtiles, where at least the message pane is hidden, but on local tiles it literally was not different. This commit allows the `X` view to be zoomed differently from the main map, and defaults it to 60% zoom (as opposed to default 100% zoom). You can also now change the zoom in game using {,}. On local tiles, ctrl-'-' and ctrl-'=' also work (as with the main view). To return this behavior to its previous state, set the (new) rc option `tile_map_scale` to 1.0. There are a few awkward issues remaining. In webtiles, some status messages printed using `mpr` are no longer visible in `X` mode, though prompts will work (see 65f37df). I'm not yet sure what the best solution for these is. Also, unlike local tiles, webtiles lets you zoom beyond what will actually display, because I couldn't figure out a simple way of getting this information back from the client (though there are certainly complex ways of doing this). -------------------------------------------------------------------------------- f8f69c1b1c | advil | 2019-07-03 11:32:00 -0400 Start local tiles on the current display Previously, it just started on display 0 regardless of where the focus was, which is pretty annoying if you have a laptop+monitor setup. This uses mouse location to find the current display, and opens the window there. (N.b. this may differ from OS-specific means of finding the "current" display, for example, Cocoa uses keyboard focus, not mouse focus. But SDL doesn't seem to provide an interface to any of these checks.) This is tested and works on os x, but it would be useful to know before a release if this works on windows/linux... -------------------------------------------------------------------------------- 4402b9e188 | advil | 2019-07-03 10:26:26 -0400 Improve zooming behavior (mainly for local tiles) This commit makes two changes: it adds an option that lets you zoom the dungeon view via a multiplier, rather than a number of pixels, and it lets this zoom be adjusted in-game via CMD_ZOOM_IN and CMD_ZOOM_OUT (previously only available for the small screen ui). The first change is just because using pixel values is not the most intuitive thing for most players (I've noticed), and is basically cosmetic if you already know how to change the tile size. In local tiles, these commands are bound to ctrl-'-' and ctrl-'='. I was unable to find a good binding for these commands in webtiles, so they are unbound (though they should work), but that's probably ok because browser zoom already works ok in accomplishing a similar thing. The zoom level is reset to its rc value on start and currently not saved. -------------------------------------------------------------------------------- 6b2be6b8c7 | advil | 2019-07-02 10:44:07 -0400 Don't let `X.` show completely inaccessible travel targets This fixes some aspects of 11771, though not the main issue reported there (which is more of a UI issue than a bug per se). This commit, for example, will prevent an off-level travel target from being shown in abyss, because off-level travel doesn't work at all there. -------------------------------------------------------------------------------- 3510def36b | Seve Monahan | 2019-07-01 19:36:37 -0400 Fix a text bug. (#11665) This fixes a text bug which occurred when a feared monster was hit by an explosion from a wild magic card. -------------------------------------------------------------------------------- e24419a6ad | advil | 2019-06-30 15:56:59 -0400 Use int32_t for a size check for string marshalling -------------------------------------------------------------------------------- 720adc72dc | advil | 2019-06-30 15:25:05 -0400 Save builder logs in save file for debug builds This specifically requires DEBUG_DIAGNOSTICS, since it only makes sense to enable if `dprf` is going to work. What this does is just store any logging that happens during levelgen into a hashtable in you.props. For a fully pregenerated build, this can increase the size of a save file by about 300k, so it may be non-trivial, but it's only going to be enabled in dev settings I think. If that bugs anyone it would certainly be possible to make it more conditional. This change is because scrutinizing these logs is stop 1 of fixing any seed divergence, and this commit will make it a lot easier to get at them, as well as deal with cases where the build logs are bigger than the default log line limit. -------------------------------------------------------------------------------- 36f2fa8efd | advil | 2019-06-30 15:22:07 -0400 Let store classes save strings >32k This is a bit of a hacky way to do this, in order to avoid any save compat issues; it adds a save-only type, SV_STR_LONG that is normalized to SV_STR once the store is loaded. -------------------------------------------------------------------------------- 225fefd530 | Alex Jurkiewicz | 2019-06-27 10:41:36 -0700 Mark some runed door vaults as no_tele_into (#1092) Replace an empty square in one with $ to simplify the KPROP logic. -------------------------------------------------------------------------------- fcb5e6da0e | advil | 2019-06-25 21:04:25 -0400 More specific documentation about des stability and tags [skip ci] -------------------------------------------------------------------------------- aec789570c | gammafunk | 2019-06-25 19:48:37 -0500 Clean up a condition -------------------------------------------------------------------------------- 09db7996fa | gammafunk | 2019-06-25 19:48:37 -0500 Sif Rework Part 5: Remove miscast protection As a passive, the protection was hard for players to reason about, since they had to know both a chance of successful protection based on their piety as well as the kind of miscast effect they might face should the protection fail. 100% protection was granted at 6*, but even then there tended to be a quite narrow set of relevant spells where the player might have some appreciable chance of successfully casting the spell. Repeatedly casting a high fail rate spell until successful is also tedious in terms of UI. The new Divine Exegesis active is basically an active ability version of miscast protection and provides access to more spells. Hence Sif no longer needs the passive. -------------------------------------------------------------------------------- e12f10fa2d | gammafunk | 2019-06-25 19:48:37 -0500 Sif Rework Part 4: Add a Divine Exegesis ability Sif currently has one active that uses piety, Channel Energy, an ability that becomes more about convenience than power as the game progresses since players get access to a large MP pool. This commit adds a powerful new active to help Sif be relevant at the middle and late portions of the game and to help cement her role as the more active magical god counterpart to the more passive Vehumet. The Divine Exegesis ability allows casting any spell in the player's library with 100% success and with a spell power bonus of 1.5 x Invocations skill in addition to any spell-power coming from Int, Spellcasting, and any training in the spell schools of the spell. Thus players can cast a spell that normally has a 100% fail rate due to no or little training in the relevant skills. Divine Exegesis is granted at 4* and has a high piety cost of 12, meaning several uses of the ability is likely to bring a player under 4*. The ability will be useful to a wide variety of spell using characters, granting limited access to high level spells that normally remain totally inaccessible behind high skill requirements. -------------------------------------------------------------------------------- 0c6bcda037 | gammafunk | 2019-06-25 19:48:09 -0500 Sif Rework Part 3: Remove Divine Energy As discussed in 3db0654b, Sif doesn't need two MP restoration abilities, and Channel Energy, which is now granted at 1*, is the better design. -------------------------------------------------------------------------------- 3db0654b3e | gammafunk | 2019-06-25 19:36:34 -0500 Sif Rework Part 2: Grant some abilities earlier Sif currently has two MP restoration abilities, Divine Energy granted at 1* and Channel Energy granted at 3*. Sif doesn't need two MP restoration abilities, and Channel Energy works better in practice than Divine Energy in terms of UI and in terms of effectiveness throughout the game. Hence we'll remove Divine Energy in a subsequent commit and move Channel Energy to 1*. Its piety cost remains the same. This commit also moves Forget Spell to 3* piety, since we'll be adding a new ability at 4*. -------------------------------------------------------------------------------- 26b8ecb3bf | gammafunk | 2019-06-25 19:27:57 -0500 Sif Rework Part 1: Piety on kills Sif Muna has some major design issues that weren't resolved the last time she was changed in version 0.19. This commit is the first in a series to change Sif's piety gain, her MP-related abilities, and to add a new high piety cost spell casting active ability. Sif's biggest issue is piety gain. She receives some piety from kills but also piety from training schools related to casting spells. The latter system has never worked well in practice. Players starting with spells want to train spell skills in order to get spells castable but generally want to switch to defensive skills or other suitably lower-cost skills afterwards. Sif currently tries to encourage training spell skills past this point to get gifts, but players trying to survive ignore this incentive for some time. The decision of whether to train spell schools for gifts is thus not an interesting one, since the answer is generally just to wait for them to happen naturally. This commit gives Sif normal piety on kills. We lose a distinct piety gain system, but her skill training system never worked well in either the full or partial versions. -------------------------------------------------------------------------------- 263dff2034 | advil | 2019-06-25 17:29:32 -0400 Tweak the beast_lair_carwin fix For vaults that call the `large` monster function unconditionally, let the tags in the des cache be adjusted. This will keep the behavior of randomization more like before the first fix. -------------------------------------------------------------------------------- 1dd085888c | advil | 2019-06-25 10:28:55 -0400 More des cache stability fixes Aiming for completely reproducible des caches, at least relative to a particular system. -------------------------------------------------------------------------------- c0fab7842f | advil | 2019-06-25 10:03:50 -0400 Fix a des cache random tag issue See f57072b2d696. I suspect this has been responsible for a whole bunch of issues where beast_lair_carwin maps have been showing up. -------------------------------------------------------------------------------- 8f2d45b691 | advil | 2019-06-25 09:54:37 -0400 Sort tags_string() again This is a regression from 80c1907ebbf6. -------------------------------------------------------------------------------- e8da9206dc | advil | 2019-06-24 14:10:52 -0400 Fix lua sorting in f98416c20 ...and demonstrate basic programming competence. (Though partial blame goes to lua scoping.) -------------------------------------------------------------------------------- 87df7205b4 | Alex Jurkiewicz | 2019-06-22 22:58:16 +0100 Don't ignore torment damage for Jiyva jelly spawns (#1088) And also Xom butterfly spawns. This exception dates back to when Jiyva was first introduced (in 0.6.0-a0-258-g6d7627cb65). It's an exception which isn't mentioned anywhere to the player and probably unnecessary in terms of balance for both gods. -------------------------------------------------------------------------------- d5110b030a | dplusplus | 2019-06-21 10:11:32 -0400 Add stop for Merfolk fake-mutation description -------------------------------------------------------------------------------- f09efd6d0b | Alex Jurkiewicz | 2019-06-21 10:11:03 -0400 Guard against out of bounds array access -------------------------------------------------------------------------------- 80245de385 | advil | 2019-06-20 12:20:11 -0400 Better handling for single-char case swaps This restores any locale-specific casing behavior for non-ascii characters that might have been removed by bf76ec3. -------------------------------------------------------------------------------- bf76ec32ab | advil | 2019-06-20 11:39:39 -0400 Don't let locale-specific casing affect ascii characters If a locale changes the upper/lower case correspondents of an ascii character, this would break many things. For example, as in #846, in Turkish (tr_TR.utf8), the lowercase version of I is a dotless i (ı). Since these case functions are used for all sorts of internal purposes (e.g. producing filenames from capitalized tile names), crawl would fail to even start. Though this issue only illustrated the first error, this is the tip of the iceberg and nearly every use of lowercasing was broken in this locale. I think, ideally, we'd be using two different case swapping functions: one for internal data (which is always ASCII) and one for UI-facing strings (which may be in arbitrary UTF-8 encodings). However, when I tried to adjust the API along these lines to fix Turkish, it turned out that there is not a clean distinction in crawlcode between these two uses and even stuff like the name functions which might be expected to be UI-facing are used for internal purposes as well. Based on my attempts, if this does come up for what little localization we have, it would be better/safer to let the ASCII behavior be the default for ascii characters and add in localized casing piecemeal. This commit also adjusts various hotkeys, and I'm not sure what impact this will have (it might be going too far); it could cause problems to e.g. users on a Turkish keyboard. -------------------------------------------------------------------------------- 27f0392e16 | advil | 2019-06-18 11:18:45 -0400 Fix some obscure sequence points that can be builder-triggered Noticed while auditing code, I don't know if this affects any actual seeds. -------------------------------------------------------------------------------- f98416c20e | advil | 2019-06-18 11:18:45 -0400 Don't use locale-sensitive string comparison for table.sort This is leading to seed divergence on different systems depending on locale, most immediately because some locales collate capital letters with their lowercase versions, and some don't. Lua uses locale-sensitive string comparisons unless you override it at build time, and it's not practical to set the locale in a way that avoids this (or at least I haven't managed). Capitalization isn't the only issue that could come up here, either, and it isn't appropriate for internal data to be affected by locale in this way (wtf lua), so this commit just exports c++ string comparison and uses that instead, which should use lexicographic byte ordering. -------------------------------------------------------------------------------- 6dd8730de2 | Chris Campbell | 2019-06-17 03:12:29 +0100 Update CREDITS.txt -------------------------------------------------------------------------------- ec079b9e98 | Chris Campbell | 2019-06-17 03:12:29 +0100 Change some uniques to use they/them pronouns Nessos, Xtahua, Fannar, Robin, Dissolution and Saint Roka now use "they", as do the demon/pan lords that previously used "it". Some random Gozag shopkeepers and the wizlab Cloud Mage/Hellbinder also use "they" instead of "it". -------------------------------------------------------------------------------- f4a770e8ca | Chris Campbell | 2019-06-17 03:12:29 +0100 Add handling for non-ancestor monsters with they/them pronouns -------------------------------------------------------------------------------- dba641b739 | Chris Campbell | 2019-06-17 03:12:29 +0100 Refactor Hepliaklqana ancester gender choice -------------------------------------------------------------------------------- 1ba1822a90 | Quinten Konyn | 2019-06-17 03:12:29 +0100 Add singular they pronouns for Hepliaklqana ancestors Updates Hepliaklqana ancestors to use "they" instead of "it" when selecting "neither" as their gender - implements handling for they/them pronouns and correctly conjugates applicable messages. [Squashed PR, added spacing fixes and rewrote commit message, closes #1080 - MarvinPA] -------------------------------------------------------------------------------- d57e52fea8 | ufshaikh | 2019-06-14 19:50:42 +0100 Remove possible placement of blowgun from vault (#1087) Should fix a bug where this vault places an item marked as removed. -------------------------------------------------------------------------------- be6fa4f6cc | advil | 2019-06-13 16:36:15 -0400 Faster starts_with implementation The previous implementation was really inefficient; this change is minor in the scale of things (about 1% of a pregen run, or 200-300ms total) but it's also a very easy fix. -------------------------------------------------------------------------------- 90a0943219 | advil | 2019-06-13 16:36:14 -0400 Cache the top three vault tags as bools These tags account for >50% of the `has_tag` calls, which over the course of a full pregeneration run really adds up -- this is nearly 5000000 calls for `has_tag`. This change shaves about 0.5s off a full (non-optimized) pregen run. This commit also adds some (disabled) profiling stuff for tags. For reference here's the call count for the top 7 tags, everything lower than this is <1%: 208774 ( 2%): vaults_empty 208774 ( 2%): vaults_room 439758 ( 5%): layout 550983 ( 6%): place_unique 1150916 (14%): overwritable 1243580 (15%): extra 2554449 (31%): minivault Total: 8144269 -------------------------------------------------------------------------------- 80c1907ebb | advil | 2019-06-13 11:40:59 -0400 Use unordered_set for tags, instead of set f1fd2d0243764f converted the tags API and internal representation from pure strings (that got split every access) into sets, to deal with order issues that were leading to seed divergence. However, it turns out that `has_tag` is called many, many more times than a sorted tag list is ever needed, and since `set` usually uses something like a binary tree internally, the costs of a search were substantially outweighing any gains from storing the tags in a sorted form. This commit converts to using unordered_set for better lookup time, which cuts about 50% of the time spent checking for tags. On a fulldebug build, this shaves at least 1s off a typical total pregen time. There is probably more to be gained as even with this change, the `count` call in has_tag is *still* about 1s total over a full pregen run. I've also slightly clarified some function names in this API. The cost of `get_tags` is negligable, about 1ms total. -------------------------------------------------------------------------------- 69c6a51588 | advil | 2019-06-13 09:45:21 -0400 Fix signed/unsigned comparison (gammafunk) -------------------------------------------------------------------------------- 4608c8fa30 | gammafunk | 2019-06-12 21:46:21 -0500 Use an existing item list for a vault Use the existing lists we have for aux armour in the dgn lua lib, since manually specifying these in vaults is error-prone. -------------------------------------------------------------------------------- 83a80d79a6 | gammafunk | 2019-06-12 21:45:19 -0500 Fix missing item result delimiters in some vaults -------------------------------------------------------------------------------- 19b5fbe486 | advil | 2019-06-12 19:09:11 -0400 Remove a redundant call Or at least I think it's redundant; it's called by load_level already, and I didn't spot any ill effects from removing it. -------------------------------------------------------------------------------- cdd7612e18 | advil | 2019-06-12 18:27:12 -0400 Disable pattern matching against levelgen output On a debug build, this was the heaviest single code path after luaV_execute itself, and this output consists entirely of debug output that should be hidden anyways. If someone had a use case for leaving these enabled I can try to come up with other solutions, but right now I'm not seeing anything crucial. -------------------------------------------------------------------------------- d84787c25e | advil | 2019-06-12 17:52:37 -0400 Simplify has_tag somewhat The vast majority of calls to this involved just a single tag. This gets called a *lot* during levelgen, so it was slowing down a full pregen run noticeably (as much as 10%). Even this change makes a big difference, though it is still not extremely optimized. `has_tag` itself is still not very fast because of the use of `set`. -------------------------------------------------------------------------------- 8bd77c7716 | advil | 2019-06-12 17:51:18 -0400 Remove debug code -------------------------------------------------------------------------------- 6870c0f642 | advil | 2019-06-12 14:08:02 -0400 Rewrite overflow vault selection code The old version brute-force searched through every 2-3 god combination among the gods selected for overflow vaults, with a somewhat indirect and complicated stopping criteria (with a goto, even) and a call to `find_maps_for_tag` for every combination it reached before the stopping condition. This is a huge search space and even with the stopping criteria it would still consider hundreds to thousands of combinations. On the other hand there are less than 20 vaults *total* that this code could even find. This rewrite flips things, and searches through the temple_overflow_n vaults themselves for compatible vaults rather than the space of god combinations. It's *much* faster. I expect this will change some seeds, since the order of rolls before was determined by bitvector order, and this will be determined by vault list order; also, where there are multiple vaults with the same god tags the weight calculation is different in this implementation. However, in my testing the results have been basically the same for most seeds. This code probably is biased towards 2-altar vaults over 3-altar vaults as is. -------------------------------------------------------------------------------- 9eff3895ba | advil | 2019-06-11 16:52:08 -0400 Optimize find_maps_for_tag somewhat This gets about 10x speedup on overflow temple selection (on a non-optimized build). It's still not great (since the overflow selection code is pretty insane, could be as many as 300 calls to find_maps_for_tag in my testing), but now according to my profiling the bottleneck isn't the use of set, but rather the construction of an iterator for each has_tag. It's worth noting that 99% of the calls to map_def::has_tag in the codebase have a single tag, and don't need this complexity. However, for typical uses I didn't see any obvious gain from optimizing them. -------------------------------------------------------------------------------- 6863ae89ae | Chris Campbell | 2019-06-11 19:31:13 +0100 Don't allow Vehumet to extend lightning rod range (#12007) -------------------------------------------------------------------------------- 24607be9ce | dplusplus | 2019-06-10 19:45:48 -0400 Fix hint for item description Commit 2b1cce4 introduced negated logic. [Closes #1082] -------------------------------------------------------------------------------- f7c4f17b88 | NormalPerson7 | 2019-06-10 19:41:34 -0400 Fix incorrect information in Aura of Brilliance description -------------------------------------------------------------------------------- 9fa23b7c36 | Ashley Raine | 2019-06-10 19:39:23 -0400 Removed barehanded attack prompt while in treeform -------------------------------------------------------------------------------- 1cce26a4d2 | Aidan Holm | 2019-06-09 15:27:51 +0800 Fix dispersal trap not appearing in help/search The lookup-help system searches by feature name, and the stash tracker menu builder adds feature tiles by matching against the feature name. This misspelling caused dispersal traps to be absent from the lookup-help system, and a black tile to be shown instead of the correct tile in stash search. Other menus, such as the ctrl-x menu, weren't affected. -------------------------------------------------------------------------------- 56ce5178b7 | Edgar Bering | 2019-06-07 20:14:29 -0400 Update default runrest stops for tweaked shaft messaging (vt) -------------------------------------------------------------------------------- 6d73c25c48 | advil | 2019-06-06 16:47:30 -0400 parens -------------------------------------------------------------------------------- 39a2186462 | Edgar Bering | 2019-06-06 15:55:20 -0400 Make the lajatang of Order's silver consistent This is a buff to Order, giving it the same max(vorpal, silver) as silver throwables. Order is rare, it's nice for its brand to not be so niche in its targets. -------------------------------------------------------------------------------- 536fa38985 | Edgar Bering | 2019-06-06 15:51:58 -0400 Nerf silver throwables Increasing the base damage by 30%, with throwing damage scaling, and combined with penetration and silver bonus damage made silver throwables overpowered (as feared in the initial commit). This commit tones them down; silver throwables now get max(vorpal bonus, silver bonus) bonus damage after the standard base damage, making them more consistent with other brands. -------------------------------------------------------------------------------- e138f7edaf | Edgar A. Bering IV | 2019-06-05 19:12:10 -0400 Update CREDITS -------------------------------------------------------------------------------- 4df2b1290f | advil | 2019-06-05 14:48:18 -0400 Fix the build -------------------------------------------------------------------------------- b853c62f84 | advil | 2019-06-05 12:23:21 -0400 Seed explorer: more flexible depth args (ebering) This doesn't accept a full depth spec, but does accept level or branch names in short form. There's also now a parameter `-show` that allows only showing some levels (you provide a list), though of course it still has to generate everything before the shown levels. For example: util/fake_pty ./crawl -script seed_explorer.lua -seed random -count 10 -show Temple -cats features -------------------------------------------------------------------------------- da47cbf8c3 | Ashley Raine | 2019-06-05 08:33:30 -0400 Add missing loading images to webtiles. -------------------------------------------------------------------------------- cc1054c7ca | Chris Campbell | 2019-06-04 22:48:38 +0100 Checkwhite -------------------------------------------------------------------------------- 86e7e0583b | Chris Campbell | 2019-06-04 21:16:19 +0100 Update easy_eat_chunks documentation (#12004) -------------------------------------------------------------------------------- 1d664f1849 | Chris Campbell | 2019-06-04 21:16:19 +0100 Mention noise in wand of iceblast description (#11902) -------------------------------------------------------------------------------- 6016cb4fb2 | Chris Campbell | 2019-06-04 21:16:19 +0100 Remove a misleading god message (#11220) Barachi being told "x welcomes you back!" when converting to a good god for the first time was supposed to be a reference to the species having originally been servants of the good gods, but is mostly more confusing than flavourful. -------------------------------------------------------------------------------- d14802f61f | Chris Campbell | 2019-06-04 21:16:19 +0100 Cap Shroud of Golubria power at 50 (#12000) Since it's only a level 2 spell and power just affects its duration rather than effectiveness. -------------------------------------------------------------------------------- f268315891 | advil | 2019-06-04 16:05:03 -0400 Clean up some outdated comments and a few other misc fixes. -------------------------------------------------------------------------------- 581a069569 | advil | 2019-06-04 15:27:39 -0400 Don't let monster digging allow out-of-los casting (11945, 11969) Since 5b187de83c, monsters that cast dig do so on a movement action (the burrowing mechanism), not usually as a regular spell. In fact, I couldn't get a monster to ever cast dig normally. Therefore, no monsters ever need to cast dig out-of-los via the normal spell code, and they definitely don't need to be able to cast arbitrary spells out-of-los if they have dig. I *think* that this is a pretty old bug, and only used to trigger under fairly rare conditions; a cacodemon still couldn't cast energy beam through a wall (though it would try). However, it would work through fog as reported in 11945. What changed recently is that LRD no longer destroys walls but is still area targeted, so that in some configurations a caster could attack out of los: > # > @#2 > # A LRD caster (e.g. a cacodemon) in this position could succesfully cast LRD on the wall in the lower left, damaging the player, instead of moving. In my testing a direct LRD cast, e.g. at the wall between the player, would still cast but have no effect or messaging, so even this case would still involve some monster wasted turns. Before the LRD change I think the caster could cast LRD succesfully on this square, destroying it in the process, so the setup conditions for the bug were much less common. Hence the recent reports of this bug. -------------------------------------------------------------------------------- 4219c681b9 | advil | 2019-06-04 14:39:11 -0400 Don't place needle traps for TRAP_RANDOM (11991 / Yermak) Possibly the result of an over-eager search & replace. -------------------------------------------------------------------------------- 86696efbda | advil | 2019-06-04 12:52:56 -0400 Add a bit more about how to run the seed explorer in comments -------------------------------------------------------------------------------- 0a26ff3fdf | advil | 2019-06-04 10:40:10 -0400 Add shop items to seed explorer This commit also changes &y and &Y to fully (un)identify items in shops; before they only dealt with items that are identified by type. -------------------------------------------------------------------------------- 4edc0ab2af | Edgar A. Bering IV | 2019-06-04 09:02:12 -0400 Revise Exsanguinate's description (Yermak) -------------------------------------------------------------------------------- 73b976d855 | Edgar A. Bering IV | 2019-06-03 22:22:31 -0400 New Vampire ability icons (CanOfWorms) [Closes #1043] -------------------------------------------------------------------------------- 2bae87b6a2 | Edgar A. Bering IV | 2019-06-03 22:22:18 -0400 Update the manual for Vampires Remove references to blood bottling and blood consumption. -------------------------------------------------------------------------------- 301a641611 | Edgar A. Bering IV | 2019-06-03 22:22:18 -0400 Increase costs for Vampire abilities Bat Form is really strong, in part because of its spamability and low MP cost. To rein it in, this commit adds a random stat drain of 2+binomial(5, 1/2) to the form. The choice of stat drain over skill drain is largely borne of a desire to avoid more uses of Drain. A secondary reason for the choice is that mutating the undead causes stat damage, so this is a flavourful choice. To make the choice of Vampire form strategic, instead of costly in tactical situations but otherwise trivial, revivification gives one level of temporary frail. This dovetails nicely with bloodless being frail---the frailty of undeath lingers. Exsanguination keeps its delay cost, but doesn't gain any other costs. The cost is paid only to reverse the process. -------------------------------------------------------------------------------- 7fb00627a5 | Edgar A. Bering IV | 2019-06-03 22:22:18 -0400 Give bloodless vampires the ability to regenerate, and frail Having Bloodless vampires not regenerate at all created either a tedium headache for the player or a technical headache automating the switch. After some testing and discussion it's clear that a better approach will be to inhibit regen for bloodless vampires when monsters are in LOS, coupled with some strategic costs for switching form. Bloodless is significantly stronger than Alive, outside of a few niches it is almost always advantageous to be bloodless. To balance out the two states, this commit makes bloodless Vampires frail, adding a -20% HP that stacks with mutations. A Vampire now must trade between a weaker form with lower regen but undead resists and bat form access, and a stronger form with fast regen and alive transmutations. The choice of frail over other possible downsides for bloodless was informed by a desire to not further overlap Vp with other undead. -------------------------------------------------------------------------------- 8336dd52f4 | Edgar A. Bering IV | 2019-06-03 22:22:18 -0400 Boolean vampire undead state Part 3 of a vampire revision. Add a new player variable to track whether a vampire is alive or bloodless. Use this in place of the non-functional hunger checks. Vampires now transition between Alive and Bloodless via abilities, Exsanguinate and Revivify. These are interruptable delays of length 5, with no MP cost, to make them tactically difficult to use. The abilities are implemented separately so that Exsanguinate can splatter some blood; it might also be desirable to allow Revivify to be done without a delay if a corpse is available. Changing blood state ends the active transformation. There is a check for exsanguinate and revivify to prevent their use in places where the resulting untransform would be lethal to the player. There are several places where undead holiness is checked because this is provided for all actors, but for players the effect takes into account vampire undead state; Vampires are always MH_EVIL. -------------------------------------------------------------------------------- 3edcaf6869 | Edgar A. Bering IV | 2019-06-03 22:22:18 -0400 Remove potions of blood These are no longer needed, as vampires do not drink blood in bottles anymore. -------------------------------------------------------------------------------- b5eab8406d | Edgar A. Bering IV | 2019-06-03 22:22:18 -0400 Remove blood bottling and blood drinking Part 2 of a vampire revision. This commit makes vampires foodless (but not drinkless) which has the appropriate effect on Gozag. Blood bottling and blood specific code are removed, as is the nutrition gain from melee attacks. This decouples vampires from the food system. [Committer's note: includes a fixup from gammafunk] -------------------------------------------------------------------------------- 54394cd99f | Edgar A. Bering IV | 2019-06-03 22:22:18 -0400 Reduce vampires to two blood states Part 1 of a vampire revision. Vampire's mix of "togglable undead" with "food micromanagement" left a fun concept in an obnoxious place. The presence/absence of blood allowed the player to (tediously) remain in the hunger state of their choice almost all of the time. Since the extremes of the spectrum provided the most impact on playstyle, players tended to focus on one or the other. This commit simplifies vampires to the two extreme states: Alive and Bloodless. The next commits will decouple vampire state from the food clock, replacing state change with a delay, and removing blood drinking and blood potions. -------------------------------------------------------------------------------- 65887bbefe | advil | 2019-06-03 22:12:35 -0400 More seed explorer command line options * add some shortcuts for looking at multiple seeds * let categories be specified from the command line * a few special subcases for items and monsters For example, to look at all artefacts on the ground or held by monsters in seed 1, you can now do: util/fake_pty ./crawl -script seed_explorer.lua -seed 1 -cats monsters items -mon-items -artefacts (caveat, shops are still not implemented) -------------------------------------------------------------------------------- b57f36d6e0 | advil | 2019-06-03 15:12:46 -0400 Actually commit the new seed explorer script... Partial repeat of the commit message from d7d9f274c4ec: Pretty basic right now, but you can run it with e.g.: util/fake_pty ./crawl -script seed_explorer.lua -seed 1 Supports multiple seeds, which can be random, and lets you pick the depth. In the future I will add more customization to what exactly is shown. -------------------------------------------------------------------------------- d7d9f274c4 | advil | 2019-06-03 15:08:39 -0400 Add a script interface to the seed explorer Pretty basic right now, but you can run it with e.g.: util/fake_pty ./crawl -script seed_explorer.lua -seed 1 Supports multiple seeds, which can be random, and lets you pick the depth. In the future I will add more customization to what exactly is shown. This commit also fixes a bug where scripts got doubled command line arguments, and changes script behavior so that crawl only outputs what the script does. (Also a few small cosmetic things.) -------------------------------------------------------------------------------- 6ad002bb79 | advil | 2019-06-03 13:34:30 -0400 Refactor the vault catalog test to use seed explorer code The comparison part is still specialized (and maybe could be generalized too) but otherwise the code for building the vault catalog is essentially the same as seed explorer code. -------------------------------------------------------------------------------- 8afd68e611 | advil | 2019-06-03 13:34:30 -0400 Refactor the seed explorer to do only one dungeon pass instead of iterating through the dungeon for each category. This turns out to only get a negligable speedup (about 2s for a pass through the entire generation depth) but the code is still probably cleaner this way. -------------------------------------------------------------------------------- 4b3246705c | advil | 2019-06-03 13:34:30 -0400 Refactor the seed explorer code into a module in dat/dlua Some minor cosmetic changes to the output while doing this, as well as some code cleanup, but the behavior shouldn't be majorly changed. -------------------------------------------------------------------------------- 2b49f6db23 | Edgar Bering | 2019-06-03 13:26:07 -0400 Fix another arena crash Closely related to the crash fixed in 39439d866, check for arena state before dispatching a behavior event. -------------------------------------------------------------------------------- 8e8615713e | Edgar Bering | 2019-06-03 11:49:24 -0400 Don't target chain spell arcs through actors (12003) In the target selection loop in cast_chain_spell, no check was made to ensure that the arc from source to target was not obstructed by an actor. As a result, the special-cased treatment of the caster was ignored occasionally. By tracing the ray for each potential target and checking for obstructions this problem is avoided. -------------------------------------------------------------------------------- 637bb3806f | advil | 2019-06-02 18:48:05 -0400 Add dungeon features to the seed explorer -------------------------------------------------------------------------------- 7ade4d1b3c | Edgar Bering | 2019-06-02 16:36:15 -0400 Add a penance prompt for potion quaffing (12001) Prompt when a player attempts to quaff a known god-hated potion. -------------------------------------------------------------------------------- c0b1d33993 | Edgar Bering | 2019-06-02 16:13:52 -0400 Add more teleport traps to grunt_tough_drop (11997) Now that teleport traps don't trigger out of LOS, this vault was not working properly. By adding teleport traps that give monsters room to move in the two hallways, a player passing through the hall will still cause the monsters to step on a permanent teleport trap. -------------------------------------------------------------------------------- 94936e539c | Chris Campbell | 2019-05-31 19:10:01 +0100 Fix ?amnesia reversed logic (#11998) -------------------------------------------------------------------------------- ee2287cf43 | Chris Campbell | 2019-05-30 20:45:54 +0100 Update WJC powers description (#11994) -------------------------------------------------------------------------------- c54ef59892 | Chris Campbell | 2019-05-30 20:45:54 +0100 Remove an obsolete Donald line (#11994) -------------------------------------------------------------------------------- 4de66ed42b | advil | 2019-05-30 09:00:24 -0400 Properly reset tags on vaults rooms The initial tag change here was persisting on vault definitions until the next time crawl restarted, leading to seed instability in some cases. In the seed this came up in, serial_ice_m placed in D and mirrored horizontally. This vault is tagged with vaults_empty, and on vaults 4 was getting the no_hmirror tag (among others) even though it didn't ultimately place, and this was sticking around to any future games in the same crawl session that tried to place serial_ice_m, leading to the seed diverging after that point. (The more obvious divergence from the failure to hmirror in this seed came much later in _prepare_water, because the deep water positions in the map were affected by whether this vault mirrored or not.) -------------------------------------------------------------------------------- 3ea9d24d98 | advil | 2019-05-30 08:57:35 -0400 Fix some missed random call sequencing resolve_range is just a wrapper on a random call, and so these calls need sequence points to be stable across compilers. (See cdddf7c89e9) -------------------------------------------------------------------------------- 39439d866b | Edgar A. Bering IV | 2019-05-29 22:00:19 -0400 Fix an arena crash behavior_event only makes sense in non-arena mode, but was being called whenever an eldritch tentacle timed out -------------------------------------------------------------------------------- 9fa3ae0aaa | NormalPerson7 | 2019-05-29 21:37:44 -0400 Mention draining gaze's healing effect Draining gaze heals ghost moths and eyes of draining for the amount of MP drained by the gaze. This commit adds a note to this effect to the draining gaze spell description. Note: orange crystal statues also cast this spell, but they don't get healed from it because they cannot regenerate HP. -------------------------------------------------------------------------------- 4cc88bcadc | NormalPerson7 | 2019-05-29 21:37:19 -0400 Update vine stalker description (11979) -------------------------------------------------------------------------------- 78e9d4e317 | Alan Malloy | 2019-05-29 10:24:37 -0700 Make Tomb stop printing warnings when in debug mode It was placing 3 exit stairs on purpose and relying on the dungeon builder to trim them down to 1 branch exit. Instead, it now places just one. -------------------------------------------------------------------------------- 78adf7823c | Alan Malloy | 2019-05-29 09:57:10 -0700 Remove unused variables in random_picker::probability_at -------------------------------------------------------------------------------- 0e0cebd0f3 | advil | 2019-05-27 19:18:38 -0400 Have fake_pty respond better to SIGINT and SIGTERM ...by killing the subprocess. The point of this is to allow ctrl-c at the command line to work. This is pretty hacky but it's better than nothing. If someone has any idea why SIGHUP won't work, let me know. -------------------------------------------------------------------------------- 1748d93fb5 | advil | 2019-05-27 18:48:55 -0400 Support random seeds only in seed explorer (alexjurkiewicz) -------------------------------------------------------------------------------- c1c896e988 | advil | 2019-05-27 13:24:17 -0400 Seed explorer improvements * Estimate OODness based on probability of generation at the relevant depth. There's also currently disabled code for indicating builder OOD rolls, which I found to be less useful. The supporting lua calls are available for player use in moninfo objects. * Highlight "non-native" monsters, basically things placed by a vault that don't usually show up in the branch. * Handle dancing weapons better. -------------------------------------------------------------------------------- a4d96b6e6e | Brendan Hickey | 2019-05-26 12:35:04 -0400 Checkwhite fix -------------------------------------------------------------------------------- b5a06e84e3 | Brendan Hickey | 2019-05-26 10:42:38 -0400 Fixup vampiric brand messages to remove hunger references. -------------------------------------------------------------------------------- c4ac1b27a8 | Brendan Hickey | 2019-05-26 10:37:12 -0400 Don't prompt when unwielding vampiric weapons. -------------------------------------------------------------------------------- 0f23e7d634 | Brendan Hickey | 2019-05-26 08:55:53 -0400 Remove vampiric brand hunger cost. About ten years ago the vampiric brand increased your hunger clock. This led to tedious weapon swapping. We replaced it with an onwield hunger cost to relieve this obnoxious chore while maintaining a thematically appropriate cost for using a powerful brand. With crawl moving away from hunger as a forward progress clock there isn't a good reason to leave this in place. -------------------------------------------------------------------------------- 57161393b2 | advil | 2019-05-25 16:18:03 -0400 Some cosmetic fixes for the seed explorer -------------------------------------------------------------------------------- 0dde086dc9 | advil | 2019-05-25 15:37:32 -0400 Add a basic lua seed explorer This prints out information about vaults, monsters, and items so far; it is packaged as a test that prints these for the first 5 seeds (replacing a less interesting test), but is fairly configurable if you're willing to edit the lua. To run it directly, you'll need to use util/fake_pty (which may need to be built), e.g.: util/fake_pty ./crawl -test seed_explorer.lua This also introduces a few lua support things that were missing that might be of general interest, especially monster inventory (which is easy now that all monster items are id'd). -------------------------------------------------------------------------------- bc69b92bc9 | NormalPerson7 | 2019-05-25 20:23:40 +0100 Don't allow players to stop monster monstrous menagerie with OTR (11990) (#1073) The code for monsters casting monstrous menagerie uses the same code path as for players, which means an extra check that the caster is the player is required before asking the player whether they want to cancel the spell. -------------------------------------------------------------------------------- 53aee78b01 | Edgar A. Bering IV | 2019-05-24 14:13:09 -0400 Remove vestigal references to needles (11986) -------------------------------------------------------------------------------- 793c10c1f6 | advil | 2019-05-24 11:30:38 -0400 Better messaging when hep ancestor gets lost in abyss (11973) Addresses something mentioned in 11973: On abyss teleport (and some other cases that I don't fully understand; this happens sometimes but not often on abyss area shifts as well) the ancestor gets banished for a short period of time, but there was no messaging for this. In other cases the ancestor gets put into transit and there's also no messaging for this case; the only difference was that for the former recall isn't available. This commit ensures messaging if the banish case happens, and no messaging otherwise. This does the messaging at a relatively low-level point, so it could be that there will be cases of double messaging (but I have not found them in my testing). N.b. I'm not actually sure it makes gameplay sense to banish the ancestor on abyss teleport or even sure if this is intentional, so it might be worth trying to put the ancestor in transit for that case too. But it does fit with the randomness flavor of the abyss, I guess. But even with that change this lower-level code might still be triggered in complicated circumstances, and the ancestor really shouldn't ever be banished without messaging. -------------------------------------------------------------------------------- 0de8e755f4 | advil | 2019-05-24 11:22:44 -0400 Test a theory about hep abyss crashes This is a conceivable way for hep ancestor items to get copied to the grid, if somehow the ancestor becomes invalid before this call but cleanup of the ancestor hasn't happened yet (since held_by_monster will return false if the monster that was holding the item isn't valid). If it trips, this ASSERT will give a more direct line on what the setup conditions for this situation might be, which I still don't understand. -------------------------------------------------------------------------------- be4061de67 | advil | 2019-05-23 17:17:56 -0400 Fix another abyss gozag gold detection case -------------------------------------------------------------------------------- 4488db6de0 | advil | 2019-05-23 16:27:19 -0400 Clean up and improve gozag gold detection This consolidates a bunch of gozag code and removes an ASSERT that I think was over-eager, firing when update_item_at doesn't lead to a gold pile in the stash tracker. There had previously been two versions of this code, and only one had the check, but it doesn't seem so obvious to me that update_item_at should really be expected to make any arbitrary gold pile visible in the stash. This commit also makes gold detection work in the abyss beyond the initial levelgen. -------------------------------------------------------------------------------- ff863c23c4 | advil | 2019-05-23 10:39:30 -0400 Don't crash on gozag + gold in grunt_nemelex_the_gamble Unobtainable items don't appear in the stash tracker, and calls that try to add them to it silently fail. The only remaining "unobtainable" items are in grunt_nemelex_the_gamble; these are marked unobtainable so that if the player rolls the peril room they don't show up in the stash tracker. However, Gozag's gold detection code didn't take this flag into account, triggering an ASSERT on the expectation that any gold generated at all would be trackable. This isn't the most elegant solution, but it fixes the crash. I think what would be better is for (i) "unobtainable" to be removed, since it appears to have been deprecated for everything except this vault some time ago, and (ii) for this vault to do something like destroy the items if the player lands in the peril room. -------------------------------------------------------------------------------- 1cdb867ce8 | cut1less | 2019-05-23 10:18:09 -0400 Don't fully describe unthrowable missiles -------------------------------------------------------------------------------- 4011b8c8ab | cut1less | 2019-05-23 10:18:09 -0400 Simplify missile description cases Previously, descriptions for projectiles were based largely around whether they had a damage value associated with them, under the logic that "inherent missile damage => throwable missile". This made life easy in dealing with the old needles and with regular launcher missiles. However, it led to: * the sling bullet description having lots of throwing information (despite sling bullets not being throwable) and * the throwing net description lacking the fact that a net's delay is lowered with Throwing skill With the changes to throwing missiles, we can now just focus on throwable-ness to fix these issues and more. -------------------------------------------------------------------------------- 5b3daab8ba | Edgar A. Bering IV | 2019-05-22 21:45:50 -0400 Don't place traps under vault placed items and monsters (11983) Randomly placed monsters and items do not place on traps, however the dungeon builder was placing random traps under vault placed items and monsters occasionally. This led to runes on dispersal traps as the worst outcome, but the asymmetry was occasionally noticed for other trap types too. Vaults that wish to have monsters or items start on a trapped grid will need to request this explicitly. -------------------------------------------------------------------------------- b8b2abe488 | Alan Malloy | 2019-05-22 17:10:14 -0700 Make it harder to accidentally waste ?amnesia (Jarrodb, #11985) -------------------------------------------------------------------------------- 4006481e62 | Alan Malloy | 2019-05-22 17:10:14 -0700 Simplify item weights -------------------------------------------------------------------------------- 1a3e1d35ff | Alex Jurkiewicz | 2019-05-21 18:21:40 -0400 Remove vestigial duplicate wrath timer -------------------------------------------------------------------------------- e062c78e24 | Edgar A. Bering IV | 2019-05-21 16:31:06 -0400 Remove mentions to obsolete items from options_guide.txt -------------------------------------------------------------------------------- 4452427412 | Chris Campbell | 2019-05-21 21:28:34 +0100 Allow holy wrath weapons to be cursed It was an almost invisible piece of flavour, since no external sources of cursing still exist other than initial generation, and it resulted in them being unable to be cursed under Ashenzari without any feedback as to why. -------------------------------------------------------------------------------- 13fca185ac | NormalPerson7 | 2019-05-21 16:11:41 -0400 Fix a default note_messages -------------------------------------------------------------------------------- 48f6bceb67 | NormalPerson7 | 2019-05-21 16:11:41 -0400 Fix a default force_more_message This was broken by the shaft message change in 52ca42d. -------------------------------------------------------------------------------- ad4687c37d | Edgar A. Bering IV | 2019-05-20 09:54:54 -0400 Replace a missing word -------------------------------------------------------------------------------- 52ca42d3ec | Alex Jurkiewicz | 2019-05-19 22:59:41 -0400 Improve shaft messaging Always print the number of floors, so the message is consistent between falling one or multiple levels. -------------------------------------------------------------------------------- 6f6d0e6ea3 | Doesnt | 2019-05-19 22:42:58 -0400 Fix Avatar Song displayed success rate -------------------------------------------------------------------------------- 442a7a25c4 | Joshua Gelbard | 2019-05-19 20:40:20 -0400 Add misc. evocables section to known items menu Steal the space on the '\' menu formerly taken up by known spellbooks and give it to misc. evocables (previously grouped under "Other"). Now that the spell library exists, a list of your already-recognized books is pretty useless. Individual switches for evocables like lamps of fire will make much better use of that space. "Unknown items mode" is untouched -- evocables still won't appear there, and unknown spellbooks will still get their own category. Issues: check_item_knowledge() has received patchwork additions over the years and is creaking with duplicated code. This commit doesn't help, but it doesn't make it that much worse -- there were already four seprately-treated vectors of item_def pointers; now there are five. (My first attempt at making this change started with a refactor, but the result wasn't enough of an improvement to justify the diff, so I've gone with the polar opposite and followed the existing pattern exactly.) [Closes #1025] -------------------------------------------------------------------------------- faf41a374d | Joshua Gelbard | 2019-05-19 20:23:57 -0400 Let players disable autopickup from the drop menu Add a new "drop-and-disable-autopickup" mode for the drop menu, toggled with '\'. Items selected in this mode are marked with a '*' instead of a '+' and have their autopickup disabled when the menu is exited. This turns "drop unwanted item; disable autopickup for unwanted item" from a two-menu operation into a one-menu operation and makes the most vital bit of the '\' menu available in a more convenient location. InvEntry and SelItem each get a new field to record whether they're selected "normally" or in this new special way, and InvMenu gets a field recording which selection mode it's in. InvMenu now overrides ::pre_process() and ::select_item_index() to handle the new mode. Also, assorted cleanup/bugfixes: * Fix '_' on the drop prompt not actually bringing up the help menu. * _invent_select can't return PROMPT_GOT_SPECIAL, so don't check for it. * Replace anonymous you.force_autopickup ints with an enum * Add helper functions for easier access to you.force_autopickup * Demystify magic -1 to OSEL_ANY in a few places * Remove unused define PROMPT_INAPPROPRIATE -------------------------------------------------------------------------------- 97e3104241 | Joshua Gelbard | 2019-05-19 20:12:24 -0400 Fix '+' and '-' not being PGDN and PGUP as claimed Previously, menus using the default more prompt all claimed that '+' was pagedown and '-' was pageup, which was mostly false. This commit changes that to be mostly true and alters the prompt where it's not. On the drop, pickup, quiver, item knowledge, and wield menus, '-' has some other meaning, so those are the ones where '-' isn't listed as a usable pageup. '+' as pagedown should work everywhere. [Closes #1013] -------------------------------------------------------------------------------- fcedfb35f7 | Joshua Gelbard | 2019-05-19 19:37:41 -0400 Add a menu shortcut to select last unequipped item In equipment-related menus and prompts, make ';' (semicolon) an alias for the letter of the player's most recently unequipped item. The goal of this change is to reduce the amount of time the player spends scanning through menus to remember which item is where. Examples: * Wear-IDing a good cloak ('f') and dropping your old one: Wfd; * Wear-IDing a bad cloak ('f') and re-equipping the old: WfW;d; * Swapping to a utility ring ('g') for a certain enemy, then going back to your usual ring: Pg any time a color is correctly terminated. (Luckily it seemed to mostly be getting fixed up on append calls? I found it because the fixup will eat whitespace, potentially messing with preformatted text.) -------------------------------------------------------------------------------- 0a1bb4fe8a | advil | 2019-01-15 18:30:54 -0500 Handle ?/ better, generalize range "key" to webtiles From previous commit messages for this change, I gather that the assumption was that if mon_owner is null, there is not an actual corresponding monster. This doesn't seem to be correct -- mon_owner is null if this codepath is called on an item (does this ever happen?). The best check for whether this mons_info corresponds to a real monster is whether the position is in bounds (and crawl_state.need_save for whether the player is in a game). I moved the text explaining the hex percent and range out of describe_spellset, so that it is visible on webtiles. I *think* that this is the only way this code path is called when showing monster spells; otherwise, describe_spellset is (or maybe isn't any more?) called on items. -------------------------------------------------------------------------------- 0b8caf7e58 | advil | 2019-01-15 18:30:54 -0500 Generalize range string logic for webtiles This computation got complicated enough that it should only be done in one place. -------------------------------------------------------------------------------- 4d4c92e218 | advil | 2019-01-15 18:30:54 -0500 Various small tweaks * explain red coloring in the key * don't show range for spells with SPFLAG_SELFENCH, which are basically not treated as ranged on monsters. In practice, this may exclude only invisibility. (N.b. all monster spells that have this flag and could in principle be cast on allies have an _OTHER counterpart anyways. SPELL_INVISIBILITY_OTHER doesn't seem to be used.) * code formatting -------------------------------------------------------------------------------- 99592df15c | Edgar A. Bering IV | 2019-01-15 18:30:54 -0500 Remove ranges from Haste and Might Monster AI always uses these spells as self enchants, with Haste Other and Might Other existing for monsters to affect allies. The ranges are vestigal from when these were player spells, and cause bogus displays of spell range for monsters with these spells. -------------------------------------------------------------------------------- 8ac9f62d1d | Edgar A. Bering IV | 2019-01-15 18:30:54 -0500 Add spell ranges to monster info in webtiles -------------------------------------------------------------------------------- 32e13164b6 | Edgar A. Bering IV | 2019-01-15 18:29:16 -0500 Only display ranges in monster descriptions They're not needed in book descriptions, a player who is unfamiliar with a given spell and considering a book item will want to know all about it, not just its range. -------------------------------------------------------------------------------- e15ba6666c | Edgar A. Bering IV | 2019-01-15 18:29:16 -0500 Improve colour handling for spell ranges The first implementation did not parse the colours into the formatted string at the moment of adding (a gotcha with formatted_string::cprintf). Here we replace the formatted_string::cprintf call with an operator += concatenation. This makes spell displays render in webtiles again. -------------------------------------------------------------------------------- c9aa113a4f | Aidan Holm | 2019-01-15 18:29:16 -0500 Right-align hex-chance in monster spell list -------------------------------------------------------------------------------- d70207d22c | Aidan Holm | 2019-01-15 18:29:16 -0500 Use colour to differentiate in/out-of-range -------------------------------------------------------------------------------- 6d93017843 | Aidan Holm | 2019-01-15 18:29:16 -0500 Add hex-chance and spell-range explanatory text -------------------------------------------------------------------------------- ab26df7839 | Sandman25DCSS | 2019-01-15 18:29:16 -0500 Display range for spells in monster description (aidanh) Please see https://crawl.develz.org/tavern/viewtopic.php?f=8&t=23901 No colors yet, I am not sure how to do it properly. -------------------------------------------------------------------------------- 00c90a0c22 | Edgar Bering | 2019-01-15 13:01:39 -0500 Save compat for c89a89d9 (11829) -------------------------------------------------------------------------------- e59bbb1e92 | Edgar A. Bering IV | 2019-01-15 00:29:11 -0500 Display (immune) in monster hex chance in webtiles Commit b5b85be8 added this functionality to console and local tiles. -------------------------------------------------------------------------------- 3a644c02d4 | Edgar Bering | 2019-01-14 18:30:48 -0500 Remove grate traps Now that traps are revealed grate traps do less than what they previously did, in that a spoiled player knows to simply take another stair. Spoilers or not, once the grate is down a player can use the grate and a smite targeted spell to kill monsters at no risk to themselves. -------------------------------------------------------------------------------- c89a89d96d | Edgar Bering | 2019-01-14 18:27:38 -0500 A Klonw Kar trap for Zot Generalize the basket of spiders trap to be a monster-drop trap. Then add the trap to Zot but have it drop Killer Klowns. Also change the snake version to drop a mix of mambas and mana vipers. The basket traps work ok as tactical terrain even with traps revealed, since a monster triggering the trap will still release a player-targeting effect (more monsters). -------------------------------------------------------------------------------- aad00d04af | gammafunk | 2019-01-14 15:54:16 -0600 Changelog through 0.23-a0-709-gaefc81b7b9 -------------------------------------------------------------------------------- aefc81b7b9 | gammafunk | 2019-01-14 02:30:37 -0600 Update loot in a Gauntlet exit vault The vault nicolae_gauntlet_exit_dead_adventurers is themed as having the corpses and loot of four dead adventurers that failed to defeat the minotaur. The loot items are appropriate for the archetypes character represented by the given corpse. For example, a spriggan stabber with a short blade weapon and a hexes randbook. Unfortunately the current version of this vault doesn't place very good loot, despite placing more items on-average compared to the other Gauntlet exit vaults. It uses mostly normal quality, common items with only a few choices to represent weapons and armour, and with few consumables on-average. This commit revamps the loot to place better quality items with much more variety, but still keeping the theme of each adventurer to the best extent possible. Item quantities are randomized so that the min, max, and average numbers of items placed are very similar to the other Gauntlet exits. More consumables, jewellery, evokables, and aux armour items are also introduced. The Dwarf Earth Elementalist in heavy armour corpse became a Felid Transmuter corpse with items appropriate for Transmutations and unarmed combat, since heavy armour was already very well represented in the loot. -------------------------------------------------------------------------------- b957daca86 | gammafunk | 2019-01-14 02:30:37 -0600 Use runed clear doors in Gauntlets For arenas that use rune doors, make these transparent. They especially make sense in the Gauntlet, where the rune doors are meant to be used by the player to control monster movement. -------------------------------------------------------------------------------- 4e6f924471 | gammafunk | 2019-01-14 02:30:37 -0600 Four 9x9 arena vaults for Gauntlets These are subvaults used as 9x9 arenas. I'm hoping to have at least 20 of these before release, and this puts us at 18. One vault with a narrowish two-way passage that has lots of corners to maneuver around, one with three porous chambers, and two mazey arenas with randomized pathways. -------------------------------------------------------------------------------- c92f3ec585 | gammafunk | 2019-01-14 02:02:01 -0600 Decouple chances for Gauntlet loot upgrades Make two independent chances for upgrading the aux armour and jewellery loot item slots instead of one chance used for both. Add some comments to the loot setup function. -------------------------------------------------------------------------------- 0e654d264d | Edgar A. Bering IV | 2019-01-14 02:23:19 -0500 Really remove Labyrinths (11820) Mark labyrinths as "unfinished" in the branch_is_unfinished function, joining Dwarf, Blade, and Forest on the list of removed branches. This prevents a crash when lookup-help attempts to display an entry for the removed branch. -------------------------------------------------------------------------------- 7fdf9c5c27 | Edgar A. Bering IV | 2019-01-13 21:36:35 -0500 Add clear doors to some Elf layouts. A longtime TODO of infiniplex's, now implemented. This commit adds them on the '~' glyph with a KFEAT; it is hoped that in the near future the KFEAT line can be deleted and '~' made to default to closed_clear_door. -------------------------------------------------------------------------------- df2d5e0dd9 | NormalPerson7 | 2019-01-12 12:29:28 -0500 Improve text when gaining/losing god abilities and on ^ screen Improve the text printed to the message log when gaining or losing a piety level and the text displayed on the god overview screen (^) such that: - all text printed when the player gains a piety level contains the word "now", and is written either with "can", "will" or similar, or in the continuous present tense, e.g. "Kiku is now protecting you from torment"; - all text printed when the player loses a piety level contains the words "no longer", and is written with either "can" or "will" or something similar, e.g. "Kiku will no longer protect you from torment" - all text on the ^ screen uses either "can" or the present tense, e.g. "Kiku protects you from torment". This removes all poor constructions involving the use of the continuous present on the ^ screen, and the continuous present without the word "now" on gaining abilities - an example of this was "Vehumet is aiding your destructive magics", which becomes "Vehumet is now aiding ..." on gaining 2* of piety, and "Vehumet aids ..." on the ^ screen. This is done by adding a new variable "general" to the god_power struct, to differentiate between the text on the ^ screen and the text on gaining the ability, which were previously the same unless the "You can " construction was being used. Also add messages for when Trog begins granting ammunition gifts and when Jiyva begins granting corrosion resistance. Also break several lines in the definition of the god_powers vector that went beyond 80 characters because multiple parameters were placed on a single line, or that did or did not go beyond 80 characters and had more than two parameters split over two lines. This aims to improve readability. Finally, add a description of the "You can [now /no longer ]" construction used for some god abilities, that is implemented in a different way, to religion.h. -------------------------------------------------------------------------------- d214142378 | gammafunk | 2019-01-11 23:31:35 -0600 Stop dragon cruelty in a vault (howmanybefore) Dragons were sealed behind clear stone walls in orc_legates. Items could generate there and it was a teleport closet. We could mask this area with no_tele_into and no_item_gen, but it's more interesting to add clear runed doors and spruce up the dragon collection a bit, so do that instead. -------------------------------------------------------------------------------- d76f34b972 | Edgar A. Bering IV | 2019-01-11 22:24:16 -0500 Remove an extraneous article Zap names are not expected to contain an article, so duplicate articles were appearing. -------------------------------------------------------------------------------- 01d8f91dd3 | gammafunk | 2019-01-11 20:18:42 -0600 Increase killer klowns' club enchantment Setting the plusses of a mon_weapon_spec disables further property settings for the given weapon, so these were getting fewer enchantment than intended. Even with the usual chance for extra enchantment, it would have been a low average with a high max. Instead set the enchant range from 8 to 12 using one roll. -------------------------------------------------------------------------------- ba807d007e | gammafunk | 2019-01-11 20:18:35 -0600 Slightly more klown pies Increase the chance of a klown throwing a pie on one of its normal actions from 8% to 12%. Play-testing has shown them to be pretty stingy with pies, which, honestly...they should be more willing to share. -------------------------------------------------------------------------------- 260fa776c4 | gammafunk | 2019-01-11 19:21:18 -0600 Use the right spell flags for Throw Klown Pie This previously used flags appropriate for a smite targeted spell, which would have Klowns throw pies without the knowledge gained from using a tracer. -------------------------------------------------------------------------------- 39acc7ac85 | gammafunk | 2019-01-11 18:01:36 -0600 Rework trap and monster placement on Zot:5 This commit changes the hall_of_Zot vault on Zot:5 to rework some placement distributions and logic. The monster count is unchanged and the monster distribution is very similar to before, but a lot of the placement logic is refactored. The changes to trap placement are more substantial, as described below. In general, glyph usage and DES statements have been refactored and comments have been updated. Previously, the vault placed about 36 mechanical traps on-average, additionally placing around 7 each for alarm, dispersal, teleport, and Zot traps, for an average of 64 traps in total. After this commit, the newly reworked net traps are the only mechanical traps to place in the vault, and their numbers are brought inline with the non-mechanical traps. We increase the number of traps for the remaining types to about 9 on-average for dispersal, net, teleport, and Zot, reducing the number of alarms traps to about 5.5 on-average. Alarm traps have a big effect on the vault as a whole when activated, so it's good to keep numbers of these relatively small. The total average number of traps is now about 41.5. The trap and monster placement logic has been changed to not rely on fixed locations. In the old system, traps were scattered over many fixed locations throughout the lower wings. In the upper wings, monsters sets and traps were likewise scattered over fixed locations, but these were fewer and more central. The new placement works similarly for placing monsters, just without relying on fixed locations, and traps are allowed to place in more locations in general. For the upper wing, we use a large central square over which we place the guaranteed monsters and monster sets. In each upper and lower section of both wings and in the orb chamber, we now guarantee a minimum number of traps. Previously, there was about a 33% chance to have a difficult trap (alarm, dispersal, teleport, Zot) in both single tile passages leading to the two lower wings. With the new trap placement, this chance of having both entrances blocked by such traps is reduced to about 21%. There was previously a 19% chance to get one or more orange crystal or obsidian statues on the two outermost tiles of the line of floor connecting a lower wing to its upper wing. This could only happen in one wing and was based on another random roll used to determine the trap chances for the lower wing entrances. This logic has been simplified, so there's now a lower but independent chance for generating statue monsters each wing. This makes the overall chance of seeing at least one statue monster at any of these locations be 29%. Additionally traps can now place at these locations as alternates to the statue monsters, using the same low chance. Finally, since we carefully control trap placement, I've disabled level trap generation inside the vault that would place additional traps. For the monster sets, the set for killer klowns has been updated to give them all of the extra weight, as is already done for the ancient lich and orb of fire sets. Previously some of that extra weight was given to 0 (normal level) spawns. Hence the number of klowns placed on-average in the vault is up by a bit more than one, but the overall monster count is the same. -------------------------------------------------------------------------------- f95311e5ea | Edgar Bering | 2019-01-11 16:48:26 -0500 Remove a possible teleport closet (11823) -------------------------------------------------------------------------------- 7bcdfeb6a4 | Edgar Bering | 2019-01-11 11:58:49 -0500 Correct a typo in monster pie effects -------------------------------------------------------------------------------- 178e5287f3 | Edgar A. Bering IV | 2019-01-11 00:35:40 -0500 Remove mechanical traps from Tomb Tomb used the '~' des glyph, one of the last places it is used regularly. All uses have been replaced with kfeats, chosing player-targeting traps (alarm, net, zot, and dispersal) exclusively. The corridor blocking traps in Tomb:1 do not include dispersal traps in their list for sanity's sake. -------------------------------------------------------------------------------- 2124650b06 | Edgar A. Bering IV | 2019-01-11 00:35:08 -0500 Adjust ossuary_the_hunt_dpeg This ossuary has not worked for some time: zombies can't open doors. The revelation of traps has made it even worse, as the "nasty" trap mode can just be avoided by stepping around them. The doors are removed and trap selection is revised, removing most of the mechanicals. Net traps are now player-targeting, so are the lone mechanical trap that is kept. -------------------------------------------------------------------------------- 0aaec43e4e | Edgar A. Bering IV | 2019-01-11 00:35:08 -0500 Adjust trap usage in some ossuaries Now that traps are known, decorative traps can be removed. Corridor mechanical traps are kept, since at the depths ossuaries generate they provide obstacles to retreat. -------------------------------------------------------------------------------- b05804236e | Edgar A. Bering IV | 2019-01-11 00:31:32 -0500 Zot-ify net traps Part of an incremental push to fully phase out mechanical traps. The other mechanical trap effects don't make much sense to convert to tactical terrain (flavoured damage), but nets do. This commit does not return nets to dungeon generation, so these are currently limited to the vaults that place traps. -------------------------------------------------------------------------------- 0a1fc62c7c | advil | 2019-01-10 17:10:46 -0500 Prevent recursion for `viewwindow` Because this function resets a lot of display state, any recursion is potentially bad news since the lower code on the stack than the recursive call may have references that become invalid. However, it is hard to call it a bug that this function can occasionally be called recursively, since there are many ways to trigger it and they tend to be necessary for some corner case or other. (It perhaps suggests some kind of radically different approach to redraws, though.) This change was specifically provoked by a series of crashes like: https://underhound.eu/crawl/morgue/Skull/crash-Skull-20190109-202350.txt More precisely, what was happening here is the following: Preconditions: (a) the player had a custom autopickup function in their rc that had a bug (and so caused a lua error, related to trying to check if trunks were rotten in 0.22) when hungry. (b) they trigger a runrest delay, e.g. by 5. (c) there is some pickup-able item in los. (d) tiles. 1. `viewwindow` is called normally during an `_input` cycle. 2. In order to render the tile with an item during this call, the game needs to know if the object should trigger autopickup. (`_tile_place_item` calls `item_needs_autopickup`.) It gets this `item_def` from the global map (env.map_knowledge), and starts passing it around by reference. 3. The autopickup hook errors, and crawl prints the error with mprf. 4. The printing of an error (immediately) interrupts the delay, which eventually calls `runrest::stop`, which calls `viewwindow` again. 5. During this second call to `viewwindow`, `show_init` is called, which clears out the (global) map. Somewhere along the line, on the tile with the item on it, `update_tile_at` causes `map_call::clear` to be called on that tile, which deletes any cloud/monster/item info stored in that tile. 6. When flow gets back to the autopickup code, there is now an item_def reference that is invalid (because it is a reference to something that has been deleted). If this memory has been re-used, at this point, a check on the item type will fail, leading to the crash seen in the log above. (This in practice happens maybe 1 in 10 calls, and is quite random.) Morals? Side-effects are bad, and side-effects involving global state are especially bad, but this sequence of events is so complicated and involves so many core bits of crawlcode that I couldn't come up with a reasonably-scoped, principled solution. Since some version of this has potential to happen any time there is this recursion, I just prevented the recursion altogether. -------------------------------------------------------------------------------- 3016822696 | advil | 2019-01-10 17:10:46 -0500 Don't chop messages at 80 chars for chardumps/crashes This probably comes up mainly for things like lua error messages. (An alternative would be to not bother with 80 chars, which would make sense for crashlogs, but not necessarily chardumps.) -------------------------------------------------------------------------------- e64fb2763e | Edgar Bering | 2019-01-10 15:42:45 -0500 unbrace and checkwhite -------------------------------------------------------------------------------- b50ad93e3a | Jacob Meigs | 2019-01-10 13:37:28 -0500 Decouple hi-score logic from ouch (11431) Update to print logic to pull from the hi-scores already in memory. All entries are added to memory from the read when attempting to add the entry. [Committer's note: Closes #742] -------------------------------------------------------------------------------- 0964cf1819 | Umer Shaikh | 2019-01-10 13:15:22 -0500 Fix information leak for invisible monsters (11815) If the player wielded certain unrands that do damage to nearby actors on attack, and had allies nearby, then they got a prompt for confirmation when attacking. This prompt happened even if the player could not see the enemy. So the location of the enemy was revealed, in no time, by the player's trying to move into the cell. This commit changes that: the player trying to move into a cell with an unseen monster will attack without a prompt. NB: now characters walking around with one of these weapons equipped and without SInv may inadvertently anger their allies or their god. -------------------------------------------------------------------------------- fe0cbb1ec1 | Edgar A. Bering IV | 2019-01-10 08:46:44 -0500 Add Ge0ff to CREDITS -------------------------------------------------------------------------------- b3bac08b97 | Edgar A. Bering IV | 2019-01-10 08:45:52 -0500 More permanent MP display (Ge0ff) Adds the real max MP on the Abilities screen. This way the Cost column will have, for example, "Permanent MP (10 left)" instead of just "Permanent MP." -------------------------------------------------------------------------------- 80e34f145d | Edgar A. Bering IV | 2019-01-10 08:45:32 -0500 Fix coloring for current MP in Webtiles (Ge0ff) The mp_colour .rc option has no effect in Webtiles due to a bug in the percentage_color() function. The function wrongly assumes that the player object has the real_mp_max property and tries to calculate MP percentage using its undefined value. -------------------------------------------------------------------------------- 68c7d63de0 | Edgar A. Bering IV | 2019-01-10 08:44:50 -0500 Display real MP for Deep Dwarves when necessary (Ge0ff) Deep Dwarves' Heal Wounds ability is the only one that requires real MP. Even if the maximum MP is 0 because of an antimagic weapon or -MP items, the player can still use the ability. Similarly, if the player has no real magic points, but has +MP items, the ability cannot be used. Currently it is not possible to check the real MP without taking actions. Taking off items with +MP and -MP or switching weapons takes time, and unequpping some items, e.g. Maxwell's etheric cage, has side effects. This patch adds real MP to the %-screen/morgue and to the HUD (only for Deep Dwarves and only when real MP != max MP). -------------------------------------------------------------------------------- 26ad783131 | Alex Jurkiewicz | 2019-01-09 20:08:09 -0500 Add unbrace and checkwhite to Travis Also improves the output of `checkwhite -n`, using `unbrace -n` as a guide. This should make it more informative for new contributors reading Travis CI failed build logs. [Closes #754] [skip ci] -------------------------------------------------------------------------------- 356c24d696 | Edgar A. Bering IV | 2019-01-09 18:39:57 -0500 List johnstein under contributors also Already in credits for running CBRO, give credit also for development contributions. -------------------------------------------------------------------------------- 1a62673517 | John Boyle | 2019-01-09 18:28:52 -0500 Remove an unused parameter from a function. Based on some minor code archaeology, looks like there was a big refactoring of the stairs logic in commit: 09e009602f11412cbc18de77043e78e84103c371 It appears that's when 'whence' appeared, basically a rename of the 'old_feat' variable. Also appears that the closely related variable, how, also made its appearance here (renamed from 'stair_find'). Here's a helpful docstring on the diff between the two variables: * @param how The type of stair/portal tile the player is being conveyed through * @param whence The tile the player was on at the beginning of the transition * (likely the same as how, unless forced is true) Looks like when the old code was broken up into several functions, 'whence' got superflously added and didn't actually belong in _travel_destination(). [Committer's note: Closes #615] -------------------------------------------------------------------------------- 34ce6ba02a | John Boyle | 2019-01-09 18:27:52 -0500 Don't let confused players win by tripping Previously, confused players who tripped up the stairs could actually win, despite getting a message saying they tripped back down. This update modifies the returned travel destination after tripping if the player is standing on the dungeon exit. Before, the destination returned was the default branch with a depth of -1, which would be an invalid destination. This was ok since this invalid destination would be interpreted later to prevent going up-stairs after tripping. However, there was special casing for standing on the dungeon exit to skip being blocked from transitioning to the destination. This logic was also updated. -------------------------------------------------------------------------------- 07611c5723 | gammafunk | 2019-01-08 20:37:54 -0600 Allow Vertigo status to show up in status displays This allows it to show in the '@:' listing on the status screen as well as in logfile and milestone entries. -------------------------------------------------------------------------------- 03697e9997 | Edgar A. Bering IV | 2019-01-08 20:12:26 -0500 Correct a feature description to match a tile -------------------------------------------------------------------------------- 184aec986f | Edgar A. Bering IV | 2019-01-08 20:11:05 -0500 Adjust the shape of a Bailey entry -------------------------------------------------------------------------------- e8b2c155c3 | Edgar A. Bering IV | 2019-01-08 20:05:33 -0500 New axe and polearm statue tiles (CanOfWorms) Replacing the unobtainable axes used as decoration in Bailey entrances. -------------------------------------------------------------------------------- 3803c42f16 | NormalPerson7 | 2019-01-08 14:45:54 -0500 Rename spret_type to spret This shortens the name to reduce the number of lines that were made too long by the previous commit, and so that the previous enum values (e.g. SPRET_ABORT) now easily correspond to their new class values (e.g. spret::abort). -------------------------------------------------------------------------------- fb802740aa | NormalPerson7 | 2019-01-08 14:45:54 -0500 Convert spret_type to an enum class This commit converts spret_type to an enum class and replaces all instances of SPRET_ABORT, SPRET_FAIL, SPRET_SUCCESS and SPRET_NONE to spret_type::abort, spret_type::fail, spret_type::success and spret_type::none, respectively, to improve the type security of spell return values. This commit also fixes some intentional but nevertheless unnecessary casting of SPRET_ABORT return values to booleans in _do_ability (ability.cc), and a clear mistake of returning SPRET_ABORT in the boolean function uskayaw_line_pass (god-abil.cc), which would now cause compile errors. -------------------------------------------------------------------------------- 42e81859b2 | advil | 2019-01-08 12:48:11 -0500 Use window hidden API properly This probably disabled delays altogether on servers that updated since a036e810d7e9c886. -------------------------------------------------------------------------------- edc204144c | advil | 2019-01-08 12:48:11 -0500 Don't create a new TextDecoder for each message This may have been contributing to perception of choppiness, as it seemed to be triggering periodic gc that I'm not otherwise seeing. (I wouldn't have expected the old method to have any different effect, but who knows.) -------------------------------------------------------------------------------- eb4e2cb51d | Edgar A. Bering IV | 2019-01-08 12:14:33 -0500 Adjust Deal Four Clearing the deck made the cost practically too high. During playtesting there was a period where the deck was not cleared (a bug at the time) but the playtesters did not report that it was too overpowered. A piety cost of zero would be too low, so deal four gains a piety cost again. -------------------------------------------------------------------------------- 079dcdc05b | Edgar A. Bering IV | 2019-01-08 11:48:18 -0500 Adjust deck size and card dealing Increase the size of destruction decks to 26 and change the deal frequency to favor destruction more. Compared to the effects in summoning and escape, destruction effects tend to be a single turn conjuration (Storm and top tier Pain need adjustment here) which makes them comparatively weaker; giving the player more to work with should help equalize the decks in power. Compare this to old Nemelex's higher weighting of destruction decks. -------------------------------------------------------------------------------- c184e932ed | gammafunk | 2019-01-07 19:11:02 -0600 Properly handle LOS for closed clear doors The LOS test for things that block translocations previously only considered features as blocking if they were opaque or walls. Close clear doors are neither but should block these effects. All forms of closed doors should prevent both effects and actors from passing through as long as the door remains closed. Add a feat_is_closed_door() check to the relevent "no_trans" LOS testing function. -------------------------------------------------------------------------------- 28d4f2f0af | Edgar A. Bering IV | 2019-01-07 15:35:03 -0500 New Nemelex Draw icons (ontoclasm) -------------------------------------------------------------------------------- 376580ae66 | Edgar A. Bering IV | 2019-01-07 15:32:24 -0500 New dispersal trap tile (CanOfWorms) -------------------------------------------------------------------------------- a036e810d7 | advil | 2019-01-07 09:43:23 -0500 Don't run delays for webtiles windows that are hidden (11657) at least, according to the page visibility API, which is at proposed recommendation level and widely supported. (For older browsers, this should just fall back on the older behavior.) The problem in 11657 is that most browsers throttle setTimeout to use a minimum timeout of 1000ms for non-visible windowsr. So, long travel sequences that are supposed to have a 1ms delay in between each step instead have a 1s delay in between each step, and so run extremely slowly while the window is backgrounded and pick up speed to the regular timeout length once the window gets refocused. -------------------------------------------------------------------------------- 304f35bdc5 | gammafunk | 2019-01-07 02:01:20 -0600 Rework some areas of a ghost vault For gammafunk_ghost_gnarly_gnolls, always add the pair of doors closest to the landing area, using the newly introduced clear doors. Use clear doors elsewhere in the vault, and simplify the DES glyph usage. -------------------------------------------------------------------------------- 7e67e019d3 | gammafunk | 2019-01-07 02:01:20 -0600 Add clear doors to some vaults (minmay) These vaults have a more pressing need for clear runed doors due to their layout or being especially spoilery. We will probably have the `=` DES glyph default to runed clear door in the future, but that will require that we go over vaults a bit more systematically. After that, some of this commit can be reverted. -------------------------------------------------------------------------------- 7832a39847 | gammafunk | 2019-01-07 02:01:20 -0600 Update list of past and present server admins in CREDITS.txt -------------------------------------------------------------------------------- 5cfbae526d | gammafunk | 2019-01-07 02:01:20 -0600 Add Matthew Ludivico to CREDITS.txt Move his name properly into the credits instead of having it in various comments for vault files. His name is also credited in the names of the vaults themselves. His name was listed in comments at the top of several vaults in addition to his handle being in the names of said vaults. -------------------------------------------------------------------------------- 1cc19cd42d | gammafunk | 2019-01-07 02:01:20 -0600 A 9x9 Gauntlet arena using runed doors This arena can be used now that clear runed doors exist. -------------------------------------------------------------------------------- 22e01ae7f9 | gammafunk | 2019-01-07 02:01:20 -0600 Tiles and tile logic for translucent doors (minmay) This commit adds clear door tiles made by minmay and updates tile handling logic to properly show these tiles. We have tiles for single closed, open, runed, and sealed clear doors as well as gated tiles. No Crypt-specific variants for these like the opaque doors have, but those shouldn't be necessary. Crypt has no special clear wall tiles that we're trying to blend with. -------------------------------------------------------------------------------- 9cb7e9484a | gammafunk | 2019-01-07 02:01:20 -0600 Door handling logic for translucent doors Update the functions that test for close, runed, and sealed doors to included the clear door types. Add feat_is_open_door() and feat_is_runed() as general functions to test for open and runed doors now that there are two kinds of each. Also add dgn_close_door() and dgn_open_door() functions to close or open a door to the right type that retains opacity. In other words, when closing a door we turn a clear open one into a clear closed one. Update door handling logic to use these new functions. -------------------------------------------------------------------------------- 546a3085bf | gammafunk | 2019-01-07 02:01:20 -0600 Translucent door feature types and data Translucent doors are a new door type that allows LOS visibility through the door itself. These can be referred to simply as "clear" doors, but the word "translucent" is used in the in-game descriptions. One of the main uses of clear doors will be for vaults with runed doors. Clear runed doors allow revealing vault contents without as much use of adjacent translucent walls. This is especially useful for vaults with multiple-tile doors, which is something non-runed vaults can take advantage of as well using ordinary clear doors. Having clear doors types in addition to the usual opaque ones will generally allow for more creative terrain in vaults and layouts. This commit adds the four necessary dungeon feature types for translucent doors: closed, open, runed, and sealed. Subsequent commits will add the logic to properly handle retaining the right feature types as doors are open, closed, sealed, etc. This logic will be analogous to the behaviour of current opaque doors. Runed clear doors will turn into ordinary clear doors when opened. Sealed clear doors will remain clear, allowing visibility through them, but can't be opened until they're unsealed. Translucent door console colors are: cyan for ordinary, lightcyan for runed, and white for sealed. Tiles and tile handling logic will be added in a subsequent commit. It would be good to use clear runed doors for rune door vaults whenever possible to help minimize spoilers in these vaults. It may be possible to rework all runed door vaults to use clear runed doors. For now, we keep the opaque runed doors for the occasional more spoilery vault that needs them. Closes #934. -------------------------------------------------------------------------------- 3751e1c4cc | advil | 2019-01-06 21:32:39 -0500 Don't use `let` Not necessary here and isn't otherwise used in our codebase. -------------------------------------------------------------------------------- 63bca24c07 | advil | 2019-01-06 21:15:16 -0500 Fix out-of-order messages (maybe 11780) For compressed websockets, the decoding process used a FileReader to convert the output of decompression to UTF-8. However, FileReader comes with no guarantees about the order in which callbacks get attended to when there are multiple instances, and in chrome especially they could get quite out of order for messages sent at roughly the same time. This lead to the message queue being out-of-order, which various aspects of the webtiles client are not robust to. This commit uses (suggested by jilles) a TextDecoder instance instead. Because this may not be supported by some browser versions still in use, I have kept the old approach as a fallback. (An alternative would be simply to use uncompressed websockets if TextDecoder is not supported.) -------------------------------------------------------------------------------- ca735f5602 | gammafunk | 2019-01-06 17:44:52 -0600 A Throw Klown Pie ability for Killer Klowns This LOS-range ability throws a damaging projectile (a pie!) that inflicts a non-resistable and temporary debilitating effect on the victim whenever it does damage. The effects are: inability to drink potions (player-only), Vertigo (player-only), stat drain (player-only), silence, fire vulnerability, and polymorph. The player version of polymorph is restricted to forms that can always move: bat, hog, and wisp. The effects are weighted evenly except for fire vulnerability, which has 12% chance, and polymorph, which has 8% chance. These effects are ones not already represented by existing Zot monsters and mostly things that are significant in combat, especially with multiple monsters involved, but don't always necessitate immediate retreat. Polymorph is the exception to this; it's a rare but scary effect where the player has to use the form to escape or use things like potions of cancellation, allies, god powers, powerful spells, etc. for safety. The pie does damage that's the same as quicksilver dragon breath, 3d20. This is enough to give it a good chance to have an effect even on characters with good AC. Additionally Klowns have a low weight for using their new ability, about 1/4 as much as Quicksilver dragon use their breath. The pie projectile tiles are taken from the April Fool's implementation of Jesters. Now all that's left is to make Killer Klowns worship Nemelex and have Xom wrath... -------------------------------------------------------------------------------- bb96f5f248 | gammafunk | 2019-01-06 17:44:52 -0600 Code support for restricted player polymorph Add a `allow_immobile` argument that defaults to true for actor::polymorph(). If this is false, the player won't polymorph into a form that can become immobile, like Tree or Fungus form. This will be used in an upcoming Killer Klown spell. -------------------------------------------------------------------------------- e027d9b72c | gammafunk | 2019-01-06 17:44:52 -0600 Initial rework of Killer Klowns Killer Klowns are fairly boring and ineffective Zot monsters right now. Their defining characteristics are their speed, their af_klown melee, and their blinking. The af_klown melee effects are mostly already represented by existing Zot monsters and are necessarily conservative to avoid a "never melee this" situation. Overall, Klowns feel like nothing more than blinking meatbags that don't really live up to their relative rarity and special use in the Hall of Zot. This commit is part of a reworks Klowns to give them a more interesting ranged attack in place of their custom melee type. The ranged attack will be a "Throw Klown Pie" ability that does damage and inflicts one of a set of temporary effects. It will be introduced in a subsequent commit. In this commit, the af_klown melee type is removed, and Klowns now get well-enchanted, usually branded clubs as melee weapons. A clubs is a poor weapon on its own, but high enchantment and use of brands combined with a Klown's decent melee damage serve a purpose similar to af_klown without needing a custom attack flavor. A club is also a funny weapon; you can't help but laugh when getting hit with a +12 club! The club brands include flaming, freezing, vorpal, elec, venom, vamp, antimagic, pain, holy wrath, and at very low weights, distortion and chaos. The last two create a "don't melee this" situation, but with a combined chance of only 3%, seeing a Klown with one of these brands will be a rare and delightful treat. This commit also removes Klowns' extra regen, something I'm sure many players (and some developers) didn't know they had! Klowns have lots of HP and like to blink around, so there's no need to help them overstay their welcome with fast regen. Klown tiles now have weapon offsets so that their clubs can be properly displayed for each tile variant. The tiles weren't designed to display a weapon, but the locations I've chosen work well enough for now. In the future, it might be good for an artist to adjust the tiles to allow better weapon display. -------------------------------------------------------------------------------- a4d50d4d25 | gammafunk | 2019-01-01 18:06:09 -0600 A Trog-themed ghost vault with wrathtful warriors A transporter ghost vault for D:7-15, Lair, Orc, Shoals, Snake, Swamp, Elf, Depths, and Zot. In gammafunk_ghost_wrathful_warriors, some warriors pay tribute with offerings at Trog altar. An unfortunate player tried to take the loot, but neglected to notice the moths of wrath provided by Trog to aid his champions. The only terrain are three rocky pillars arranged in a primitive henge with some randomized wall placement. Some of the warriors are armed with weapons themed as Trog gifts. In certain branches like Elf or Shoals, a couple monsters are primarily ranged attackers that pose the most threat before they berserk. All monsters are capable of being berserked and none are spell-casters. Numbers of monsters and loot scale with depth of placement, similar to other ghost vaults. The number of Trog-themed weapons gradually increases, as does their quality. -------------------------------------------------------------------------------- 5ee8fed462 | gammafunk | 2019-01-01 17:52:56 -0600 Update DES and monster data for a ghost vault Tweak the monster weapon definitions used by the ghost_orc_armoury vaults to make them a bit more general. Include some reasonably low weights for higher-end types for the knight set. Make the monster weapon sets available as variables for other ghost vaults. These will be used by a vault introduced in a subsequent commit. For the ghost_orc_armour vaults themselves, reindent the kmons() statements to be more readable. Also tweak NSUBST statements to put the fancier orcs earlier in the statements for clarity. -------------------------------------------------------------------------------- 2b9f6a0aa0 | gammafunk | 2019-01-01 17:52:56 -0600 Fix loot generation in a vault In gammafunk_ghost_berserking_beasts, the loot wasn't placed properly in the Spider branch due to missing SUBST statements. -------------------------------------------------------------------------------- 3f50ca7087 | gammafunk | 2019-01-01 17:52:56 -0600 Remove some ammo quantities from DES monster specs When giving ammo to a monster as part of its monster spec, the monster will be given a reasonable quantity for that ammo type if quantity isn't specified. The monster gear code doesn't correctly apply monster-specific quantity bonuses when doing this, which is something that should be fixed. However those aren't relevant for the instances changed by this commit. -------------------------------------------------------------------------------- 4b96247385 | gammafunk | 2019-01-01 17:52:56 -0600 Update and comment a ghost vault loot function Have ghost_good_loot() use the lists of auxiliary armour in dat/dlua/dungeon.lua instead of having its own lists. Add comments describing how this function sets up its loot glyphs. -------------------------------------------------------------------------------- 8ec7dd4a3d | gammafunk | 2019-01-01 17:52:56 -0600 Fix a weapon specification function The random_item_def() function used by ghost vaults didn't properly exclude quick blades from receiving the speed ego. Also remove a check for randarts with no ego specification used by an earlier version of this function, since that's no longer needed. -------------------------------------------------------------------------------- b60d84b635 | NormalPerson7 | 2018-12-31 17:24:24 -0500 Improve spell description of memorised uncastable spells (11808) "You cannot memorise this spell because ..." was unsuitable when the player had already memorised an unusable spell before it was made unusable. Therefore, change this message to "You cannot cast this spell because ..." when the player had previously memorised the spell. Also convert `description` in this function from a string to an ostringstream to prevent casting to a string that would be caused by neither of the first two additions to `description` being of type string. -------------------------------------------------------------------------------- 9ccc95a320 | Edgar A. Bering IV | 2018-12-30 23:04:45 -0500 Changelog through 0.23-a0-642-g3120c2f5 -------------------------------------------------------------------------------- 3120c2f5a9 | gammafunk | 2018-12-29 22:44:08 -0600 A ghost vault with berserking beasts A transporter vault for D:7-15, Lair, Orc, non-Slime Lair branches, Elf, Depths, and Zot. In gammafunk_ghost_berserking_beasts, you encounter the ghost of a player who stumbled into a cave of beasts with moths of wrath lurking about. The monsters are animal-intelligence things from the branch of placement that can be berserked. Monster count and loot are progressive in the usual ghost vault fashion. An extra piece of auxiliary armor or jewellery that upgrades in quality by depth is placed under the ghost. The layout is the same used in another ghost vault for now. I'll rework it to be something more uniquely cave-like in a future commit. -------------------------------------------------------------------------------- 0a7f1ce553 | Edgar A. Bering IV | 2018-12-29 11:35:48 -0500 Update CREDITS -------------------------------------------------------------------------------- 5944deb15c | Ryan | 2018-12-29 11:33:10 -0500 Grant Qazlal cloud immunity to divine allies This fixes the non-combo circumstance where your own clouds kill your Qazlal Elementals. Qazlal still hampers other sources of allies. [Committer's note: Closees #773, restricted immunity only to Q allies] -------------------------------------------------------------------------------- a9a3373214 | Umer Shaikh | 2018-12-28 14:59:07 -0600 Remove useless function declaration This function is never defined or called. -------------------------------------------------------------------------------- c52245bda8 | bjobae | 2018-12-28 08:51:28 -0600 Adjust Amulet of the Acrobat The acrobat effect no longer works while held or constricted. Display of the EV-boost during the previous turn is improved by extending the duration of the acrobat effect for one AUT. There are no one AUT player actions, so if the player takes a non-acrobat action they will lose the status before the world_reacts(). The result is that the EV-boost received during the previous turn after doing non-actions (entering an unknown command, viewing inventory etc). [Committer's note: Closes #922, tweaked some comments and wording] -------------------------------------------------------------------------------- a828402fb8 | Umer Shaikh | 2018-12-28 07:46:46 -0600 Make cloud duration more apparent to console players Tiles players can see when certain clouds (e.g., fire from conjure flame) are about to expire. We reveal similar information to console players by adding separate characters for (some) decaying clouds. These are distinguised by default in CSET_DEFAULT (but not CSET_ASCII) and can be set by the player by modifying the option display_char. -------------------------------------------------------------------------------- 0ff605794f | NormalPerson7 | 2018-12-27 10:15:30 -0600 Add three tile colour options to the options guide (11802) Add the options: tile_transporter_col, tile_transporter_landing_col, and tile_explore_horizon_col to options_guide.txt. Adjust whitespace to retain alignment of the other tile colour options. -------------------------------------------------------------------------------- 88ca12a7de | advil | 2018-12-26 16:49:16 -0500 Rename some more `require` calls These were added after the initial branch. -------------------------------------------------------------------------------- 1d9819160e | advil | 2018-12-26 16:32:13 -0500 Rename `require` in tests -------------------------------------------------------------------------------- 8735bf6294 | advil | 2018-12-26 16:32:13 -0500 Rename crawl's custom `require` We don't (normally) load the lua `package` lib, but this function shadows a lua `require` that would be loaded by this lib. Rename our `require` both to make it clear that this *isn't* the real lua require, and to allow the real thing to work (especially when libraries try to use it) for builds where `package` is loaded. -------------------------------------------------------------------------------- b80182b6c8 | advil | 2018-12-26 13:54:30 -0500 Improve behavior of drain life in wizmode (11801) Drain life, as a spell, is monster-only, and was crashing in wizmode because calling it as a player zap doesn't set the range correctly. This commit sets it explicitly to be monster-only; the Yred ability does use this spell type, but isn't impeded by this change because it is called there via `fire_los_attack_spell` which doesn't worry about this flag. Together with the added exception to prevent the zap from being called, this causes casting it in wizmode to use the monster cast code (i.e. create a dummy monster and cast it). This commit also adds a message when memorizing a monster-only spell via &!, not just when casting. -------------------------------------------------------------------------------- 55861494d7 | advil | 2018-12-26 13:03:08 -0500 Mark test statues as non-firewood 43d87f4 caused them to be firewood, which prevents tab from working (and maybe there are other side-effects no one has noticed). This commit lets them still be harmless, but also tabbable. -------------------------------------------------------------------------------- 9e4c4e90a0 | Edgar A. Bering IV | 2018-12-26 09:26:54 -0600 Correct a manual typo (11804) -------------------------------------------------------------------------------- ae4348f6cf | gammafunk | 2018-12-24 14:12:57 -0600 Fix a typo in the gauntlet portal message (vt) -------------------------------------------------------------------------------- 7e7a9de784 | NormalPerson7 | 2018-12-24 12:20:21 -0600 Fix surge of power message order when evoking enhanced wands (11753) This commit adds functionality to deal with the "surge of power" message when zapping wands under MP-powered wands in your_spells directly, so that this message is displayed before any of the wand's effects and any world_reacts effects caused by zapping the wand are displayed. To effect the change this commit also moves the check for the player having enough MP to use the full power bonus from MP-powered wands into wand_mp_cost. [Committer's note: Closes #926, squashed and kept some Pakellas code in place since Pak is disabled but not removed] -------------------------------------------------------------------------------- f6ffe88bf0 | gammafunk | 2018-12-24 10:23:42 -0600 Fix a typo in the INSTALL instructions (enop) -------------------------------------------------------------------------------- 6760373aa6 | NormalPerson7 | 2018-12-24 10:22:16 -0600 Fix a typo -------------------------------------------------------------------------------- 1d2cd9b1ef | gammafunk | 2018-12-23 18:24:49 -0600 Four Gauntlet maps using 7x7 arenas by minmay These maps use the 7x7 arena subvaults introduced in the previous commit. They have layouts ideas similar to the existing four 9x9 arena maps, introducing a couple variations and also sometimes mixing in 9x9 arenas in the same map. minmay_gauntlet_77_indecision: Six arenas total arranged in vertical pairs. The player chooses a path through two first tier pairs and one second tier pair. minmay_gauntlet_77_tree: A tree like arrangement of 7 arenas where all paths go through two tier one arenas and then a tier two arena. The first vault is mandatory, with two choices at each of the two points afterwards. minmay_gauntlet_mixed_big_or_small: Mixes 9x9 and 7x7 arenas, giving a choice of two paths, one using 9x9 and one using 7x7. Each path has two tier one arena followed by a tier two. minmay_gauntlet_mixed_oops_all_seconds: The player has three choices of paths with two arenas each, all of which are tier 2. Each path has one 9x9 and one 7x7 arena. I've tested all of these maps to make sure that they place all their subvaults properly and that all of their transporters work. -------------------------------------------------------------------------------- 52e5ff9589 | gammafunk | 2018-12-23 17:57:47 -0600 Some 7x7 Gauntlet arena vaults by minmay These smaller arenas will be used in minmay's Gauntlet maps, which will be merged in an upcoming commit. The setup and glyph usage of these arenas is the same as 9x9 vaults, aside from using a different set of selection tags. The only change I've made is to simplify an NSUBST statement, but I've also verified that all vaults place the necessary numbers of glyphs, have the right tags, and call the setup function. The 7x7 arena vaults leave a lot less space for terrain given the requirement of 23 glyphs. It might be good to look at lowering the number of 3 glyphs required. The current sets use no more than six 3 glyphs, for example. Alternately we could have the monster placement code be aware of vault size limitations, allowing us to require different numbers of glyphs for different arenas. For instance, smaller arenas would never roll more than six monsters for the '3' glyph and if a set required more than six monsters as its minimum, a new set would be chosen. For now we're just requiring the same set and number of glyphs for both arena sizes. -------------------------------------------------------------------------------- e3a65f00e4 | gammafunk | 2018-12-23 14:02:37 -0600 Clean up some Gauntlet DES Rewrap comments and remove a stray wall glyph. -------------------------------------------------------------------------------- 59b4ea9c50 | gammafunk | 2018-12-22 18:18:04 -0600 A Kiku-themed ghost vault In gammafunk_ghost_crypt, the player finds a crypt housing some liches and from one to three player ghosts, with decreasing chances for each additional ghost past the first. Any ghosts that don't place are replaced with a lich, and the liches upgrade to ancient liches as appropriate for depth of placement. The vault is Kiku-themed, always placing a book that is a necro randbook, the Necronomicon, or a manual of necromancy. The other guaranteed loot are a piece of artefact auxiliary armor and a piece of randart jewellery. The remaining loot is randomized in typical ghost vault fashion. Places on D:15, and in Elf, Crypt, Vaults, Depths, and Zot. -------------------------------------------------------------------------------- 65ce32ea93 | gammafunk | 2018-12-22 18:15:39 -0600 A trap-themed ghost vault The vault gammafunk_ghost_tricky_traps features Zot, dispersal, and alarm traps on the inside and outside. In addition to a player ghost, the vault has some in-branch monsters that can blink along with a depth-scaled number of normal level monsters. Loot also scales with depth, but always includes a piece of randart auxiliary armor. Places on D:15 and in Shoals, Spider, Elf, Vaults, Depths, and Zot. -------------------------------------------------------------------------------- 4f9fac93c6 | gammafunk | 2018-12-22 17:23:23 -0600 Rename a ghost vault Rename the vault ploomutoo_gammafunk_ghost_potion_laboratory to ploomutoo_gammafunk_vaults_ghost_potion_laboratory so its name is consistent with other ghost vaults. This makes vault searches and queries easier. -------------------------------------------------------------------------------- 281719c6f9 | Edgar A. Bering IV | 2018-12-21 16:35:28 -0600 Spice up the skin of Zhor Riffing on the cold theme, give it a passive Metabolic Englaciation effect. To cut down on message spam, have it only trigger when monsters are around, and give it SInv to avoid weirdness with detection. -------------------------------------------------------------------------------- 2e9d38c61e | advil | 2018-12-21 16:20:07 -0500 Fix some issues with build-rltiles and webtiles Ensure that libpng gets built if there is no pkg-config, so that the submake has access to it. Also a misnamed variable that crept in in a53296f351. -------------------------------------------------------------------------------- 9ead64f384 | gammafunk | 2018-12-21 13:53:36 -0600 A ghost vault full of gnarly gnolls A transporter ghost vault for D:3-8 that's inspired by Lemuel's infamous castle vault. In gammafunk_ghost_gnarly_gnolls, the player encounters a ghost who tried and failed to raid a well-guarded gnoll castle. Gnarly gnolls include those with branded reach weapons and possible nets, as well as gnoll artificers (just ordinary gnolls with wands). As depth increases, so does the amount of monsters and loot, with gnoll sergeants replacing some of the ordinary gnolls. On D:7-8, there's a chance for Grum and his band of wolves to replace one of these sergeants. The castle's treasure vault always places a manual (gnolls love raising skill levels!), a piece of jewelry, and some gold. The vault has mostly narrow passageways, but one or two doors may place near the entrance to give both players and monsters additional movement options. -------------------------------------------------------------------------------- 092a5d6148 | gammafunk | 2018-12-21 13:37:16 -0600 Use local variables in some vault Lua Not using local in Lua functions can make certain bugs harder to find. For instance, bugs can happen when a variable is referenced by the wrong name and the incorrect name has already been defined globally, often by another function or block that should have declared the variable as local. The incorrect variable then gets used, which may lead to incorrect results without generating an error. This commits makes a bunch of ghost vault Lua variables local to their function or block. -------------------------------------------------------------------------------- 63707c92e3 | gammafunk | 2018-12-21 13:30:31 -0600 Fix a weapon ego designation in a vault It's 'vampirism', not 'vampiric'. This typo caused the vault to not place due to a parsing error whenever this ego was selected. -------------------------------------------------------------------------------- 67888616f5 | gammafunk | 2018-12-21 13:30:31 -0600 Fix a monster item definition in a vault The randomized weapon quality wasn't being correctly used, leading the quality to never upgrade from 'good_item' to 'randart'. -------------------------------------------------------------------------------- 343d861593 | gammafunk | 2018-12-21 13:30:30 -0600 Fix a decoration and a comment in a ghost vault The SUBST was on the wrong glyph, never allowing withered trees to place as an alternate to withered plants. -------------------------------------------------------------------------------- cb482e9659 | Edgar A. Bering IV | 2018-12-20 21:52:46 -0500 Display deck counts upon receiving a Nemelex gift -------------------------------------------------------------------------------- cf5c981ec5 | Edgar A. Bering IV | 2018-12-20 19:23:35 -0500 Exempt Ashenzari followers from explore traps The explore trap system interacts poorly with scrying: a player walking over an explored area to scry a wall rolls traps upon the scry reveal (though only for those tiles that would grant xp), which means that the player can be trapped despite only stepping on what they believe to be safe tiles. This is an unintuitive interaction. Tracking whether a tile was revealed by scrying or by an honest look is in principle possible, but would need to be revealed in the UI and communicated to the player. Even before the trap change, piety was granted for scried tiles as if they were explored. Though it's not mentioned in the commit log the behaviour appears to be intentional, and it certainly prevents a UI headache. For this reason, and since Ash previously boosted trap searching this patch grants Ash followers immunity to explore based trap effects. -------------------------------------------------------------------------------- 21ca0c9895 | Edgar A. Bering IV | 2018-12-20 19:21:19 -0500 Correct a conditional (Ge0ff) Commit 7a20e1 used the negation of the correct logic. -------------------------------------------------------------------------------- 13ba85c617 | Edgar A. Bering IV | 2018-12-20 19:20:05 -0500 Simplify monster trap pathing and knowledge -------------------------------------------------------------------------------- 7a20e1320a | Edgar A. Bering IV | 2018-12-20 13:01:13 -0500 Don't trigger alarms through glass Breaking LOF reciprocity for this trap and not Zot and Dispersal traps led to bad interactions with scrying for little benefit. -------------------------------------------------------------------------------- 760965b753 | Edgar A. Bering IV | 2018-12-19 11:55:14 -0500 Generalize uncancellable menus Add a flag MF_UNCANCEL that indicates to a Menu that it is uncancellable. Menus run with this flag should be run from within a run_uncancel to behave correctly under HUPs. -------------------------------------------------------------------------------- be15bf4649 | Edgar A. Bering IV | 2018-12-19 11:55:14 -0500 Streamline the Stack Five UI Instead of repeatedly calling the deck chooser menu in a clunky fashion, implement a fancier deck chooser that displays the cards crawn so far on the bottom line. -------------------------------------------------------------------------------- 2fa7c9c2c9 | Edgar A. Bering IV | 2018-12-19 11:55:14 -0500 Prompt before canceling damaging cards The player has already seen the card, so we can't put it back, but if they want to waste it that's their prerogative. If we see a hup we also cancel the card. -------------------------------------------------------------------------------- 67175e32ae | Edgar A. Bering IV | 2018-12-19 11:55:14 -0500 Display the top of the stack in the ability menu Currently 'the Pentagram' is 13 characters, so there isn't space in the Cost column of the ability menu for the string 'A Card (the Pentagram, n more)' using a shorter string than this makes it even harder to parse. Since a player concerned about how many cards remain in their stack is probably also interested in which cards those are it doesn't seem too bad to not have the count in the ability display. -------------------------------------------------------------------------------- 80e52c9aa2 | Edgar A. Bering IV | 2018-12-19 11:55:14 -0500 Default force_more for Nemelex gift messages This gives a force_more for every gift. As the gift timeout hasn't changed this is hopefully not too obtrusive. If it really is, a separate message for when a deck goes from zero to non-zero card count should be added and made the default along with the deck is full message. -------------------------------------------------------------------------------- 399e8c3419 | Edgar A. Bering IV | 2018-12-19 11:55:14 -0500 Make the Velocity card less harmful at low power At power level zero Velocity was far more likely to be actively harmful to the player than to help. With the changes to Nemelex, this particular blind-draw downside is too harsh. The new card no longer removes haste at power zero, and has the following effects based on card level. - level chance in 2 to remove slow from the player - for each enemy in sight there is a (level + 1) chance in 3 to slow - for each ally in sight there is a level chance in 2 to haste -------------------------------------------------------------------------------- 7060c5926a | Edgar A. Bering IV | 2018-12-19 11:55:14 -0500 Adjust Triple Draw and Deal Four The piety cost of deal four was a relic from old Nemelex, was too high (according to some) for even old Nemelex, and definitely too high for new Nemelex. The loss of cards means that deal four is piety gated in the new scheme already, so the piety cost for dealing four is now zero. Additionally, with card counts known, the punishment mechanic doesn't make sense (too flavour). Triple Draw is very good, and knowing deck counts means it can always be used on 3 cards, so its piety cost is increased. -------------------------------------------------------------------------------- 264638ff1b | Edgar A. Bering IV | 2018-12-19 11:55:14 -0500 Disable empty decks in the ability menu -------------------------------------------------------------------------------- 8f7bd25791 | Edgar A. Bering IV | 2018-12-19 11:55:14 -0500 Display cards available in the ability menu -------------------------------------------------------------------------------- 465c976133 | Edgar A. Bering IV | 2018-12-19 11:55:14 -0500 Descriptions for Nemelex Draw abilities These are automatically built to reflect the current state of the deck being described. -------------------------------------------------------------------------------- 96e2e8d459 | Edgar A. Bering IV | 2018-12-19 11:55:14 -0500 Iconography and gui elements for decks Move old deck icons to UNUSED. Recolour and relocate the remaining ones to fit the colour scheme of Nemelex's other abilities. -------------------------------------------------------------------------------- 1e257c81de | Edgar A. Bering IV | 2018-12-19 11:55:14 -0500 Icons for the different draw abilities -------------------------------------------------------------------------------- 69d4283a7f | Edgar A. Bering IV | 2018-12-19 11:55:14 -0500 Split "Draw One" into individual draw abilities This removes an extra keypress that will add up over time. For user consistency, the deck hotkeys in the deck chooser are now the same as the ability hotkeys for drawing from them. If this behavior is undesirable for some users, an options toggle can be added. -------------------------------------------------------------------------------- 5f4ef5656c | Edgar A. Bering IV | 2018-12-19 11:55:14 -0500 New Nemelex Stack five The player draws five cards, one at a time, and then organizes them into a stack, which can be subsequently drawn from in draw one. Re-using this ability discards the current stack. This commit refactors an internal function to simplify displaying card descriptions. -------------------------------------------------------------------------------- 5ca2704122 | Edgar A. Bering IV | 2018-12-19 11:55:14 -0500 New Nemelex Triple Draw ability Reimplementation of the old ability, which is otherwise totally unchanged. -------------------------------------------------------------------------------- b66aaafc7a | Edgar A. Bering IV | 2018-12-19 11:55:14 -0500 New Nemelex Deal Four ability Deals four from one of the player's abstract decks, emptying the remaining cards. The player is still permitted to deal four without sufficient cards (with a prompt), if they do they get a deal from Punishment. -------------------------------------------------------------------------------- d6dedd38c1 | Edgar A. Bering IV | 2018-12-19 11:55:14 -0500 New Nemelex Draw One ability Draws from one of the abstract decks the player has, and is the only interface to decks. -------------------------------------------------------------------------------- 453e4f2e67 | Edgar A. Bering IV | 2018-12-19 11:55:14 -0500 A deck choosing menu Add a menu for all Nemelex abilities to select the deck to use. Toggles to describe the decks, listing their cards. -------------------------------------------------------------------------------- e45b02a626 | Edgar A. Bering IV | 2018-12-19 11:55:14 -0500 Abstract decks to a player property Nemelex deals cards into the player's decks on the gift timeout and empties them on wrath. -------------------------------------------------------------------------------- 7ca12cd971 | Edgar A. Bering IV | 2018-12-19 11:55:14 -0500 Remove decks as items Subsequent commits will return decks to Nemelex worshippers without going through the legacy of having them be actual items. This commit removes the deck item type, confiscates any remaining decks on load in save-compatibility, and removes as much of the item handling code for decks as possible. Any pre-change Nemelex worshippers transferring their save get a raw deal, but that's been done once before for the evocations to invocations change. -------------------------------------------------------------------------------- 5bbfdfcaa2 | Edgar A. Bering IV | 2018-12-19 11:55:14 -0500 Remove deck rarity types Step one of abilifying decks is to remove the different rarities. All decks are now roughly ornate in power, but the exact distribution of card_level has changed somewhat, and is now card_level = x_chance_in_y(power, 900) + x_chance_in_y(power, 2700) with power a function of piety and invocations: power = (invocations * 9) + (piety * (invocations + 25)) / 27 + piety * (3/2) Further attempts at balance are not considered at this stage, since subsequent commits will further modify Nemelex significantly. -------------------------------------------------------------------------------- acb4b3f4ce | advil | 2018-12-17 16:18:18 -0500 Don't show ghost debug messages as errors ...so that they don't force a more when doing level reloads. These will still appear on non-debug builds after wizmode commands, as long as the diagnostcis channel isn't disabled. -------------------------------------------------------------------------------- ec6e9a1b29 | Nikolai Lavsky | 2018-12-17 09:46:10 -0500 Fix display of rotted HP on WebTiles (11759) Commit 1406302deb reversed the meaning of the get_real_hp()'s second parameter and updated all instances of this function, except for one in tileweb.cc. -------------------------------------------------------------------------------- 44dd78f40d | Edgar A. Bering IV | 2018-12-16 13:15:13 -0500 Add jrmartel to CREDITS.txt -------------------------------------------------------------------------------- 50760eb0ed | jmart | 2018-12-16 11:17:38 -0500 Fix Sif Muna dud gift bug (11791) If the player has every spell in their library, Sif Muna will still send the "Sif Muna grants you a gift!" message and trigger gift timeout. This commit corrects the bug. When the player has all spells in their library, Sif's gift timeout will no longer be triggered. The cause of the error was an incorrect check in Sif's gift logic. The return value of the acquirement(...) method was used to check success, but that method returns true even if no item was created. [Committer's note: Formatting tweaks, Closes #923] -------------------------------------------------------------------------------- 1b4a0ca2fb | Edgar A. Bering IV | 2018-12-15 13:25:39 -0500 Elaborate in a comment (|amethyst) -------------------------------------------------------------------------------- 66906bf028 | Edgar A. Bering IV | 2018-12-15 12:13:01 -0500 Only trigger traps in player sight This uses LOS_SEE, so that monsters on the other side of glass trigger traps. Monsters triggering traps out of LOS is a simulationist relic of player-monster symmetry, which was for the most part not noticable other than: "distant Zot" messages, occasionally losing track of a unique down a shaft, and in hall_of_zot where a spoliled player could wait for a long time outside the vault to thin the monsters within using the permanent teleport traps. -------------------------------------------------------------------------------- f63cd86e0c | Edgar A. Bering IV | 2018-12-15 12:06:13 -0500 Don't place monsters on traps For dispersal traps this creates the lingering question "how did they get there"; for alarm traps and Zot traps it prevents an interface screw in console. (It can still happen that a player enters LOS and a wandering awake monster is standing on certain kinds of traps.) -------------------------------------------------------------------------------- 6f776099ac | Edgar A. Bering IV | 2018-12-15 11:24:20 -0500 Adjust dispersal sequencing Always blink the triggerer last to prevent chain dispersal from a single trap. This doesn't prevent dispersal chains from two or more nearby traps, but those are rare. -------------------------------------------------------------------------------- fddc42b1e8 | Edgar A. Bering IV | 2018-12-15 11:15:04 -0500 Consider dispersal traps impassible in levelgen While this isn't technically true, dispersal traps can be passed, it is painfully annoying. -------------------------------------------------------------------------------- 2b1de944cd | advil | 2018-12-13 15:11:51 -0500 Respect BFLAG_NO_SHAFTS for explore-triggered shafts (u/Hamsteri) This affects only tomb 1=>2; 2=>3 was already prevented by BFLAG_DANGEROUS_END, and no other branch has BFLAG_NO_SHAFTS set. I'm not sure what the original intent of only checking this on levelgen was, but it long precedes explore traps. I did a quick audit of code that calls this and it all seems fine; though it may have been possible for formicids to self-shaft on tomb 1 before this commit (and probably won't be now). -------------------------------------------------------------------------------- c793968550 | advil | 2018-12-13 12:27:44 -0500 Clean up some oldghosts code Now that saving of ghosts is disentangled from loading of ghosts, there's no pressing reason to prevent saving of ghosts in portals, and some vault designer might come up with a clever way to design ghost maps for some portals. (That said, I'm not sure I can see a good way to make a ghost map for some of the early portals, e.g. sewer.) I've still left branches disabled where I can't envision any good way of making use of ghosts. Also, remove an old function that is now used only for wizmode testing, and adjust some documentation/naming to better represent how this code is used for newghosts. -------------------------------------------------------------------------------- 442c57a089 | gammafunk | 2018-12-13 09:14:05 -0600 Correctly handle LOS for dispersal traps Dispersal traps are supposed to affect actors that can see the cell of the trap without any translocation-blocking wall in the way (e.g. transparent rock or stone). This condition was correctly applied to monsters, but not to players if the trap was triggered by a monster. This commit applies the condition to player, preventing monsters on the side of transparent rock/stone walls from blinking the player with dispersal traps. -------------------------------------------------------------------------------- a53296f351 | advil | 2018-12-13 09:56:36 -0500 Fix cross-compiling + libpng When cross-compiling, the contrib libraries are not useful for the tilegen tool, which needs to be run as part of the build process. This prevents it from trying to use contribs; cross-compiling will therefore fail if it can't find libpng via pkg-config (this was the status quo for all builds before 409694ba0a8762, so it doesn't introduce any new requirements). -------------------------------------------------------------------------------- 25f447933f | gammafunk | 2018-12-12 23:40:13 -0600 Rework gammafunk_gauntlet_shortcut Make the longer path have four arenas instead of three so that the shortcut aspect is more emphasized. Make all four of the longer path arenas have easier difficulty instead of having the last one in the path sometimes be harder. Adjust the average amount of loot per arena so that both paths have 7 items on average, which is in line with what the other Gauntlet maps give. -------------------------------------------------------------------------------- 6ca8497937 | gammafunk | 2018-12-12 23:40:13 -0600 Allow Gauntlet maps to customize extra loot This commit adds Lua support allowing Gauntlet maps to change what loot their arenas place. This customization only applies to the three extra item locations within each arena, with the arena's first item remaining guaranteed. This functionality will be used in a subsequent commit to have a Gauntlet map place a set of four arenas with the same average amount of loot as a set of two arenas in another path. -------------------------------------------------------------------------------- 1612a95892 | gammafunk | 2018-12-12 23:22:01 -0600 Sometimes place traps in Gauntlet arenas This gives each arena vault a small chance to place traps using the '^' glyph, with the chance being 1/6 for tier 1 arenas and 1/4 for tier 2. If traps don't get enabled, any '^' glyphs become floor. Currently only dispersal traps are placed, since Zot traps are too dangerous for most depths where Gauntlets place, and would be especially dangerous for some vaults. It may be possible to use a limited number of Zot traps in specific vaults for Gauntlets that place late enough, but for now dispersal traps will do. -------------------------------------------------------------------------------- 53ffe6b153 | gammafunk | 2018-12-12 23:21:17 -0600 Add support for custom Gauntlet arena terrain This commit adds support for arena monster sets to define thematically appropriate types of liquid and plants. For instance, necromancy-themed sets might want withered plants, and demonic-themed ones might want demonic plants. Likewise a simulacra set wouldn't want deep water replaced with lava and a fire themed set would want lava instead of deep water. These preferences are defined via keys described in the comments of tier1_arena_monsters in gauntlet.lua. The monster sets have been updated to give these preferences where appropriate. Also realign the arena variables to consistent spacing. -------------------------------------------------------------------------------- fcd52a4e4c | gammafunk | 2018-12-12 23:16:42 -0600 Gauntlet monster set additions and updates Add entries for a necromancer with wolves for tier 1, and swamp worms for both tiers. Update the entropy weaver set to place no more than one wolf spider. Slightly increase the number of slime creatures for tier 1 (still only placing 60% of a band). Have the tier 1 sixfirhy set always place only one sixfirhy, supplementing it with ufetubus instead, since those are also fast. Fix the spectral thing entries to use the correct syntax. -------------------------------------------------------------------------------- 13ad8d5483 | gammafunk | 2018-12-12 23:15:35 -0600 Remove low weighting on a Gauntlet exit vault This vault had low weight during development of the Gauntlet portal due to its small size at the time. It was changed to make it occupy the full subvault area, but the weight was never updated. -------------------------------------------------------------------------------- d6d2466685 | gammafunk | 2018-12-12 23:15:35 -0600 Rename some setup functions and a variable The new function names make it clearer whether the function applies to Gauntlet arena vaults or to the overall map. -------------------------------------------------------------------------------- f2ea3f3a38 | gammafunk | 2018-12-12 23:15:04 -0600 A new Gauntlet entry portal tile (CanOfWorms) -------------------------------------------------------------------------------- 3e74e4c2af | advil | 2018-12-12 20:16:11 -0500 Remove a default argument, and convert to reference Previously, the default argument of `0` was taken to indicate the player. Now that all traps are revealed to the player, there's not much point to this. -------------------------------------------------------------------------------- 066e7cad99 | advil | 2018-12-12 19:53:20 -0500 Remove trap revelation from sanctuary -------------------------------------------------------------------------------- 409694ba0a | advil | 2018-12-12 17:34:52 -0500 Use contribs if appropriate when building rltiles/ via sub-make This passes along the NO_PKGCONFIG value determined by the main Makefile to rltiles/Makefile. Previously, the sub-make process would use pkg-config libpng regardless of what the main Makefile is doing. This isn't necessarily a big deal, because the utility built with this isn't distributed, but it is breaking the build for hypothetical someone who is having pkg-config problems and wants to rely just on contribs (me), or someone who might try to build crawl in a restricted environment without pkg-config (which apparently is uncommon). -------------------------------------------------------------------------------- f2ebeb9087 | Edgar A. Bering IV | 2018-12-12 09:10:32 -0500 Update credits -------------------------------------------------------------------------------- 7e78d40599 | bjobae | 2018-12-12 09:08:17 -0500 Prevent a crash in god descriptions (11492) Fixed a typo which caused a crash on Lugonu's description screen if terminal size was too small. -------------------------------------------------------------------------------- bfc773d60b | Edgar A. Bering IV | 2018-12-12 08:54:54 -0500 Add ufshaikh to CREDITS.txt -------------------------------------------------------------------------------- cc558d21c3 | Umer Shaikh | 2018-12-12 08:52:44 -0500 Make giant creatures no longer tear through webs Web traps were made permanent to prevent the player from tediously stepping in and out of them to remove them. But it is still possible to remove them by luring a giant enemy (e.g., an emperor scorpion) through a web. (Less realistically, the player may also transform into a giant form, e.g., using dragon form, and then tear through them.) Since webs frequently block choke points in retreat paths, this can easily be worth doing, but is not rewarding gameplay after the first time the interaction is noticed. In the absence of compelling positive effect on gameplay from the interaction between size and web traps, the problem is solved by removing the special case. -------------------------------------------------------------------------------- 30802b1d75 | gammafunk | 2018-12-10 03:01:12 -0600 Message highlighting for the Gauntlet portal Add highlighting for all Gauntlet portal timer messages to default settings. -------------------------------------------------------------------------------- 8ba4ea47b7 | gammafunk | 2018-12-10 02:55:15 -0600 Better timer messages for the Gauntlet (mikee) Since Baileys already use the notion of the gate, use a beating drum to describe the timer of the Gauntlet. The idea being that an instrument being played calls spectators to watch the combat proceedings or perhaps calls combatants to enter the arena. -------------------------------------------------------------------------------- 351818ab63 | Edgar A. Bering IV | 2018-12-10 00:42:41 -0500 Add a TAG_MAJOR around a conditional (gammafunk) -------------------------------------------------------------------------------- 873c05abb0 | NormalPerson7 | 2018-12-10 00:23:12 -0500 Add dispersal traps to Zot:5 This commit creates a new function is_regular_trap in traps.cc, which returns whether a particular trap can spawn from a vault which places "any trap" (that is, a trap that can be spawned from TRAP_RANDOM). The primary purpose of this is to add dispersal traps to the hall_of_Zot, in the hope that it will create interesting and dangerous situations in Zot:5 with the player having to deal with themself and their enemies being thrown around everywhere. Regarding the forced trap locations in Zot:5, dispersal traps should be less punishing than teleport or Zot traps, since the player can get over the other side simply by repeatedly entering the trap. [Committer's note: Edited a comment. Closes #920] -------------------------------------------------------------------------------- d3cbc8420a | Edgar A. Bering IV | 2018-12-09 14:49:46 -0500 Still more change log edits -------------------------------------------------------------------------------- 7a9182eec1 | Edgar A. Bering IV | 2018-12-09 14:41:56 -0500 Further changelog edits -------------------------------------------------------------------------------- 889f499fb3 | gammafunk | 2018-12-09 12:04:47 -0600 Some changelog tweaks -------------------------------------------------------------------------------- 35ae8912eb | Edgar A. Bering IV | 2018-12-09 12:36:14 -0500 Changelog through 0.23-a0-550-g7de1f8ee9f -------------------------------------------------------------------------------- 7de1f8ee9f | gammafunk | 2018-12-07 15:43:37 -0600 Remove some SUBST for unused subvault glyphs We use exact matches for all Gauntlet subvaults, since we need to use a specific shape to guarantee proper alignment. Any glyphs that didn't get replaced by the subvault would be due to an error, and replacing these with walls increases the likelihood of said error trapping the player. So allow these glyphs to simply become floor instead. -------------------------------------------------------------------------------- e004423b78 | gammafunk | 2018-12-07 15:42:52 -0600 Extend and rework gammafunk_gauntlet_branching Add a final arena to both paths for this map. This brings the number of its arenas more in line with the other maps and makes it not feel like an abridged version of gammafunk_gauntlet_one_two_three. Also rework the layout to better use space and allow it to be symmetric with its new bottom half. -------------------------------------------------------------------------------- c58ec83862 | gammafunk | 2018-12-07 15:15:27 -0600 A new Gauntlet map with progressively more choices In gammafunk_gauntlet_one_two_three, the first arena is mandatory and leads to two choices, after either of which the player has three arena choices. The middle set of arenas are higher difficulty 50% of the time. -------------------------------------------------------------------------------- 1e3a7e1e51 | gammafunk | 2018-12-07 15:12:04 -0600 Some fixes for a Gauntlet map Some of the transporter glyphs given in the setup for this map weren't actually used. Also increase area inside the shortcut path's access to the second arena. The previous area had only 4 tiles total, possibly preventing some monsters adjacent to the player from following through the transporter. -------------------------------------------------------------------------------- 807884b9e0 | gammafunk | 2018-12-07 15:12:04 -0600 A couple new Gauntlet monster sets In one set, a necromancer with death yaks that are potential bind soul targets, and in another a band of meliai. Both for higher tier difficulty. -------------------------------------------------------------------------------- 05cfe7af05 | gammafunk | 2018-12-07 15:12:09 -0600 Balance changes for some Gauntlet monster sets Use monster bands where the counts we want are close to the natural band size. Make the hornet set just have hornets, since bees don't do anything hornets don't already do. Add the possibility for a single, more middle-tier guardian to some sets. Less use of filler imps, more hell hounds in their place, but with fewer numbers. Break out a couple entries specified as two alternates into separate entries so we can have slightly higher counts for lowest tier monsters. -------------------------------------------------------------------------------- 9cf61d6ab0 | gammafunk | 2018-12-07 15:12:04 -0600 Fix a Gauntlet monster set entry Will make a function that checks this data on startup in the future. -------------------------------------------------------------------------------- 2dd13d1d2c | Edgar Bering | 2018-12-07 15:50:05 -0500 Remove a secret dig square (Rawrakai) -------------------------------------------------------------------------------- e99ae73ce8 | NormalPerson7 | 2018-12-07 11:59:51 -0800 Show blowgun chance on firing with F (11777) This commit makes it so that both the f and F methods of firing ammunition end up calling the _fire_choose_item_and_target function, which sets up the direction chooser with the behaviour required to get blowgun chances, net immunity descriptions and chaotic descriptions (for silver ammo) to display. Previously this function was only called when targeting through f, which meant that all three of these extra pieces of information were not provided when firing through F. -------------------------------------------------------------------------------- 48eebcd87f | advil | 2018-12-07 14:30:47 -0500 Create br.exit milestones for more branches The initial implementation (49588e8b9b1c) only tracked milestones for exiting branches that are of size >1 level (and the vestibule), in order to cut down on milestone spam. This commit expands this to include all branches that have enemies, because this information is useful for debugging sometimes, and it won't be that much more data. (I suspect that the concern came from a time when bots announced a lot more milestones than they do now.) If any portal vaults can ever be re-entered, this will only generate milestones for the first exit. As far as I can tell, all branches covered by this commit can generate only once outside of wizmode. -------------------------------------------------------------------------------- b4a79150e3 | advil | 2018-12-07 11:09:12 -0500 Save compat for 04293e54a7a0 This places an exit under the player (overwriting any features that are there, so it could overwrite a portal). It is possible for the player to ignore the exit under some circumstances and get trapped again by taking a portal, but at that point it's on them. Since the bug wasn't guaranteed to trigger in this map, this may also provide an early exit for some players. -------------------------------------------------------------------------------- 3f6f39fb57 | Edgar Bering | 2018-12-06 23:31:27 -0500 Disable met targets after quaffing a potion of experience (11352) The potion of experience skill menu backed up the player's current skill training state to allow potion-specific skill selection. Upon restore, the backup would ignore any met targets and resume training a skill even if the skill target had been met. The skill_state object now checks to see if its cached target has been met on restore, and does not alter the current state if its training information appears to be out of date. Finally, a check is added to the potion of experience effect to prompt for new skilling if targets are met after quaffing the potion. Closes #886, using a different approach. -------------------------------------------------------------------------------- 7b100e3eab | gammafunk | 2018-12-06 20:32:13 -0600 Fix a portal message typo (larvi) -------------------------------------------------------------------------------- 04293e54a7 | Alan Malloy | 2018-12-06 14:36:21 -0800 Don't trap player in gammafunk_gauntlet_branching (Kierst, NormalPerson7) The gauntlet_exit subvault was offset by one so all the exits were being placed upside down. -------------------------------------------------------------------------------- 5e0f5a2404 | gammafunk | 2018-12-06 04:08:51 -0600 Remove additional exits from a Gauntlet map Remove the intermediate exits from gammafunk_gauntlet_branching. It's better to have maps be more consistent about the use of exits in terms of not providing many of them. A future map will require the player to exit through the minotaur if they don't wish to continue through the arenas. We might end up going the route of offering the minotaur vault exit as the only one for all maps, or we might go the route of this map and have all maps present an initial exit. This could depend on how we decide to vary the final fight. If there is no initial exit, it's important that the player know what strong monster they'll be forced to fight before entering the portal. -------------------------------------------------------------------------------- 1da068c805 | gammafunk | 2018-12-06 04:08:51 -0600 Add ice statue and oklob plant Gauntlet monster sets For the lower difficulty tier. These place with a couple appropriate mobile monsters. -------------------------------------------------------------------------------- 65d9dff436 | gammafunk | 2018-12-06 04:08:51 -0600 Some balance adjustments to Gauntlet arena monsters Give some light accompaniment with wizards. Make lower-difficulty eye sets feature either a shining eye (with mutation potion loot) or an eye of devastation and having 1-2 floating/golden eyes. Balance the entries for abominations, death scarabs, shapeshifter, and slimes. Reduce the number of ugly things that accompany the great orb of eyes so much stuff with high HP. Give the glowing orange brain a couple ugly friends, since brains are pretty flimsy. -------------------------------------------------------------------------------- f0242e9408 | gammafunk | 2018-12-06 04:08:51 -0600 Some adjustments for Gauntlet subvaults Tweaks for most of the arenas to make them not have such a direct path to the transporter and loot in so many cases. Previously many potential locations for solid walls weren't added since the would obstruct view of the landing site or generally lead to too many squares not being visible from outside the arena. Use transparent stone to ensure visibility and move the landing site to locations on the other side of these new walls. Some vaults now have multiple potential landing sites that will be randomly chosen from during setup. Introduce some randomized use of iron grates in nicolae_gauntlet_arena_grate_2. Break up the walls in gammafunk_gauntlet_arena_hedges, placing more plants-as-walls and using guaranteed plants to block the path shortest path to the transporter. -------------------------------------------------------------------------------- f3a0c6f3bb | gammafunk | 2018-12-06 04:08:51 -0600 A Gauntlet map with a long way and a short way In gammafunk_gauntlet_shortcut the player has a choice between a longer but easier path and a shorter but harder one. The first path has two easier arenas followed by a third with a 50% chance to be harder. The second path has two harder arenas. -------------------------------------------------------------------------------- 6ff5c8965d | gammafunk | 2018-12-06 04:08:51 -0600 A Gauntlet map with two long paths In gammafunk_gauntlet_hard_choice, the player has a choice between two paths through three arenas. The second arena in each path has a 50% chance to be harder difficulty, and the third arena in each path is always harder difficulty. -------------------------------------------------------------------------------- 6525e13329 | gammafunk | 2018-12-06 04:08:51 -0600 A Gauntlet main map This a map for the new portal with more maps to follow in subsequent commits. gammafunk_gauntlet_arena_branching gives the player a choice of two branching paths. Each possible path take the player through two arenas, the second harder than the first. -------------------------------------------------------------------------------- c8f743dc13 | gammafunk | 2018-12-06 04:08:49 -0600 Setup Lua for Gauntlet main maps Functions to initialize global variables used by arena subvaults to match transporters to the main map as well as to determine what difficulty the main map wants them to use. The setup function also sets up all transporter features that reside on the main map. -------------------------------------------------------------------------------- 72492bce80 | gammafunk | 2018-12-06 04:07:55 -0600 Gauntlet exit subvaults These vaults place a final portal exit, the minotaur, and the loot pile. All are adaptations of the old lab portal exit vaults to work with the current layout. The changes I've made are to rotate all vaults to the same north-to-south orientation, make them subvaults, and to give the smaller vaults surrounding area to help isolate the minotaur's lair. This prevents noise from drawing out the minotaur to "camp" the player near the final transporter landing site. -------------------------------------------------------------------------------- 8f24ca6612 | gammafunk | 2018-12-06 04:07:55 -0600 A loot function for Gauntlet exit subvaults This function places a loot pile on the minotaur's exit with an item number and composition similar to the old portal. The item count range is the same the old portal (7 to 16 items with an average of 11.5). The loot items are 1/3 on-average star_item, which is close to the original portal's 1/3 chance to have each item be normal class with quality 3 * depth (star_item is 2 * depth + 5). The other 2/3 items are a mix of superb_item together with some extra armour, and some weight for wands and scrolls, since superb_item doesn't place the latter two. The weights are chosen so that the loot items will be similar to the custom list used in the old Lab portal. Gone is the chance for ammo, and the chance for non-wand misc items and staves are higher, but in general the differences in chances for each kind of item are not drastic. The loot definitions for the old portal were likely not chosen with any particular aim in mind. Also the gauntlet arenas will give the player 4-8 items on the path to the minotaur, depending on the map. This does require defeating nasty monsters, and the old Lab portal gave vault loot along the way as well. Still, we may want to reconsider this loot composition in the future. -------------------------------------------------------------------------------- 2a91107ab0 | gammafunk | 2018-12-06 04:07:55 -0600 Gauntlet arena subvaults These vaults give a 9x9 area for specifying an interesting feature layout as well as potential locations for monsters, loot, entry transporter landing site, and the exit transporter. DES comments describe what glyphs these vaults must have and what tags and setup functions they must use. Many of these are adapted from float vaults in the old Lab portal, and I've added a few new basic ones as well. We need more of these, including some creative variants that use special terrain with specific monsters, but this is a good initial set for play-testing. -------------------------------------------------------------------------------- 136b5b3fec | gammafunk | 2018-12-06 04:07:53 -0600 Gauntlet arena subvault Lua Define functions to set up arena subvault transporters, monsters, and items. The transporter setup relies on global state variable to give each transporter a key based on the subvault number. This state variable is initialized by the main encompass map. A state variable set by the main map also sets the arena difficulty, which determines the available arena sets. The setup is broken out into functions so that vaults wanting to define special monsters and loots can call what setup they instead of calling the main setup function. -------------------------------------------------------------------------------- c6bef765e2 | gammafunk | 2018-12-06 03:26:04 -0600 Gauntlet arena monster sets This commit defines arena monster sets for two tiers of difficulty. The sets define one to three related monster sets and define min/max placed for each. Each set has thematically related monsters that are generally significantly weaker than the minotaur monster boss. There's an emphasis on using monsters that might make for an interesting fight for a character at depths from Lair to D:14, especially for monsters that are not encountered much in general. Some sets in the same tier are stronger than others for specific player characters, and some arenas may be too risky to take on, but this is part of the choice aspect this portal emphasizes. -------------------------------------------------------------------------------- 9a27e60fa5 | gammafunk | 2018-12-06 03:26:04 -0600 Disable player teleportation in Gauntlets This portal's layouts have the player choose a one-way path through arenas with monsters and loot. Teleportation allows the player access to arenas not along the chosen path, largely defeating the purpose of there being a choice in the first place. Although teleport scrolls are limited, they are plentiful and even a single teleport has a high chance of granting the player access to several new arenas. Unlimited sources of teleport like the ring of teleportation and the teleportitis mutation will always let a player loot all areas. This commit disallows teleports in Gauntlets in the same way as is done for Sprint. Teleportation scrolls are marked as useless while in the portal, and attempting to use one aborts with a message. Any passive form of teleport such as that from the ring, teleportitis, or distortion is prevented. -------------------------------------------------------------------------------- 58dc622acb | gammafunk | 2018-12-06 03:26:04 -0600 Gauntlet: A new portal that replaces Labyrinths Labyrinths disable autoexplore and force the player to manually solve a maze, something not related to the kind of gameplay crawl tries to provide. There are spoilery aspects to navigating the maze efficiently and to using teleport in the portal. Once these aspects are known to an experienced player, they solve the maze with very little thought and often with great annoyance at having to play this mini-game unrelated to either tactical combat or strategy. The most interesting aspect of current Labs is the fight with a single powerful monster, the minotaur. This commit is the first in a series to implement a new Gauntlet portal where the player chooses a path through several combat arenas. The player can see what monsters they'll face and what rewards they'll get before entering each arena. The portal is similar to Ziggurats in terms of having progressive rooms with thematic monster sets, but adds a distinct choice aspect. Each of the possible paths takes the player through a series of randomized arena subvaults that have one of two difficulty tiers. Each arena subvault will having a small group of thematic monsters and a small amount of loot. All possible paths that could be taken will lead to the same exit subvault that has boss fight with the minotaur and a loot pile on the exit stairs. At least one early exit will be provided at the beginning of the portal before any path is taken, with the only other exit being guarded by the minotaur. The number of arena subvaults the player completes in each path will be small, usually two but it could be three or four on some maps. The vaults will be accessed via transporters that prevent backtracking by simply walking out of the vault, and the arenas will not have diggable walls. All forms of teleportation will be disabled in this portal in a subsequent commit, but other translocations will work normally. This portal isn't designed as a maze and doesn't fit the traditional idea of a Labyrinth, so the new portal will be called a Gauntlet instead. This commit adds basic data for the new portal and renames any files being repurposed from the old Labyrinth portal. This commit also removes the C++/lua code and vaults that won't be directly used by the new portal. Some of the Lab float and exit vaults will show up in the new portal with modifications, but we remove these for now. For any games saved with an active Lab entrance, that feature is replaced with an entrance to a Gauntlet. Games saved inside a Labyrinth will load and the Lab will function normally, except that Lab shifting won't occur. Since the player is always guaranteed a viable path to the exit after the shift, the Lab will still be solvable. -------------------------------------------------------------------------------- 1d907f148e | gammafunk | 2018-12-06 02:59:43 -0600 Better documentation and ordering of population lists These population lists are in order of the branch-type enum. Update to follow the same order of branch-type when major version changes. Mention this order dependency in the comments above each list. For the zombie, water, and lava population lists, add a comment indicating which branch the entry corresponds to if the entry is otherwise ambiguous. -------------------------------------------------------------------------------- def993ac82 | gammafunk | 2018-12-06 02:59:44 -0600 Improve branch enum and data ordering for major version change Branch data and population lists currently depend on the ordering of the branch-type enum. As long as that's the case, we should maintain a consistent ordering between this enum and those data when major version increases. -------------------------------------------------------------------------------- a799fc4e3c | Edgar A. Bering IV | 2018-12-05 21:29:27 -0500 checkwhite -------------------------------------------------------------------------------- 3133bb34ec | Edgar A. Bering IV | 2018-12-05 21:25:51 -0500 Fix a negative chance in a targeter (hellmonk) The formula for pacification chance is correct on its domain, but had an off-by-one in bounds checking. -------------------------------------------------------------------------------- b7c078159a | Edgar Bering | 2018-12-05 16:32:16 -0500 Improve teleportitis/teleport trap effect messaging Print a "reason" string before translocating, so the player can tell whether the teleport was a trap or from teleportitis. -------------------------------------------------------------------------------- 0f8c2457b6 | Edgar Bering | 2018-12-04 13:55:15 -0500 Do not include explore traps in sprint and tutorial The individual trap effects had appropriate checks, but this adds an explicit check to make the decision intensional, should future trap effects not check for sprint/tutorial. -------------------------------------------------------------------------------- 898447a553 | Edgar Bering | 2018-12-04 11:38:52 -0500 Better trap-effect sequencing Trap effects (shaft and teleport) can reveal new tiles, leading to the you.trapped variable being re-set to true. Subsequently the player can get trapped on their next turn even if they don't move and LOS doesn't change, which is unintuitive. This gives players a bit of a break post-trap. If chain-trapping in a single turn is desired, it should be implemented in a loop in _check_traps(). -------------------------------------------------------------------------------- dd405ac4cc | Edgar A. Bering IV | 2018-12-04 10:05:32 -0500 Don't roll traps on turn 0 That was just a little much. Turn 1 is still fair game though! -------------------------------------------------------------------------------- 0b42d886e6 | gammafunk | 2018-12-04 05:54:57 -0600 Update trap descriptions Add a description for dispersal traps and mention in the descriptions this trap, alarm traps, and zot traps how your allies will avoid stepping on them. -------------------------------------------------------------------------------- 50a81782d9 | CanOfWorms | 2018-12-03 23:14:20 -0500 Fix a connectivity issue in the_grid The center of this vault could be disconnected depending on the subvault generation. This change should fix the issue. -------------------------------------------------------------------------------- 809d6d0afd | Edgar A. Bering IV | 2018-12-03 22:25:24 -0500 Add teleports as an explore trap effect (gammafunk) Instead of a random teleport, they are a teleportitis-type teleport. -------------------------------------------------------------------------------- c2dc926ba0 | Edgar A. Bering IV | 2018-12-03 22:25:24 -0500 Flip the dispersal trap tile (CanOfWorms) Accessiblity change for colourblind players. -------------------------------------------------------------------------------- 34af30c767 | Edgar A. Bering IV | 2018-12-03 22:25:24 -0500 Add dispersal traps to some vaults Add dispersal traps to vaults that use teleport traps if it seems appropriate. Mostly Xom vaults. Also adds a mini_feature vault with the traps and some ziggurat furniture with them. -------------------------------------------------------------------------------- 10964a4d65 | Edgar A. Bering IV | 2018-12-03 22:25:24 -0500 Add a tile for dispersal traps -------------------------------------------------------------------------------- f51f6a307e | Edgar A. Bering IV | 2018-12-03 22:25:24 -0500 Reduce the trap rate further Based on play-testing. -------------------------------------------------------------------------------- e646171e05 | Edgar A. Bering IV | 2018-12-03 22:25:24 -0500 Re-order some player cleanup in floor_transition The previous order could lead to invalid constriction data if the player revealed a tile and got trapped while constricting a monster (due to a cloud effect, for example). Currently clear_beholders and clear_fearmongers don't reference the monster grid, but they are properties of the level that we're leaving (and touch a vector that references the monster grid), so the call belongs before we save the old level and load the new one. -------------------------------------------------------------------------------- 53fc6d5dac | Edgar A. Bering IV | 2018-12-03 22:25:24 -0500 Tone down the explore trap rate It was too aggressive. Additionally, don't default to alarming if shafts are impossible. -------------------------------------------------------------------------------- ba9ec10dad | Edgar A. Bering IV | 2018-12-03 22:25:24 -0500 Refactor to prevent a crash Separate the calculation of trap-effect chance from firing the effect, similar to banishment. Otherwise, we might shaft the player in the middle of some other state update, leading to invalid dereferences. -------------------------------------------------------------------------------- d1cacb9f1e | Edgar A. Bering IV | 2018-12-03 22:25:24 -0500 Derandomise num_traps_for_place Replace num_traps_for_place with trap_rate_for_place, so that it can be used appropriately in both trap-generation and explore-trap-effect formulas. -------------------------------------------------------------------------------- f44f1ef74f | Edgar A. Bering IV | 2018-12-03 22:25:24 -0500 Lowercase a trap name in a des -------------------------------------------------------------------------------- 723c74fb6f | Edgar A. Bering IV | 2018-12-03 22:25:24 -0500 Don't make alarm traps permanent (MarvinPA) If a player found a permanent alarm trap in favorable terrain they could repeatedly become marked to clear the level. -------------------------------------------------------------------------------- e407b66e8f | Edgar A. Bering IV | 2018-12-03 22:25:24 -0500 Keep friendlies out of traps that affect the player Previously this behavior was limited to Zot traps. It is now abstracted to is_bad_for_player, and alarm and dispersal traps are included in the list. -------------------------------------------------------------------------------- 17e7bed968 | Edgar A. Bering IV | 2018-12-03 22:25:24 -0500 Add dispersal traps Dispersal traps are permanent, and when triggered cause everything in sight of the trap to blink, including the triggerer. The purpose of dispersal traps is to provide an alternative for known teleport traps that is more interesting tactical terrain. The effect destroys a player's positioning, so if it is good the player will want to prevent monsters from stepping on the trap. On the flip side, it can provide a positional rearrangement in a bad situation, though preserving a good result may be challenging since the trap is permanent. -------------------------------------------------------------------------------- db6bce5ac5 | Edgar A. Bering IV | 2018-12-03 22:25:24 -0500 Zot-ify alarm traps Alarm traps now only trigger when the player can see them. When they do, whether it was a monster or a player, the player gets marked. They are now permanent and considered passable terrain by the dungeon builder. -------------------------------------------------------------------------------- 0f39d50430 | Edgar A. Bering IV | 2018-12-03 22:25:24 -0500 Exploration based trap effects. Each tile revealed has a small chance (the chance of generating a shaft trap on that tile for that particular level) of shafting or alarm trapping (thanks gammafunk) the player. With all traps known the 'interesting situation' aspect of shaft (and other) traps was lost. This random explore effect recovers that aspect. It does mean that a player wishing to avoid traps should avoid revealing tiles. This is a better trade-off than the previous behavior. While the 'optimal' play is to not reveal more tiles than necessary, the act of revealing (instead of stepping on) has the potential benefit of giving an item or XP from an easy monster. Further, unlike tracking stepped on tiles, the UI makes it possible to reason about what moves will reveal tiles; and waypoints provide a method of charting particular routes through partially explored areas. However, as minmay has pointed out, Gnolls, Xom, and Ash all give item detection which allow a player to avoid revealing tiles that they know will give no benefit. While minmay presents this as a problem, I see it as a benefit of item detection. -------------------------------------------------------------------------------- 450027eca3 | Edgar A. Bering IV | 2018-12-03 22:25:24 -0500 Remove trap detection from wizmode Now obsolete. -------------------------------------------------------------------------------- ed226419d2 | Edgar A. Bering IV | 2018-12-03 22:25:24 -0500 Reveal all traps Reveal all traps, so that they can be tactically relevant terrain. This removes the "generate tension" aspect of traps, which will return in a later commit. Having all traps be known requires some shaft tweaks. Specifically: Taking a known shaft now has an equal chance of taking you 1/2/3 levels deeper. Shafts now generate on the penultimate level of a branch with a dangerous end. -------------------------------------------------------------------------------- 91793a9df2 | NormalPerson7 | 2018-12-02 16:24:24 -0500 Display the chance for needles to work in blowgun targeter (ebering) When targeting a blowgun with sleeping/paralysis/confusion/frenzy needles, display the chance for the needle to affect the targeted monster in the targeter, or "immune to needles" if the monster is undead or nonliving. -------------------------------------------------------------------------------- 70bc44f8a0 | Edgar A. Bering IV | 2018-12-02 16:01:16 -0500 Improve the pacification chance display (11775) Correctly report when targeting an unpacifiable monster. -------------------------------------------------------------------------------- 0f366d8406 | Edgar A. Bering IV | 2018-12-02 13:37:16 -0500 Describe the restrictions on exploration piety Mention it in the Temple description. After some discussion, the current description "explore the world" is good enough, since many players already bring preconcieved notions of terrain. It would be nice to explain the specific mechanic somewhere but this is ok. -------------------------------------------------------------------------------- 3d1613b9fa | Edgar A. Bering IV | 2018-12-02 13:37:16 -0500 Don't grant explore piety for certain terrain Granting exploration piety for deep water, lava, and "endless" features encouraged players with flight or deep water swimmers to wander around the non-threatening boundaries of shoals and certain lava vaults. Granting exploration piety in the Temple encouraged a player to autoexplore the threat-free temple. -------------------------------------------------------------------------------- e7ea69ae4f | Alan Malloy | 2018-12-01 22:43:55 -0800 Make cheibrodos_fertilizer no_tele_into It's a pretty nasty enclosed space to get shafted into on D:2, as pointed out by /u/DeadKateAlley. -------------------------------------------------------------------------------- 205b0b61ae | gammafunk | 2018-12-01 06:07:48 -0600 Fix a potion loot definition This definition had a leading '/'. -------------------------------------------------------------------------------- 5fd82c5b89 | Edgar A. Bering IV | 2018-11-30 19:27:16 -0500 unbrace and don't unbrace deleted files -------------------------------------------------------------------------------- c6253629db | Nikolai Lavsky | 2018-11-30 17:25:47 -0500 Fix messaging when Maurice steals a weapon (Salmon, Stenella) When Maurice steals a weapon, the games says Maurice steals ... Maurice wields ... It bursts into flame!/Its appearance distorts for a moment./etc. even though the weapon always goes into his alternative weapon slot (unless Maurice's disarmed). The same happens if you give an "alt"-inscribed weapon to a monster via the xo wizard command. Fix this, and also simplify some monster equip code. Instead of passing "bool msg" into monster::equip() and, subsequently into equip_weapon(), equip_armour(), or equip_jewellery(), just don't call equip() if this value is false. Previously, all these functions did nothing unless msg was true. These functions are also renamed to be more descriptive; they do not equip the item, only print the message. [Committer's note: Closes #911] -------------------------------------------------------------------------------- b50937ea47 | gammafunk | 2018-11-30 05:01:23 -0600 Some loot definitions for auxiliary armour It's a common to define all possible aux armour as a loot item in vaults and error-prone to type all the names each time. Make item definitions available as dgn.aux_armour, dgn.good_aux_armour, and dgn.randart_aux_armour for normal, good_item, and randart quality items of this kind. I'll modify various vaults to use these definitions in subsequent commits. -------------------------------------------------------------------------------- f9e11c5b9d | gammafunk | 2018-11-30 05:00:26 -0600 Fix and update a scroll loot item definition In the dgn.loot_scrolls item definition variable used by some vaults, the entry for scroll of enchant weapon was copied three times. Make this one entry with a reasonable weight. Flatten the weights somewhat to make scrolls of enchant weapon, enchant armour, and brand weapon all a bit more common. Update the comments to better describe the intent of these definitions. -------------------------------------------------------------------------------- 29ba69c53a | Edgar Bering | 2018-11-29 18:11:56 -0500 Further adjustments to confused monster actions Simplify some boolean checks and add confusion to one. Re-name an internal function. Re-impair confused monsters judgements so they resume stumbling into harmful clouds, deep water, lava, and other bad situations. -------------------------------------------------------------------------------- 32a748b514 | Alan Malloy | 2018-11-29 09:33:31 -0800 Mark some local functions as static to fix compiler warnings -------------------------------------------------------------------------------- dce9051567 | Alan Malloy | 2018-11-29 09:00:09 -0800 Change inscription on Fencer's Gloves (Yermak) Previously, +Riposte was the only +Foo inscription that didn't give you an active ability (e.g., +Blink for evocable blinking). -------------------------------------------------------------------------------- 60b89c194b | Edgar A. Bering IV | 2018-11-28 23:04:20 -0500 Link the contribution guide from README Make the updated contribution guide more discoverable via github. The README also has some contribution information, these two documents could be harmonized more. -------------------------------------------------------------------------------- 1869896531 | Edgar A. Bering IV | 2018-11-27 22:09:08 -0500 Don't unconfuse intrisically confused monsters Restore important lines to mon-behv to ensure that confused species wander randomly. -------------------------------------------------------------------------------- 35efe2662d | Edgar A. Bering IV | 2018-11-27 21:30:28 -0500 Nerf player-to-monster confusion Confused monsters now always try to set a target. One chance in three a monster is able to move toward or attack its target; though spells, most abilities, evokables, etc. are still forbidden. Confused monsters are still stabbable. If this proves too subtle a nerf this can be upped to a coinflip. The reasons for doing this are twofold. One, Confusion as an effect is available to players at level 1 or 3 in spells, the latter in a starting book. Confusion was effectively a temporary instant kill, which is an extreme effect to provide at such a low level, even with checks. Two, the temporary instant kill was annoying to make permanent because the monster would wander away while the player attacked it. This commit also cleans up some of the mon-act code, specifically removing some dead confusion handling code from the movement handler that was not executing before this patch. -------------------------------------------------------------------------------- 22ffb116fb | Edgar A. Bering IV | 2018-11-27 18:33:17 -0500 Convert Death Channel/Bind Soul to fineffs This resolves the long standing occasional "fireball/iceblast/etc." hit your newly formed spectral friend and make it hostile. -------------------------------------------------------------------------------- da178e91be | Edgar A. Bering IV | 2018-11-27 18:31:22 -0500 Remove the storm bow's rain clouds Placing occasional temporary shallow (or deep) water at random was usually flavour and occasionally very annoying. -------------------------------------------------------------------------------- 6e8b230bb5 | Edgar A. Bering IV | 2018-11-27 18:31:22 -0500 Revise the robe of Clouds The old robe of clouds was basically a +3 {rElec +Fly} robe; it's gimmick of spawning mist and rain was almost always flavour. The new robe is now +3 {+Thunder rCloud rElec}, losing the mist gimmick in favor of evokable radius 2 storm clouds. The evocation costs 5 MP and has the same difficulty rating as evokable invis. -------------------------------------------------------------------------------- d9f91f9301 | Edgar A. Bering IV | 2018-11-27 18:29:02 -0500 checkwhite -------------------------------------------------------------------------------- ee2f500f82 | stenella | 2018-11-27 15:00:30 -0800 MSVC support cont. Update gen-all.cmd to be up to date with the current makefile, namely adding aptitudes and crawl_manual.txt, which stops MSVC builds from crashing when they can't find the files. Add some more MSVC build outputs to gitignore Copy CREDITS.txt from the root directory to docs/CREDITS.txt to match the makefile/release versions; add it to gitignore. Change MSVC/stdint.h to match MSVC/include/stdint.h , which we changed earlier in the first MSVC compatability commits. -------------------------------------------------------------------------------- c8aadda88e | gammafunk | 2018-11-26 20:37:39 -0600 Update comments describing the Branch struct -------------------------------------------------------------------------------- db311f7933 | gammafunk | 2018-11-26 20:37:38 -0600 Update marker info in the DES syntax guide Markers are no longer used for several of the cases mentioned. -------------------------------------------------------------------------------- 87d5157cd8 | gammafunk | 2018-11-26 20:37:36 -0600 Fix some lua loot definitions I don't think this caused any errors, but these trailing slashes are not needed. -------------------------------------------------------------------------------- 6f7cfd9739 | Edgar A. Bering IV | 2018-11-25 20:18:00 -0500 Unrelocate some on-sight logic (gammafunk) -------------------------------------------------------------------------------- b5b494a93f | Edgar A. Bering IV | 2018-11-25 20:00:36 -0500 Make player ghosts and pan lords immune to pacification Both player ghosts and pandemonium lords have wildly varying HP. While these numbers are revealed in the former case, player ghosts are a somewhat special monster. In the latter case the revealed HP based on monster class is a lie, and the variance in max hps is larger due to how pandemonium lord max hp is calculated. To avoid edge cases with these two monster types this commit makes both types immune. -------------------------------------------------------------------------------- 28a179404a | Edgar A. Bering IV | 2018-11-25 20:00:36 -0500 Display pacification chance in Heal Other targeter With the changes to pacification to depend only on numbers visible to the player, it is now not an information link to display pacification chance in the pacification targeter. This also changes pacification to abort when used on monsters which are truly impossible to pacify (as opposed to those whose pacification chance rounds to 0% in the display). -------------------------------------------------------------------------------- cf71bd98f6 | Edgar A. Bering IV | 2018-11-25 20:00:36 -0500 Simplify Heal Other formula Previously, pacification checked if 1d( int_mod * (invo + 1) * healing / holi_mod ) >= avmhp Healing depended on power by a random roll, which depended on a random division of invocation skill. The new formula checks if biased_random2( int_mod * (invo + 1) * (30 + invo) / holi_mod, 2) >= avmhp 30 + invo passes through the function as the power value, and is also used to determine how much to heal the target, which is left unchanged. biased_random2(sides, 2) does a good job of matching the old success distribution and is easier to reason about and write a chance success display for (see next commit). -------------------------------------------------------------------------------- b59e870bec | Edgar A. Bering IV | 2018-11-25 20:00:36 -0500 Change pacification to depend only on monster type Pacification depending on a monster's max hp made it harder to reason about (why should one jackal be harder to pacify than another). Average HP for the monster type is displayed in monster info. -------------------------------------------------------------------------------- 8f93ed435f | Edgar A. Bering IV | 2018-11-25 20:00:00 -0500 Prevent invalid_monster messages when converting 036aa52 dismisses summoner's summons on attitude change. One place where attitude changes is on bribe or Beogh follower acquisition. If this happens on the turn the summoner comes into view and their summons are already visible those now expired summons need to be filtered out after the summoner's conversion occurs. -------------------------------------------------------------------------------- 7bc77c830a | Edgar A. Bering IV | 2018-11-25 20:00:00 -0500 Relocate some on-sight logic to the correct place -------------------------------------------------------------------------------- abef753f24 | gammafunk | 2018-11-25 18:14:40 -0600 Some changelog updates (now through 0.23-a0-462-g7c42f869) Mention a few items missed in the last update, reword a few items, and fix a couple typos. -------------------------------------------------------------------------------- 7c42f86923 | Edgar A. Bering IV | 2018-11-25 18:06:49 -0500 Nerf the acid effect of minor destruction The formula for power / 2 (versus power for the rest) goes back to the svn initial revision. Acid was buffed in 8761da415 which intended only to buff player dracs, but also buffed Makhleb's minor destruction. This increases the power divisor significantly, to make the damage curve for acid closer to (but still to the right of) flame. The effect is still very strong (rarely resisted, chance to corrode). -------------------------------------------------------------------------------- ff60f6859b | Edgar A. Bering IV | 2018-11-25 16:47:09 -0500 checkwhite INSTALL.txt -------------------------------------------------------------------------------- 9be7e05e39 | Edgar A. Bering IV | 2018-11-25 16:46:46 -0500 changelog through 0.23-a0-459-ge787970 -------------------------------------------------------------------------------- e787970c06 | stenella | 2018-11-25 10:03:44 -0600 Rest the Ancestor Add a delay interrupt that executes when the ancestor heals to full HP. This is facilitated by a new check for ancestor HP being full; this is always true if the ancestor doesn't exist or is out of sight (to avoid information leaks). Introduce a new boolean option rest_wait_ancestor to toggle whether resting should always wait until the ancestor is healed. This interacts with rest_wait_both according to the following table: | rest_wait_both | rest_wait_ancestor | expected behavior | | -------------- | ------------------ | ------------------------------ | | True | True | Rest until (HP full and MP full and Ancestor full) | | False | True | Rest until (HP full or MP full) and (Ancestor full) | | True | False | Rest until (HP full and MP full) or (Ancestor full) | | False | False | Rest until (HP full or MP full or Ancestor full) | [ Committer's notes: Closes #900. Tweaked some conditionals, adding some missing conditions or simplifying. Added some comments. Tweaked the wording of the option. Adjusted the interrupt to not leak information about the ancestor when it is out of LOS. ] -------------------------------------------------------------------------------- 93a6ea9522 | stenella | 2018-11-25 11:26:50 +0800 MSVC gitignore Exclude MSVC outputs Modify vcproj exclude to include vcxproj files -------------------------------------------------------------------------------- 6f6daefbf7 | gammafunk | 2018-11-24 18:41:10 -0600 Add more checks for invalid constrictions Usually monster death handles the necessary constriction cleanup, but there are cases involving e.g. summons where a summoner's death can lead the constriction code to attempt to constrict a summoned monster that's been reset. This commit adds aliveness checks to the methods that check for invalid constrictors and constrictees to unconstrict and also requires aliveness before attempting to apply damage. -------------------------------------------------------------------------------- c514d67198 | NormalPerson7 | 2018-11-24 11:28:03 -0500 Don't let Ru offer mummies the no potion heal mutation (11750) No potion heal has no real effect on mummies since they can't quaff potions anyway, so this sacrifice didn't really give up anything. -------------------------------------------------------------------------------- e12115f95e | NormalPerson7 | 2018-11-23 21:07:20 -0500 Don't halve the MR of magic immune creatures from AF_VULN (11754) Previously phantasmal warriors were able to halve the MR of magic immune creatures, which was announced and appeared to have an effect even though it really had no effect whatsoever. Hence, add a check to exit the case for AF_VULN early if the defender is immune to hostile enchantments. -------------------------------------------------------------------------------- ae4fabde77 | Edgar A. Bering IV | 2018-11-23 15:06:03 -0500 Disallow Twisted Resurrection for Enslaved Souls (Doesnty) This worked exactly like the old player spell, allowing access to permanent allies that used stairs and bypassed Yred limits. Closes #889 -------------------------------------------------------------------------------- e0e9ef7961 | NormalPerson7 | 2018-11-23 12:35:20 -0500 Let the sturdy frame mutation reduce stealth/dodging penalties Previously, the sturdy frame mutation was taken into consideration only for the adjusted_armour_evasion_penalty method, not the unadjusted_armour_evasion_penalty. The latter of the two methods is used for stealth penalties, Jiyva stat shuffling, autotraining and some parts of the dodging penalty calculations, which means these things were not affected by the sturdy frame mutation. This meant the claimed ER-2 of the sturdy frame mutation did not have the full effect of reducing the ER by 2. Hence, move the sturdy frame mutation's effect to unadjusted_armour_evasion_penalty. -------------------------------------------------------------------------------- 453ed5a3af | Edgar A. Bering IV | 2018-11-23 12:20:01 -0500 Don't extend Ru's aura through glass (0011769) Monsters can't make attacks through glass, so they should not have their attacks redirected. -------------------------------------------------------------------------------- 1044d4cbad | NormalPerson7 | 2018-11-21 16:49:30 -0500 Fix a hints mode memorise menu message from extending horizontally The text from hints_target_mode was not properly broken up. -------------------------------------------------------------------------------- b6f590f0af | Edgar A. Bering IV | 2018-11-21 13:33:27 -0500 Buff the scythe "Finisher" Another entry in the unrand revision project. Finisher, as a speed scythe, was still not good. This commit removes Str+3 (random stat sticking) in favor of giving it an instant kill mechanic. The scythe now has a (50 - hd) / 200 chance of exploding a monster into chunks on any hit where damage is done. This translates to slightly worse than 1/4 chance against popcorn, decreasing to a 1/10 chance against an orb of fire. Compare to distortion's 3/20 odds of either banishing or instant teleporting a monster. -------------------------------------------------------------------------------- 8e4cbf7b70 | gammafunk | 2018-11-20 16:46:47 -0600 Disallow Sticks to Snakes under sacrifice love (Reeces) This is an ally creation spell that would only create hostile allies under sac love. Disallow use of this spell with sac love as we do for all ally-creating summon and derived undead spells. -------------------------------------------------------------------------------- 1c01f63178 | gammafunk | 2018-11-18 22:40:00 -0600 Fix exclusions for stationary monsters behind solid features (paterick) Commit 57debff0 had exclusions not continue past solid features for stationary monsters, but this doesn't create a proper exclusion in all cases. In particular, such monsters can act behind solid features like grates and statues that block line of effect but not line of sight, and we want exclusions to continue past such features. The vault minmay_statue_bubble is an example of placing a statue monster behind granite statues where the current logic makes an incorrect exclusion. The opacity class we want is mostly opacity_no_trans ("no translocations"), but that rule considers half-opaque features like clouds that change quickly over time. Hence this commit makes an opacity_fully_no_trans class that ignores half-opaque features and has exclusions for stationary monsters use this class. -------------------------------------------------------------------------------- 7b583b2f2c | Alan Malloy | 2018-11-18 13:27:19 -0800 Update robe of vines text (Angani, #11765) -------------------------------------------------------------------------------- 036aa52d93 | gammafunk | 2018-11-17 13:31:44 -0600 Expire a monster's summons upon attitude change (7730) Currently, if a monster's attitude changes due to being charmed/uncharmed, pacified, or slimified, any of its active summons keep the summoner's old attitude. This is awkward in the case of slimify and pacify, since the player can't then kill the slimified/pacified monster to remove its hostile summons without incurring penance. Additionally, for neutral monsters as well as for charmed monsters (e.g. wand of enslavement), their own summons will begin to attack them upon attitude change. The player might expect summons to convert to the new attitude of their summoner. However with either that approach or the current one of no conversion, the player is encouraged to game the timing and AI of monster summon spells to either avoid danger or get easy damage on the summoner. This commit has any monster's summons abjure when its attitude changes for any reason. This includes whenever a monster is slimified, pacified, bribed with gozag, or becomes charmed/uncharmed via enslavement. Non-spell summons like the Royal Jelly Spawns and monster-created derived undead like the necromancer monster's simulacra are not affected by this change. This commit also removes code to convert a battlesphere's attitude upon attitude change of its summoner, since that's no longer needed. -------------------------------------------------------------------------------- 768d57b80b | gammafunk | 2018-11-16 02:03:22 -0600 Add TAG MAJOR for a shadow trap summon enum value This won't be needed after we bump the major version. -------------------------------------------------------------------------------- 76343caf27 | gammafunk | 2018-11-16 01:45:04 -0600 Remove an unusaged function argument -------------------------------------------------------------------------------- a32dbc5195 | gammafunk | 2018-11-16 00:53:54 -0600 Some monster and loot vaults from minmay All save one early dungeon vault are 098 vaults that place monsters and loot in abstract or geometric arrangements. They are float vaults or minivaults depending on size and use of exits. One large vault has bottom orientation since it spans the entire bottom of the level. Nearly all changes from the original submission are to fix small DES errors or to reformat lua code. I did add lower weight to one vault that places a high item count. -------------------------------------------------------------------------------- db6ba403a5 | gammafunk | 2018-11-16 00:52:37 -0600 Some shop vaults from minmay A pre-Lair shop with 'used' weapons: good base types that have no ego and -1 to -4 enchantment. A shop that's takin' it easy with Cheibriados. It sells plate armour, crystal plate armour, or unrands that all have ponderous ego. A jewelry shop featuring enchantable jewelry types. A shop of 'mayhem' featuring weapons and spells that have AOE. Finally, a 'Mass Market' featuring weapons, armor, and ammo that could be considered heavy (rip player burden). -------------------------------------------------------------------------------- ce47f42902 | gammafunk | 2018-11-16 00:48:07 -0600 Clean up tags on some shop vaults Add transparent tag for vaults missing this, using a KMASK for one vault with a disconnected decorative area. Remove no_trap_gen for vaults which don't need this. Add the extra tag for vaults that don't place any monsters or loot. -------------------------------------------------------------------------------- b1ff92dab2 | gammafunk | 2018-11-16 00:48:08 -0600 Derandomize use of the 'transparent' tag The randomized setup function used in many of Kennysheep's vaults gives a vault the transparent tag based on a random roll. This tag should be used whenever a vault has multiple entrances running through the vault and where the vault either has no disconnected areas or these areas properly have a KMASK with the opaque tag applied. This is to help levels generate fewer vetoes, since otherwise the validator assumes a vault is impassible for connectivity purposes. Hence its use shouldn't be randomized. Have the setup function used for these vaults unconditionally place this tag. -------------------------------------------------------------------------------- b8f687ff51 | gammafunk | 2018-11-16 00:45:50 -0600 Some Temple entry vaults from minmay Temple branch entry vaults, most of which have abstract or geometric themes. The exceptions to this are a vault that generates items (themed as an 'offering') and another with a single orc priest guarding the entrance. -------------------------------------------------------------------------------- d959f4f892 | gammafunk | 2018-11-16 00:14:27 -0600 Add some section markers to temple.des -------------------------------------------------------------------------------- ef876f6df9 | Edgar A. Bering IV | 2018-11-16 00:06:33 -0500 checkwhite and delete MSVC build byproducts -------------------------------------------------------------------------------- 57debff0a5 | stenella | 2018-11-15 23:33:19 -0500 Don't autoexclude past glass sometimes (11658) When placing an exclusion on a stationary monster don't extend the exclusion past glass. [Committer's note: Closes #892, checkedwhite and reworded] -------------------------------------------------------------------------------- 79ed067e35 | NormalPerson7 | 2018-11-14 22:55:50 -0500 Mention Ijyb and Maurice's wand-carrying [Committer's note: Closes #899. Tweaked some wording.] fixup! Mention Ijyb and Maurice's wand-carrying in their descriptions -------------------------------------------------------------------------------- 50e03f52b4 | Edgar A. Bering IV | 2018-11-14 22:13:29 -0500 Tweak a new arrival vault (gammafunk) Consistent stone usage and a no_item_gen KMASK. -------------------------------------------------------------------------------- bb43e8436e | Edgar A. Bering IV | 2018-11-14 21:48:07 -0500 An early lizard minivault (WanderingBlade) -------------------------------------------------------------------------------- 7259ab32d2 | Edgar A. Bering IV | 2018-11-14 21:48:07 -0500 Update CREDITS -------------------------------------------------------------------------------- b76f445567 | Edgar A. Bering IV | 2018-11-14 21:48:07 -0500 Some variable vaults (WanderingBlade, 11140) A decor river bridge. A guarded_unrand vault for the ratskin cloak featuring hell rats at a very early depth. An evil kobold church, from the same sect as those kennysheep sewer kobolds. -------------------------------------------------------------------------------- ed1f8b9630 | Edgar A. Bering IV | 2018-11-14 21:48:07 -0500 A shower themed Vaults entry (ximxim, 10658) -------------------------------------------------------------------------------- 68ef482e38 | palyth | 2018-11-14 21:48:07 -0500 A winding forest swamp entry vault (11061) -------------------------------------------------------------------------------- 4de353cee3 | Edgar A. Bering IV | 2018-11-14 21:48:07 -0500 KennySheep inspired adjustments to a sewer (10035) -------------------------------------------------------------------------------- 79c5e3b8a9 | Edgar A. Bering IV | 2018-11-14 21:48:07 -0500 Branch entry vaults (skrybe, 11232) -------------------------------------------------------------------------------- 0b3e9c96a6 | Edgar A. Bering IV | 2018-11-14 21:48:06 -0500 Multi-coloured glass columns for Zot (Skrybe, 11232) -------------------------------------------------------------------------------- 44191be8d8 | Edgar A. Bering IV | 2018-11-14 21:48:06 -0500 A decorative Xom vault for Snake (Skrybe, 11133) -------------------------------------------------------------------------------- ee0713f4a2 | Edgar A. Bering IV | 2018-11-14 21:48:06 -0500 New arrival vaults (WanderingBlade, 11132) -------------------------------------------------------------------------------- 796c40deb2 | Edgar A. Bering IV | 2018-11-14 21:48:06 -0500 An arrival vault (Beargit, 11400) -------------------------------------------------------------------------------- 30b1108d6a | gammafunk | 2018-11-13 21:38:18 -0600 Describe the enchantment of dancing weapons This commit includes the enchantment in any dancing weapon description. Curse state is not included to keep the description shorter, just as we do when describing wielded weapons for other monsters. Curse info will still be revealed for the weapon when the dancing weapon is destroyed. -------------------------------------------------------------------------------- 923571cada | gammafunk | 2018-11-13 21:38:18 -0600 Remove a redundant message about dancing weapons Currently when a dancing weapon comes into view, it generates a "...comes into view" message with a followup "It is a..." containing the exact same information. The second message used to be part of Ash's passive monster equipment identification, where the first message had less information and the second contained more information ("Ashenzari warns you: ..."). Now that monster equipment is always identified when the monster is first seen, we don't need the second message. -------------------------------------------------------------------------------- 8c0b414915 | gammafunk | 2018-11-13 21:38:18 -0600 Reveal equipment for monsters behind glass Before this commit, monster equipment was only revealed when the monster actually generated an interrupt. Monsters behind glass don't generate interrupts, so their equipment wasn't getting identified. We now identify equipment unconditionally when a monster is seen. The equipment identification call for interrupts currently has to remain due to message ordering, since travel messages happen before seen monsters are processed. It may be good to refactor travel code so that this doesn't happen. Another possibility is to set all relevant monster equipment as identified when the monster is created, preventing the need for any equipment identification pass. -------------------------------------------------------------------------------- 0174fd80c1 | Aidan Holm | 2018-11-11 11:17:33 +0800 Fix menu item rendering bug The row height calculated for the last menu item did not include padding, which caused it to appear vertically cramped. -------------------------------------------------------------------------------- 8871014cbb | stenella | 2018-11-11 10:56:53 +0800 Fix typo/color layering bug in tutorial Due to the way strings are formatted after being read from this function, this tag was being treated as extra text. It's not needed, so remove it. Fix a grammar oopsie. -------------------------------------------------------------------------------- f02c810438 | advil | 2018-11-09 08:44:38 -0500 Validate file pointer when loading help parts This might be better to handle without a crash at all, but right now there is a possible segfault in fgets if something is wrong with this file, so check it explicitly. Possibly these files should be explicitly validated on game load in addition (I think only their containing folder is right now). -------------------------------------------------------------------------------- 33f1def9c6 | gammafunk | 2018-11-08 18:48:30 -0600 Remove a vault that breaks autoexplore (minmay) Removed by request of the vault author. The vault minmay_item_behind_shaft generates a corridor with a shaft at the end in front of an item. If you recognize this vault you'll dig into it, apport, use allies to trigger the hidden shaft, or just return when the level below is cleared. If you don't recognize it, you'll autoexplore into it, always triggering the shaft. To some extent all vaults that place hidden traps are spoilery, but this is an egregious case. Consider this elf flogged. -------------------------------------------------------------------------------- 4fac899665 | advil | 2018-11-08 19:37:47 -0500 Potential fix for Mojave black screen issues Workaround based on: https://discourse.libsdl.org/t/macos-10-14-mojave-issues/25060 This may be fied in SDL2 master, in which case we should revert this workaround and update the submodule, when it gets released. -------------------------------------------------------------------------------- 0aa8dd0f38 | Aidan Holm | 2018-11-08 21:56:56 +0800 Limit extra Ru ability info to followers (amalloy) The Ru sacrifice ability description contains code for showing sacrifice significance and piety gain, which crashed if the player was not following Ru for some abilities. This commit simply hides that line of text, as well as mutation-specific text for sacrifices that add mutations, and re-enables using the ability description view for ?/A, which is currently the only way for non-followers to view the description. -------------------------------------------------------------------------------- 57a811004e | gammafunk | 2018-11-08 00:49:00 -0600 Refactor LOS attack spell code Use _player_hurt_monster() to apply damage and handle sanctuary checks and wound messages. Also use refs instead of pointers where possible. -------------------------------------------------------------------------------- 15b4f39479 | gammafunk | 2018-11-08 00:49:00 -0600 Centralize conducts for some player damage spells For player spells that don't use a struct bolt to apply damage, have them use the now-generalized _player_hurt_monster() function. This centralizes the handling of aspects like Zin's sanctuary, god conducts (for most instances), and printing wound messages. Previously this logic was repeated throughout spl-damage.cc, with some spells not properly applying sanctuary rules or having god conducts applied in all cases. -------------------------------------------------------------------------------- 0eb21a9ae9 | gammafunk | 2018-11-08 00:20:42 -0600 Fix and simplify god conduct code The god_conduct_trigger class currently has separate functions to enable and disable the conducts to go along with set_attack_conduct(). This is so that conducts could be conditionally enabled at a time when the relevant monster might have died, but this functionality isn't actually necessary for any current god conducts. In all cases we've ensured that the monster is alive before effects or damage happen, and in all cases we want to apply these conducts if the effect kills the monster. This commit enables the conduct at the time set_attack_conduct() is called and removes the enable/disable functions. Additionally set_attack_conduct() is refactored to take a ref instead of a pointer. This commit also fixes god conducts being applied too late for melee and ranged combat, and cleans up the god conduct code for some spells. Before this commit, melee and ranged attacks against allies would not actually apply the conduct if the attack killed the ally. It might be best to replace the use of a scoped god_conduct_trigger variable and destructor with a simple function call. Message ordering is the only thing that might complicate this. -------------------------------------------------------------------------------- 15caca4c09 | gammafunk | 2018-11-08 00:11:18 -0600 Don't prompt for the Arc Blade spell effect If the player triggers static discharge from this unrand when friendlies are around, they are prompted whether to cancel this effect. 3a6879684 introduced this when it reworked the unrand to cast static discharge directly. This commit prevents the prompt when the spell is triggered via the unrand, letting the prompt happen once, before the attack is made. -------------------------------------------------------------------------------- 236c2702d2 | gammafunk | 2018-11-08 00:11:18 -0600 Better sanctuary removal for melee/ranged attacks Zin's sanctuary could sometimes fail to get removed for melee and ranged attacks when an attack doesn't continue past the hit phase. For example, if the attack killed the monster, no sanctuary removal would occur. This commit puts the sanctuary removal at an earlier location in the attack phase to prevent this. -------------------------------------------------------------------------------- 9d4b7edeb2 | Alan Malloy | 2018-11-07 13:35:24 -0800 Don't crash when looking up Ru sacrifices (JumpingArm) This is a temporary fix, making the ?/A menu display less useful information about Ru sacrifices. This commit should be reverted once a proper solution is in place. This is in relation to https://crawl.develz.org/mantis/view.php?id=11752 -------------------------------------------------------------------------------- 92528d7c89 | NormalPerson7 | 2018-11-06 13:15:15 -0800 Add a prompt for attacking living things while under divine protection Killing natural monsters while under Elyvilon's divine protection causes penance. However, there is no prompt for this, and it seems natural for the player to invoke divine protection when low on HP so they don't die, then heal up, and once they've healed, try to fight the enemy causing them trouble. It was easy for players to accidentally cause penance by killing enemies while under divine protection in this way. Hence, add a prompt for attacking natural monsters while divine protection is active. Penance will not actually trigger until the monster is killed, but it's better to be safe than sorry. -------------------------------------------------------------------------------- 86cf76cffc | Alan Malloy | 2018-11-06 13:13:51 -0800 Remove unused code for jump attacking into a sanctuary -------------------------------------------------------------------------------- 368ce007a8 | NormalPerson7 | 2018-11-05 17:18:52 +0000 Don't corrode or appear to damage rAcid+++ enemies with Punk (11746) (#894) Acidic attacks, from the acidic bite mutation and Punk, previously displayed the "[Enemy] is splashed with acid" line against all targets, which suggested to the player that acid immune targets still took extra damage from these attacks even though any damage was in fact resisted. Additionally, this was able to corrode acid immune enemies, which does not seem thematically correct. Therefore, in monster::splash_with_acid, add a check at the start of the method for acid immunity, which if true, return early from without any opportunity to damage or corrode the monster. Acid resistant enemies correctly take half-damage from acid splash and resist corrosion half of the time both before and after this change. -------------------------------------------------------------------------------- 0063841da3 | NormalPerson7 | 2018-11-04 08:52:19 -0500 Improve spacing in a return statement This makes it so that all the code is nicely aligned, so that the logic can easily be followed by examining the indentation. Also remove all unnecessary parentheses. -------------------------------------------------------------------------------- 025b0751b0 | NormalPerson7 | 2018-11-04 08:52:19 -0500 Give trolls the correct gourmand message, cleanup code Commit 394fb522 incorrectly assumed troll players are carnivorous, which they are not. Hence, include trolls' gourmand mutation in the logic for the carnivorous message for gourmand amulets being useless. Additionally, fix a couple of message lines too long, improve the whitespace around the ifs, and make sure everything is aligned correctly. -------------------------------------------------------------------------------- 64599a10a2 | stenella | 2018-11-03 12:36:09 -0400 Leave Dual-Wielders Alone Fixes #858 If a dual-wielder's primary weapon was removed by Tukima's (determined by a coin-flip in monster::weapon()) , their mcache entry would be invalided by this check, which didn't consider the valid option of an alt-hand-wielded weapon. -------------------------------------------------------------------------------- 9fa8be9dae | stenella | 2018-11-03 12:34:45 -0400 Change LRD flavour text for doors https://crawl.develz.org/mantis/view.php?id=11695 LRD works on door tiles, which seem to be mostly wood. Explain to the player that the door frame itself is what is shattering, not the door. Also, make fall-through's consistent. -------------------------------------------------------------------------------- 394fb52218 | Stenella | 2018-11-03 12:33:11 -0400 Properly notify non-users of Gourmand (11692) Previously, the wear message for gourmand was the same regardless of whether it would work; change it to reflect the various reasons why it might not work. Carnivorous/herbivorous mutations cover most species. `foodless` covers mummies and the extra case of lich transformations, for added lore. Vampires don't seem to fit into either of these cases, so they are checked explicitly. -------------------------------------------------------------------------------- 2bcd0a2a9b | stenella | 2018-11-03 12:23:31 -0400 Check for stat_zero slow before telling player they're good to go https://crawl.develz.org/mantis/view.php?id=11476 If a player is slowed in some way, then stat zero'd, when the slow runs out, they'll be told they've been sped up, despite still being slow. Check to make sure players aren't being slowed by stat zero before telling them they're fast again. -------------------------------------------------------------------------------- 8eab93fbe2 | wheals | 2018-11-02 11:11:38 +0200 Don't print god warnings about a spell you can't memorise anyway. -------------------------------------------------------------------------------- 98fffd3787 | wheals | 2018-11-02 11:10:07 +0200 Allow seeing the memorise menu while confused (#11517). Checks later in the code still prevent memorisation. -------------------------------------------------------------------------------- 5214e5fee5 | gammafunk | 2018-11-01 23:03:18 -0500 A new Ijyb splash screen from ploomutoo -------------------------------------------------------------------------------- cf17ac6c65 | advil | 2018-10-31 14:42:38 -0400 Add aliveness checks to some monster equipment functions Various bits of the subsequent code in these functions may rest on getting a living, valid monster. This is possibly what was causing crashes when Fennar refrigerates himself with other enemies on screen. (gammafunk/amalloy) -------------------------------------------------------------------------------- 6ce9549c54 | gammafunk | 2018-10-31 01:11:03 -0500 Some decorative tweaks to a Bazaar vault Don't recolor features like doors and the exit hatch, and use yellow for the transparent stone instead of white. The surrounding stone is also white, so having transparent stone be the same color is confusing in console. -------------------------------------------------------------------------------- 6e9e0f2070 | stenella | 2018-10-30 13:58:41 -0700 Console support Allow the building of console DCSS in MSVC. Change a unicode character to its equivalent code Wrap tilecell and tiledgnbuf.cc in the same ifdef that their header files are wrapped in. -------------------------------------------------------------------------------- e82cdd144a | stenella | 2018-10-30 13:58:41 -0700 MSVC2017 Compatability and relocation of project files Updating submodule projects without changing the submodules themselves seems cumbersome, so move vcxproj files to a separate directory within the main repository. Fix project files so they support x64 and Debug configurations. Update INSTALL.txt to reflect current reality -------------------------------------------------------------------------------- 8c51ad5a29 | gammafunk | 2018-10-29 20:11:51 -0500 Don't apply negative energy effects to monsters for Drain Life This spell is only supposed to do damage and give the drained HP to the caster. The negative energy draining effects accidentally began to be applied to monsters due to fb95405b. -------------------------------------------------------------------------------- 27fa94fbb5 | gammafunk | 2018-10-29 20:11:51 -0500 Fix a crash for LOS attack spells (MeekVeins, amalloy) It's possible for a monster to die after applying damage flavour effects but before the direct damage is applied. This invalidates the monster pointer needed for god conducts, and was causing crashes with e.g. Drain Life. This commit adds a necessary check for the monster being alive before trying to apply conducts. Additionally Drain Life shouldn't actually the flavour effect of negative energy, and this will be fixed in a subsequent commit. -------------------------------------------------------------------------------- 4a5eb334b0 | Skrybe | 2018-10-28 22:57:25 -0400 Address a TODO in layout_concentric_octagons Adds the Snake variant of the layout to Lair. The notes didn't say that anything needed to be addressed before adding to Lair, so the layout code isn't changed. -------------------------------------------------------------------------------- 786a77dc79 | Skrybe | 2018-10-28 22:57:25 -0400 Address a TODO in layout_cave_pools Adds the layout to D, makes decreasing amounts of rock clumps at deeper depths. -------------------------------------------------------------------------------- 141017ece0 | gammafunk | 2018-10-28 16:43:56 -0500 Lower the average number of charges for some wand types Wand charges were lowered by the removal of scrolls of recharging, yet the average number of charges for many powerful wands is still quite high. Over 70 charges generate in a 3-rune game for paralysis and polymorph, over 50 for wands of digging, and over 40 for enslavement. For the weaker wands, wands of flame and random effects generate over 150 charges each per game. We'd like the charges for each wand type to be meaningfully limited, especially for the more powerful ones. This commit lowers the average number of charges per wand for the following wand types: | Wand | Before | After | | -------------- | ------ | ----- | | digging | 12.5 | 5 | | enslavement | 12.5 | 8 | | paralysis | 12.5 | 8 | | polymorph | 12.5 | 8 | | flame | 24.5 | 16.5 | | random effects | 24.5 | 16.5 | Digging takes the biggest relative reduction because of how powerful this wand is at enabling escape, controlling monster movement, and breaking into vaults. Wands of flame and random effect charges are still too high, but they remain as the more spammable wands until their other design issues can be addressed. Flame duplicates a spell and is something you want to carry all game due to how good steam clouds are, despite being low-level. More design work could be done with some problematic wands like polymorph, flame, and random effects, possibly combining parts of them with other evocables. -------------------------------------------------------------------------------- 9c9d49f623 | Edgar A. Bering IV | 2018-10-27 21:39:50 -0400 Prevent unwielding by transforming After re-introducing this bug, squash it again by further refactoring. Both this and the bug fixed by 1406302 were caused by transform() calling functions whose behavior depended on the player's transformation while a player was in a partially transformed state. This lead to fragile and unpredictable behavior. Some of it is unavoidable, which comments point out. There may be other bugs lurking with a similar cause. -------------------------------------------------------------------------------- b2d581486a | Edgar A. Bering IV | 2018-10-27 14:24:46 -0400 Update ploomutoo in CREDITS.txt -------------------------------------------------------------------------------- 3a68796849 | gammafunk | 2018-10-26 22:45:34 -0500 Rework the Arc Blade (minmay) Currently this unrand effectively casts static discharge many times, but with the melee defender as the target instead of the usual random one. The multiple casting led it to have extremely high damage of over 50% more than a demon blade of speed. Doing high secondary effect damage to the primary target is already well-covered by existing unrands. A weapon that can do good damage to nearby monsters is a more interesting unrand concept. This commit reworks the arc blade melee effect to cast static discharge once with increased spell-power of 100 + random2avg(100, 2), well past the usual 100 spell-power cap. This effect still triggers with the same 1/3 chance as before. The weapon enchantment is also increased from +4 to +8, making it not so awful versus resistant monsters. Using a normal cast of static discharge allows it to arc better to monsters adjacent to the player, and the high spell-power makes this damage effective. Its damage versus a single target is still excellent, similar to a demon blades of electrocution/speed, but not as overpowered as it was prior to this commit. Finally, it now has a proper melee attack prompt for harming allies. -------------------------------------------------------------------------------- 752426dcc1 | gammafunk | 2018-10-26 22:45:34 -0500 Fixes, refactoring, and message cleanups for static discharge The safe_discharge() function for the attack prompt warnings of static discharge didn't properly consider the player as an arc location. This meant that casting it didn't give a warning in some cases where an ally could be damaged. Also refactor the main cast_discharge() spellcasting function to allow non-players to call it, then have monsters use this when casting the spell. Previously the monster casting code partially duplicated this function. Finally, simplify the messaging a bit to remove a separate message about lightning arcs, adding that to the main damage message instead. The message spam from this spell is pretty high and could probably be improved to only print wound messages after all arcing is completed. -------------------------------------------------------------------------------- dc5cae9113 | gammafunk | 2018-10-26 22:45:34 -0500 Remove an unnecessary scope block -------------------------------------------------------------------------------- 8079fb2f1c | gammafunk | 2018-10-26 22:45:34 -0500 Refactor melee attack prompts for some unrands -------------------------------------------------------------------------------- 7ed3b4cd49 | gammafunk | 2018-10-26 22:45:34 -0500 Apply god ally conducts for Static Discharge, Irradiate, and Shatter Previously these didn't apply god conducts when harming allies, despite their warning the player about penance for this. -------------------------------------------------------------------------------- 1903759892 | gammafunk | 2018-10-26 22:45:34 -0500 Properly apply god ally conducts for LOS damage spells Previous to this commit, Ozo's Refrigeration and the Singing Sword's spell didn't apply god conducts when damaging allies, despite them warning the player about penance. Now these conducts are applied properly. -------------------------------------------------------------------------------- d7a6ca6280 | Edgar A. Bering IV | 2018-10-26 21:30:35 -0400 Add Stenella to CREDITS -------------------------------------------------------------------------------- 1406302deb | stenella | 2018-10-26 21:17:13 -0400 Simplify HP calculations (11728) Combine calc_hp() and recalc_and_scale_hp() into a single function. Remove the default for the rotting parameter to get_real_hp() and require it be explicit in each usage. Add a check to get_real_hp() for the presence of hp changing transmutations, and handle those through calc_hp instead of some special cases. Sequence equipment melding and HP calculation appropraitely. (This fixes 11728.) [Committer's note: Closes #875, #877. Checked whitespace, revised the commit message to reflect the final state of the patch. Simplified a check.] -------------------------------------------------------------------------------- e56fa010db | Stenella | 2018-10-26 15:55:52 -0700 MSVC 2017 Compatibility (#878) -------------------------------------------------------------------------------- 66a18ee0fb | NormalPerson7 | 2018-10-25 18:53:14 +0100 Start Wn with a spell memorised if they have only one level 1 spell If wanderers have more than one level 1 spell, they may not have enough spell levels to memorise all of them, and so the player should get to choose which spell to memorise. If, however, wanderers have only 1 level 1 spell in their library, and they have a spell level available, it makes sense for the player to have that spell automatically memorised. Hence, in this case, memorise the player's only level 1 spell. -------------------------------------------------------------------------------- 7e0f0f3944 | NormalPerson7 | 2018-10-25 18:53:14 +0100 Announce the starting items and spells for wanderers (11725) Previously, players that did not look at their M screen would not be aware of if they had spells in their spell library. Therefore, print the player's inventory and spell library to the message log at the start of the game. Also, take a note of the spell library to include in the dump. This is done by expanding the note_wanderer_items function and renaming it to note_wanderer_equipment (to be more accurate). This commit also adds support to print any spells the player begins with memorised at the start, although this currently never happens. -------------------------------------------------------------------------------- 305c090e76 | Alan Malloy | 2018-10-24 18:24:23 -0700 Revert "Fix transformation HP scaling with HP+ artefacts (11728)" It was allowing you to unwield cursed weapons by transforming, and triggering unwield effects without warning. Credit to Malacanter for noticing/reporting. This reverts commit 82e90586b2dc5d95895fca894a4503104906bce7. -------------------------------------------------------------------------------- 5ce4c07210 | advil | 2018-10-24 15:15:34 -0400 Try again to avoid recursive crashes when loading level/save data bf5fdde8f9eef4 put the unwinds in the saving functions, not the loading functions... -------------------------------------------------------------------------------- 3bc7ea6fc1 | Doesnt | 2018-10-24 11:36:49 -0400 Spelling -------------------------------------------------------------------------------- f497b7cc99 | advil | 2018-10-23 23:27:42 -0400 Improve (?) filtered_vector_select This now takes the `filter` argument in a format that should be guaranteed to cast to bool (for purposes of #871), guaranteed to handle a nullptr argument, and is also just more explicit about its type. Unfortunately this prevents at least my compiler from deducing M correctly, but such is life. -------------------------------------------------------------------------------- 357f654629 | Edgar A. Bering IV | 2018-10-23 20:29:16 -0400 Update CREDITS.txt -------------------------------------------------------------------------------- 82e90586b2 | NormalPerson7 | 2018-10-23 12:04:18 -0700 Fix transformation HP scaling with HP+ artefacts (11728) When wearing faerie dragon scales with the HP artefact property and entering or leaving a transformation that modifies HP, HP would be scaled incorrectly. This was because: - On entering a transformation, equipment was melded after the transformation took effect, which meant the new max HP was used as the finishing value for the HP change from melding the scales (resulting in a much higher than expected final value). - On exiting a transformation, equipment was unmelded before the max HP was downscaled, which meant the old max HP was used as the starting value for the HP change from unmelding the scales (resulting in a much lower than expected final HP). Hence, in transform(), meld equipment before changing the value of you.form, and in untransform(), downscale HP from the transformation ending before unmelding equipment. -------------------------------------------------------------------------------- f2e588f4e5 | Alan Malloy | 2018-10-23 11:25:39 -0700 Remove some now-unneeded sarcophagus labelling from a Tomb vault -------------------------------------------------------------------------------- f86452d001 | Alan Malloy | 2018-10-23 11:13:25 -0700 Turn some pointers into refs, resolving a TODO -------------------------------------------------------------------------------- d27e9dc1ee | Alan Malloy | 2018-10-23 11:12:59 -0700 Fix a Tomb vault that was impassable (NormalPerson7, #11733) -------------------------------------------------------------------------------- bf5fdde8f9 | advil | 2018-10-23 11:28:34 -0400 Try to avoid recursive crashes when loading level/save data If the game crashes while loading items/monsters (`tag_construct_level_items` and `tag_construct_level_monsters`), it creates a situation where it is highly likely to crash debug_item_scan or debug_mons_scan respectively. Since these are called for most builds during the crash handler (basically for the detailed debug output in case of things like unlinked items, I think), this leads to recursive crashes (see e.g. 11734) and complicates diagnosing whatever the underlying problem is. This change adds yet another state variable to suppress these scans in the crash handler. It's possible that I'm missing a case where calling the scans in the face of such a crash does provide useful information; we'll see. -------------------------------------------------------------------------------- ceb43e64b4 | advil | 2018-10-23 11:28:34 -0400 unbrace -------------------------------------------------------------------------------- 084b3f85fe | NormalPerson7 | 2018-10-23 10:15:46 -0400 Make the immune_to_hex function available to clua Add a new function to l-you.cc's clua library, called you_immune_to_hex, which takes a spell as a parameter and returns whether the player is immune to that spell. [Committer's note: added @tparam to the ldoc. Closes #868] -------------------------------------------------------------------------------- d59976b5a0 | NormalPerson7 | 2018-10-23 10:14:21 -0400 Include info about intrinsic immunity in monster spell description This commit adds the line "You cannot be affected by this spell right now" to descriptions of monster spells accessed through the monster description, in place of the "chance to beat your MR" line. -------------------------------------------------------------------------------- b5b85be88d | NormalPerson7 | 2018-10-23 10:13:41 -0400 Display (immune) in monster description when a player is immune to a hex When a player is intrinsically immune to a particular hex, through innate abilities, equipment, god abilities or transformations, make the chance to defeat MR indicator next to the spell on the monster description screen read "(immune)" instead. It is misleading to imply that these abilities can succeed on the player through printing the chance to defeat MR, as was the case previously. This applies to: - Paralysis and slowing as a formicid, - Confusion with clarity or under Zin's vitalisation, - Petrification as a gargoyle, in statue form or under Zin's vitalisation, - Sleep and fear as undead or nonliving, with clarity or while berserk, - Virulence when immune to poison, - Porkalator when unable to transform, - Teleport and blink as a formicid or with -Tele equipment, and - Mesmerisation with clarity or while berserk. This commit creates a new member function in the player class, immune_to_hex. This method also returns true for hex-like spells that do not have an MR check, such as paralysis gaze and blink other, however these spells do not have the MR indicator and as such also do not have the immunity indicator. (If the only reason the player cannot be affected by a hex is because they have sufficient MR to resist it always, the MR indicator will still read "(0%)", to maintain the distinction between MR and intrinsic immunity.) [Committer's note: lowercased "immune"] -------------------------------------------------------------------------------- 9beedcea5e | gammafunk | 2018-10-22 17:48:21 -0500 Refactor and update comments. Use max() instead of assignment testing. Mnoleg no longer has chain of chaos, but has call of chaos instead, and chaos champions no longer exist. -------------------------------------------------------------------------------- 98c7a59ffc | gammafunk | 2018-10-21 20:02:35 -0500 Some edits and cleanups for a Bazaar vault Refactor and simplify glyph usage to use more consistent lettering and avoid overriding default glyphs. Add a full ring of edging between land and shallow water with small chance to place water on each tile to make this effect more randomized. Fix the transparent stone colored tiles by setting the TILE statements to the color variants manually. I'm not sure why setting the color alone isn't changing the tile like it does normally; some aspect of the Bazaar layout seems to be preventing this. Make the use of transparent stone in the lighthouse walls contiguous, more how a lighthouse would be. Finally, generate the ophan awake. Closes #867. -------------------------------------------------------------------------------- 9dc3cf4471 | kenranunderscore | 2018-10-21 18:12:31 -0500 Add a lighthouse-themed bazaar vault Adds the vault bazaar_kenran_lighthouse. It features a circular hut built on a small island, make to resemble a lighthouse in the ocean. The shoreline, as well as the transitions from shallow to deep water, and from deep water to open sea, respectively, vary slightly in each generated map. At the moment, the centre of the lighthouse contains a trapped ophan (as to provide a source of light). Of course this is rather gimmicky, but I found it fun. It can easily be replaced by another shop or decorative interior though, should monster generation in this case be frowned upon. -------------------------------------------------------------------------------- 1757c6e039 | Manderson | 2018-10-20 22:50:43 -0400 Dispater Resprite Now looks spookier and more made out of metal [Committer's note: Closes #863] -------------------------------------------------------------------------------- acb38b584f | Manderson | 2018-10-20 22:50:11 -0400 Replace Tiles: H. Ghost, S. Wraith, Cob, Eid Replacing several ugly and unflavorful tiles. Hungry ghost should look hungry, rather than obese. Shadow wraith and Eidolon are all but unshaded. Death cob is a little too bright and has no discernible light source. -------------------------------------------------------------------------------- 4c2fb128da | kenranunderscore | 2018-10-20 20:04:18 -0400 Fix some old bazaar vaults Some older bazaar vaults did not work/look as originally intended due to tile randomisation. The problems were mostly due to vaults using LFLOORCOL in some way, which was then overwritten by the colour randomisation in bazaar_setup. Some of this was only noticeable in console mode, since the randomisation also sets LFLOORTILE. To fix this and thus restore the intended looks of these vaults, several steps were taken: - Extend bazaar_setup in way that makes it possible to control whether colour randomisation takes place or not. - In vaults that used RNG to set a floor colour and then checked for it, the checks now use dgn.get_floor_colour() to get the correct colour (example vault: bazaar_lake). This has to take place after the call to bazaar_setup. - In vaults that set a fixed floor colour, use the version of bazaar_setup that does not randomise the colours (example vault: bazaar_minmay_generic_d). Note: The generation of shop halos is the only thing that needs to be done in the branch epilogue; everything else can be done before that. The code now reflects this, and vaults that do not want halos "delete" the epilogue (pass a nil to set_branch_epilogue). Otherwise, if the player had entered another bazaar before, the epilogue could have been set already. [Committer's note: Closes #562. checkwhite and use luaL_optstring for set_branch_epilogue] -------------------------------------------------------------------------------- 376f016b28 | kenranunderscore | 2018-10-20 18:43:29 -0400 Small Lua refactoring for bazaars The colour randomisation in bazaar.des used a Lua table to pick a random colour from, then checked whether this colour was contained as a key in another Lua table. If it was, the corresponding value was picked as a tileset for the bazaar vault, otherwise there was a default tileset as a fallback. This check could only fail if - for some reason - the two Lua tables were not synchronized. This refactoring removes the need for the check and the default tileset by combining the two Lua tables into one containing all the information necessary to randomise the looks of the vaults. This shortens the code a tiny bit and makes adding new tilesets less error-prone. -------------------------------------------------------------------------------- eaabbf348b | Alex Jurkiewicz | 2018-10-20 13:31:18 -0400 Improve bear berserk Bears mostly die before they can berserk, or they berserk and then die a turn or two later. Let them cast it when in an emergency (like orc battlecry) and double the cast frequency. [Committer's note: Removed the instant from this patch. Closes 591] -------------------------------------------------------------------------------- 6ff198fc0b | jmbjr | 2018-10-20 11:15:31 -0400 Allow setting attitude of cloned monsters (damerell, #11171) (#608) Matches the attitude of a cloned monster to the cloner. This also removes the (currently never-used) option of setting the position of the cloned monster on call. For _mons_summon_monster_illusion: By passing the cloned monster's attitude to clone_mons, we don't have to do all of the gymnastics that previously had to be done to properly set the cloned monster attitude and not adversely affect arena bookkeeping. for _phantom_mirror, we can now simply set ATT_FRIENDLY in the clone_mons call directly. -------------------------------------------------------------------------------- 6fd5563dc5 | gammafunk | 2018-10-19 20:48:20 -0500 Some pre-Lair vaults that place manuals from minmay Minmay's comments regarding this submission: > Pre-Lair vaults with monsters guarding a manual Manuals are most > interesting early in the game when your character may not yet be > committed to a specific strategy. However, randomly generated manuals > are extremely rare and biased towards deeper levels, and existing > vaults that explicitly place manuals are all quite deep as well. So > here are some shallow vaults that place manuals! > > These all have a mean of five monsters and a minimum of two, with the > exception of minmay_manual_mares which simply has 2 centaurs. There > are currently 10 vaults, with a total weight of 50. Put these vaults in mini_monsters.des with their own section and description in the relevant areas. Only changes I made to the vaults themselves were syntax simplifications for NSUBST, like removing `1:` for single replacements or `*=` for the final replacement. Also replaced use of `:` with `=` for single replacements, since I find use of that to be less error-prone when NSUBST terms get changed around. -------------------------------------------------------------------------------- aeb629af13 | advil | 2018-10-19 21:02:43 -0400 Various code cleanups for ghost_demon brands Also, switch over a bunch of `int`s to `brand_type`. -------------------------------------------------------------------------------- 33639ab90a | advil | 2018-10-19 21:02:43 -0400 Show pan lord brand information As with spells, showing the player the randomness immediately helps smooth out some of the spikiness of just how random pan lords can be. Doing this is also more consistent with recent changes to monster equipment id. This was surprisingly hard to get right, and the wording may still be slightly odd for some brands and cases. This also improves the display of ghost brands in xv (where it wasn't previously shown at all). This commit changes SPECIAL_WEAPON_KEY to store a brand_type, not a string. -------------------------------------------------------------------------------- 6656e4476a | advil | 2018-10-19 21:02:43 -0400 Show pan lord spells in xv unconditionally While random behavior can be exciting, the particular randomness involved in panlord spells is extremely spiky, and I think it's better to reveal to the player the randomness on encountering a pan lord rather than as they cast their spells. This is especially relevant on the orb run for newer players who may not have much experience with pan lords, and given that 792c6d12af should make pan lords slightly more frequent on the orb run. With this change, the only kind of hidden spell information remaining is for monsters with multiple spellbooks. -------------------------------------------------------------------------------- 4538c0ed7a | advil | 2018-10-19 19:58:55 -0400 Make major-tag-history.md -x Not sure why it was +x. Resolves #832. -------------------------------------------------------------------------------- 28c3e8efcb | Kyle Rawlins | 2018-10-19 17:57:26 -0400 Update MSVC instructions to reflect current reality These directions are really too obsolete to keep up, and if someone were to get this working, I suspect they'd have to entirely rewrite anyways. -------------------------------------------------------------------------------- e122d05652 | gammafunk | 2018-10-18 10:33:37 -0500 Remove an unused variable It's possible that this is related to a crash on CBRO potentially caused by the use of a function template, although that really shouldn't be the case. -------------------------------------------------------------------------------- 69db12baef | Aaron Golden | 2018-10-18 09:39:30 -0500 Correctly tag branch ends in Hell vaults Having these hard coded for branch ends at level seven causes problems if branch-data.h is ever changed to make one of these branches not exactly 7 levels deep. [Closes #865] -------------------------------------------------------------------------------- 2b29b687b6 | Edgar A. Bering IV | 2018-10-18 09:39:30 -0500 Tweak nagdon_arrival_double_spiral The lava and deep water variations spelled death if a ranged monster spawned awake and near the vault, or wandered by as the player was departing. The transparent stone could force the player to wake up a lot of monsters while navigating out of the vault leading to death. [Closes #864] -------------------------------------------------------------------------------- 9f293ae83a | Edgar A. Bering IV | 2018-10-18 09:39:30 -0500 Return disablers to disabler_island This vault wasn't actually placing one of its intended monsters. -------------------------------------------------------------------------------- fd02fb7a9a | Andrew Minton | 2018-10-18 09:39:30 -0500 Add the "transparent" tag to more vaults, eliminate some islands This commit adds the "transparent" tag to most minivaults that have more than one possible exit. For most minivaults, this eliminates their chance of causing a veto entirely, and for the rest, it at least reduces it. Also adds the "transparent" tag to a few non-minivaults. Vaults with internally disconnected regions have either had the appropriate opaque KMASKs applied, or said disconnected regions eliminated (only in the cases where the regions contained nothing...these were mostly my vaults...). Also fixes many cases where players could become trapped in a disconnected region (again, mostly my fault), and a couple other fixes to my own vaults and misspelled tags. Large minivaults with few possible exits still have a lot of trouble generating. disabler_island is clearly not functioning as intended (it can never actually have an orange crystal statue or floating eye) but I'll leave that to its author; for now I've just made it unable to trap the player. -------------------------------------------------------------------------------- bd7f2c837c | gammafunk | 2018-10-18 00:22:13 -0500 New tiles for the Sceptre of Torment (CanOfWorms) The old tiles didn't quite match the idea of "eveningstar". These new tiles definitely look like something that you wouldn't want to be hit with. In fact I'm not sure I'd want to touch this thing at all... -------------------------------------------------------------------------------- 8ff0b24cde | gammafunk | 2018-10-17 22:28:42 -0500 Fix crashes for melee attacks without a weapon This was broken in the previous commit. -------------------------------------------------------------------------------- 606f0fe861 | gammafunk | 2018-10-17 20:22:20 -0500 Fix attack prompts for some unrand weapons The unrand weapons the Singing Sword, the Mace of Variability, and Spellbinder can all damage allies in LOS with their secondary effects, potentially turning allies hostile and causing god penance. This commit adds an attack prompt for using these with allies nearby so that the player can have a proper warning. There is a bug where Singing Sword's spell doesn't cause Okawaru penance when it harms allies, despite it turning them hostile. This is because the necessary conduct code is missing from the LOS attack spell code and the bug likely includes Ozo's Refridge as well. This can be fixed in a subsequent commit, but for now I'll leave the warning as is. The warning also uses somewhat misleading language, since it says that the attack will cause penance. In reality, penance will only be caused if the secondary effect actually triggers and the effect hits an ally (in the case of Variability, it may not). I'm leaving the current language for now, but if there's player confusion we can tweak it. There are still two unrands that damage allies which need fixing: the Arc Blade and the Sceptre of Torment. A simple LOS hit function wouldn't correctly capture the Arc Blade's arcs, since they only travel between adjacent monsters. This unrand is probably going to get reworked to simply use a chain spell, in which case a LOS hit function would work. I'm leaving it without a prompt for now. For the Sceptre, allies don't currently care if you torment them, nor does Okawaru give penance when this happens. We need to look into fixing this logic and probably should move torment over to the LOS damage spell code. Until this situation changes, there's probably no need for a prompt, since there are no major consequences other than allies losing HP. -------------------------------------------------------------------------------- 43d87f4c55 | gammafunk | 2018-10-17 14:13:25 -0500 Mark test statues as harmless monsters and clean up spacing -------------------------------------------------------------------------------- ba3dfdfc94 | gammafunk | 2018-10-17 12:56:58 -0500 Don't give a prompt for the Singing Sword's spell effect When casting its Sonic Wave spell, the player's melee attack will generate a cancellable prompt if the spell would harm an ally, which we don't want here. Prevent this prompt; a subsequent commit will add the necessary check so that this happens before the melee attack begins. -------------------------------------------------------------------------------- 0f038ff52e | gammafunk | 2018-10-17 12:56:58 -0500 Fix a crash when death curses torment (geekosaur) The attacker can be nullptr for some sources of torment, so properly check for that case before dereferencing the attacker. -------------------------------------------------------------------------------- 006994fd10 | gammafunk | 2018-10-16 21:47:58 -0500 Rework the Sceptre of Torment This torment effect of this weapon makes it something only undead players want to use, and even then it's not a very good weapon due to having such low direct damage. This commit makes the torment effect not apply to the wielder, applying it on 20% of successful hits instead of 50%, changes the base type to be an eveningstar, and gives it the pain brand. It was previously an unrand one-handed staff, but we already have one of these, the Elemental Staff, and had no unrand eveningstar with the removal of the Mace of Brilliance. Now the sceptre will be a usable weapon that outclasses most branded and highly enchanted weapons for its type. It might be nice to update the tile to have spikes, so it more resembles something one could conceivably call an eveningstar. -------------------------------------------------------------------------------- 9fe5f1002e | Edgar A. Bering IV | 2018-10-16 00:25:51 -0400 Remove Misfortune from some vaults The new version doesn't make sense in certain vaults. -------------------------------------------------------------------------------- 103bc38328 | Edgar A. Bering IV | 2018-10-16 00:25:51 -0400 Revise the robe of Misfortune (gammafunk) The robe of "particularly bad identification trap" was not an interesting thing. This keeps the theme of an unlucky robe which frequently leads to unfortunate confluences of events, but now lets some of that bad luck fall on monsters too. Specifically, the random appearance is dropped and the robe becomes: +5 with {*Corrode *Contam *Drain Harm *Slow EV+5}. -------------------------------------------------------------------------------- 6e662b0731 | Edgar A. Bering IV | 2018-10-16 00:24:58 -0400 Add Harm as an artefact property Does not generate randomly at present. Requires *Drain. Multiple sources of Harm do not stack. -------------------------------------------------------------------------------- 6f3f904881 | Edgar A. Bering IV | 2018-10-15 21:58:52 -0400 A farewell to arms (Yermak) Remove some permarock and unobtainable items used decoratively in baileys. They're replaced with granite statues given flavourful descriptions. CanOfWorms is working on some custom statue tiles to use here. -------------------------------------------------------------------------------- a838e03fa7 | advil | 2018-10-15 20:22:05 -0400 One too many validity checks -------------------------------------------------------------------------------- 28b8a265e5 | advil | 2018-10-15 18:14:26 -0400 Add some finiteness checks to rays ...in hopes that this would help pin down when things go wrong. -------------------------------------------------------------------------------- b49dddc804 | advil | 2018-10-15 14:16:50 -0400 Default `wall_jump_move` to false This change has been a long time coming. In hindsight, the movement based implementation of this causes a lot of problems by turning what is normally an interface noop (moving into a solid thing) into something that can have annoying or bad tactical consequences. The option is (for now) still there, for those who find the movement version fun. -------------------------------------------------------------------------------- 792c6d12af | Alex Jurkiewicz | 2018-10-15 19:12:17 +0100 Upgrade orb run spawns The orb run is relatively safe for players, but the difficulty is wildly variable across multiple games. Part of the reason for this is that the spawn list is so varied. An orb run spawn might be a Pandemonium lord or a crimson imp. This change aims to make the spawn list more consistent, and more dangerous. Mid-tier demons used to make up over a third of orb run spawns. Cut that down to 10% and give the excess spawn chance to orb guardians and greater demons. Other numbers are slightly shuffled to rounder figures. Also, the orb run can spawn monsters randomly, rather than near the player. Stop spawning these monsters, and slightly increase the rate of spawning near the player (presumably some of the randomly-spawned monsters found the player). [Adjusted the spawnrate slightly to only increase it a small amount over the previous rate, to focus more on reducing the heavy variability of the orbrun over increasing the difficulty - MarvinPA]. Spawn rate changes: Monster Old New ---------------+-----+---- Pan lord | 9% | 10% Tier 1/2 Demon | 12% | 25% Tier 3/4 Demon | 34% | 10% Tier 5 Demon | 4% | 0% Orb Guardian | 13% | 15% Pan spawn | 27% | 40% -------------------------------------------------------------------------------- 669764e514 | advil | 2018-10-15 10:01:17 -0400 Fix monster equipment wand id (Yermak) Need to ID wands at the type level, not just their plusses. This also fixes an unused variable warning. -------------------------------------------------------------------------------- c8a74814ff | advil | 2018-10-15 09:39:08 -0400 Don't use popup for end() errors in mapstat/objstat This change sends them just to stderr, probably restoring older behavior. This for stuff like level description parse errors or bad command line arguments in general. (I don't think there's really a use case for being able to view the full log on such errors? Actual crashes will still just generate a crashlog.) -------------------------------------------------------------------------------- 02c3efac06 | gammafunk | 2018-10-15 00:16:52 -0500 Don't break player constriction through certain abilities (Vajrapani) Abilities that move the player to origin to prevent messages like Yred's Recall Servants previously had the player stop all forms of constriction. This commit fixes this to relax the player-centric conditions when the player is at origin, with the exception of Chei's two time step abilities, where it makes sense to stop constriction. -------------------------------------------------------------------------------- 6bcb69f058 | Edgar A. Bering IV | 2018-10-14 10:50:41 -0400 Identify monster equipment on sight Partial mosnter item identification has been increased over time to de-spoil item generation tables in favor of revealing tactical threats. Before this patch, the issue of item generation versus tacitcal threat continued to apply to wands. Further, players were encouraged to carefully observe damage exclamation points to watch out for plusses on either monster weapons or armour. Finally, mantis bugs 10903 and 10301 involve information leaks regarding armour ego. All of these issues ultimately trace to identification of monster equipment. This commit resolves them by fully identifying monster equipment. Doing so comes at the cost of further diluting Ash's ID passive and making Ash's item warning passive no longer exist, as well as simplifying the ID game slightly more. -------------------------------------------------------------------------------- e48c14ca4c | Nikolai Lavsky | 2018-10-14 10:36:51 -0400 Remove references to loud noises breaking mesmerisation and fear Since this mechanic was removed in 74fa8348. -------------------------------------------------------------------------------- b40ba49374 | gammafunk | 2018-10-13 19:56:58 -0500 Merge content from the old contrib guide and remove the old file Bring over the section on what happens after contributor content is merged, since that's still relevant. Now that the new markdown guide is mostly complete, we can remove the old text file. -------------------------------------------------------------------------------- b6e31bc53c | Kyle Rawlins | 2018-10-13 19:56:58 -0500 Various wording tweaks, typo fixes Seems like it's in pretty good shape for merging to me. -------------------------------------------------------------------------------- 5ecafbc26d | gammafunk | 2018-10-13 19:56:58 -0500 Rewrite the contributor's guide and convert to markdown (advil) WIP based on advil's rewrite with my own updates. Putting this in a branch for future edits from myself and other devs. -------------------------------------------------------------------------------- 6773f7a52e | Aidan Holm | 2018-10-13 23:26:57 +0800 Add new title artwork (cws) -------------------------------------------------------------------------------- a85b81cc4b | gammafunk | 2018-10-12 21:31:42 -0500 Add dungeon feature statistics to objstat Objstat now writes statistics about dungeon features to the file objstat_Features.txt. This has counts of features by type, both in and outside of vaults, along with standard deviation, min, and max. This allows us to get answers to questions like "How often does a Jiyva altar generate in Lair?" and gives a way to compare e.g. trap generation between levels and branches. -------------------------------------------------------------------------------- f0a6af8564 | gammafunk | 2018-10-12 20:48:04 -0500 Clean up spacing in objstat functions for readability -------------------------------------------------------------------------------- f30bb39dab | gammafunk | 2018-10-11 23:49:44 -0500 Some fixes and tweaks to decor vaults Prevent teleport closets in chequers_garden and chequers_arboretum using a checkerboard pattern to guarantee a safe path. Remove unnecessary no_monster_gen and no_item gen tags from the latter vault. Simplify glyph and color usage in these two vaults as well as in chequers_mini_garden. Closes #569. -------------------------------------------------------------------------------- 693b09ebcb | gammafunk | 2018-10-11 22:12:10 -0500 Some fixes and cleanups to the river serial vaults Fix various potential stranded tiles that could generate in a few of these vaults by using a checkerboard of squares guaranteed to not be deep water. For one vault, move no_tele_into from water features to the entire vault, since the player could strand themselves. Move the no_monster_gen from the entire vault to water features only for all of these vaults. This allows their floor tiles to be valid generation sites for level monsters without introducing more water monsters. Finally, remove redundant no_pool_fixup tags. -------------------------------------------------------------------------------- ab66580c84 | Alex Jurkiewicz | 2018-10-11 16:20:42 -0500 Add new vaults and a serial * Four new serial corridors vaults * A new serial layout, "rivers". This is a river-focused serial, similar to "bayou" (and the old, removed "ponds"), but without any plants and with more river-like (rather than pond-like) water design, along with a few waterlogged rooms. Includes thirteen vaults. * Six new minivaults. -------------------------------------------------------------------------------- dcc7a326bf | gammafunk | 2018-10-11 13:45:19 -0500 A hive-themed ghost transporter vault for Dungeon and Lair Bees and, in later depths, a queen bee, hornets, and eventually meliai accompany the ghost of a player who tried to loot the treasures of a formidable hive. All internal areas of the hive are revealed through carefully placed windows. A very small number of squares may not be visible, depending on the generation of a small number of wall tiles. This won't affect ghost or loot visibility, and the player can easily ensure they've seen everything in the vault before they enter. It upgrades monsters and loot with depth, placing on average two food rations throughout the vault. The other loot is general but with the usual good loot upgrades that start from D:9. -------------------------------------------------------------------------------- e7838e6b1f | advil | 2018-10-10 09:41:02 -0400 Improve gozag distraction flavor vs. mechanics This is to try to more clearly cue that the distriction will last beyond the presence of the initial trigger. -------------------------------------------------------------------------------- f318fe8c0c | psywombats | 2018-10-10 00:10:50 -0400 A variety of new arrival vaults (psywombats) Committer's note: This merges some of the vaults from #803. I tweaked a few things (console colours, whitespace, simplify some SUBST lines, and remove clear rock in a few places). -------------------------------------------------------------------------------- c3b755d021 | Alex Jurkiewicz | 2018-10-09 01:17:51 -0400 Wake up the player if paralysed/petrified Chaining disables on the player isn't particularly fun. Also prevent paralysed and petrified players from being put to sleep. Flavour wise it's not a stretch that these effects interfere with sleep. [Committer's note: included the sleep immunity, closes #848] -------------------------------------------------------------------------------- c0b0c76f0a | gammafunk | 2018-10-08 23:56:27 -0400 Move move actions out of main.cc This resolves a longstanding TODO in main.cc. [Committer's note: fixed whitespace, edited commit message. Closes #856] -------------------------------------------------------------------------------- 7ffd15e767 | gammafunk | 2018-10-08 21:31:35 -0500 Replace permanent teleport traps with zot traps in a maze (Engine) The teleport trap could place immediately before the final door to the rune in this Tartarus ending. If a silent spectre generated in this room, -Tele or random teleport attempts or other more obscure techniques would be required to enter, since monsters in the room couldn't wake up and open the door. Since we don't like hard requirements for specific equipment to access rune areas, use zot traps instead of teleport. Stepping on a zot trap poses some risk, but requires no special equipment. -------------------------------------------------------------------------------- 26e74f2614 | gammafunk | 2018-10-08 14:33:24 -0500 Make the gold in a loot vault more accessible (biasface) This vault used to place only fungi as a barrier around the gold, which meant it could take some players a long time to break into. Replace a few of the fungi with toadstools. These decay over time and are easy to kill even if they haven't decayed. Closes #859. -------------------------------------------------------------------------------- fcac5dec12 | Edgar A. Bering IV | 2018-10-07 11:29:11 -0400 Allow confusing touch with a weapon The dexterity to-hit bonus made the unarmed requirement for confusing touch more an interface obstacle than a real balance effect. If the spell is too strong we should nerf the mechanic, not annoy a player trying to use it. -------------------------------------------------------------------------------- 45ed4168a9 | Edgar A. Bering IV | 2018-10-07 10:10:27 -0400 Reactivate autopickup when using stairs (mdonais) New players sometimes miss the message about ^A to reactivate autopickup and escape an invisible monster without killing it. They subsequently get confused when they are no longer eating and grabbing items. Even more experienced players can forget to turn autopickup on. If a player does get followed up the stairs by an invisible monster there will be a double message of Reactivate/Deactivate but handling this otherwise would leak information. -------------------------------------------------------------------------------- 9da9e51a24 | gammafunk | 2018-10-06 20:08:01 -0500 Fix altar placement in a ghost vault (Pekkekke) -------------------------------------------------------------------------------- 6719eeacba | Chris Campbell | 2018-10-06 14:56:18 +0100 Remove an obsolete Wanderer message Even if it were somehow possible for a Wanderer to start with such low skill levels, skills < 1 are visible now anyway. -------------------------------------------------------------------------------- 9a66eeb0ea | biasface | 2018-10-05 15:59:59 -0700 Change Donald's line about rPois ring to rN -------------------------------------------------------------------------------- 1df1716405 | gammafunk | 2018-10-05 13:11:16 -0500 Revamp gammafunk_the_bubble Per the reasons in 24521301, add windows into this vault to reveal all monsters and loot. Also more thoroughly randomize monster placement, since placements in specific locations are rarely going to be preserved as monsters wake up and move around. Not only are there windows now, but the walls are thinner, allowing more noise to reach the vault. We also rebalance this vault to scale up monsters/loot from earlier depths. Two of the guaranteed gold piles are gone, but we introduce good quality consumables together with either jewellery or aux armor instead of using only | and * loot. This vault will present a bit less risk in earlier dungeon so it will be more often completed soon after its discovered; players encountering it in later depths are much more capable of dealing with the higher numbers of monsters the vault uses in these places. Allow this vault to place in Lair 'S' branches as well as Pan, since these places generally don't have many transporter vaults that can place there. This is a 098 monster vault, so it will work well in these branches. In the later branches that don't have well-defined out-of-depth monsters, we add some specific monsters from the branch as necessary. Finally, for the "roulette" variant, rework the portals to not use a arrival landing site and exit transporter distinct from the roulette pairs. Integrate these into the pairs, using randomization approach which ensures that the no transporter takes you to the landing site in the same pair. -------------------------------------------------------------------------------- 9f0c0e73af | gammafunk | 2018-10-05 12:27:10 -0500 Fix vault designations for boots and gloves Incorrect designations for these items was causing vaults to fail to place when boots or gloves were randomly selected. I was only able to notice this when it happened via a subvault in a debug build. Also adjust a couple item listings to include gloves as a possibility, since boots are already included. -------------------------------------------------------------------------------- a3b1b28ecf | Chris Campbell | 2018-10-04 18:47:02 +0100 Typo fix (JoelMarler) -------------------------------------------------------------------------------- 2e428d4c7a | gammafunk | 2018-10-03 18:06:29 -0500 Rework gammafunk_corrupted_shrine Per the reasons in 24521301, add windows into this vault to reveal all monsters and loot. This commit also rebalances monster and loot counts to scale more consistently and give a more reasonable ratio of monsters to loot. Add good consumable and good/artefact jewellery to replace some of the more variable | and * loot items. Adjust the monster lists to give more balanced threats at the various tiers of monsters. -------------------------------------------------------------------------------- a3f5176a78 | gammafunk | 2018-10-03 18:06:29 -0500 Some transporter vault balance and syntax tweaks. The monsters scaled a bit too aggressively in gammafunk_jiyva_shrine, so that the monster count got very high by Depths. Start with slightly more monsters at earliest depths and scale them up half as slowly. Replace one | or * item with either good consumable or more specific good equipment at the earliest depth in both this vault and gammafunk_beogh_shrine. This increases the chance of something usable generating when we have a lower item count. Also clean up syntax in gammafunk_beogh_shrine. -------------------------------------------------------------------------------- 65bf2d139f | advil | 2018-10-03 18:13:49 -0400 Use a real join for missing directory errors (amalloy) This also should fix the problem on CBRO: the chroot c++ lib is old enough that it apparently doesn't have a final implementation of string::pop_back. The reason that `bool found = false` triggered an issue is apparently that gcc was optimizing out the relevant code paths when `found` was uninitialized. -------------------------------------------------------------------------------- 6cc01a3c85 | advil | 2018-10-03 17:00:36 -0400 Revert "Fix an uninitialized variable" This reverts commit fe727ee8d20f9ef5416e00a83b350a3055196f1e. This reversion is objectively wrong, but somehow this commit appears to be causing CBRO builds to require a version of libstdc++ that isn't present in the chroot. I haven't been able to isolate why, so I'm reverting for now. (n.b. it isn't the exact details of this commit -- I tried reimplementing the check without using a bool or an assignment, and it still had issues.) -------------------------------------------------------------------------------- e5a990390b | advil | 2018-10-03 10:09:18 -0400 Fix two weapon select bugs * Dispreferred weapons were not readable while highlighted on webtiles. * The welcome text was selectable (cf. d6d8abe and a814211745). -------------------------------------------------------------------------------- 290e36dc6f | advil | 2018-10-02 22:10:12 -0400 Various beam.cc cleanups All minor. Via #854. -------------------------------------------------------------------------------- 0b44af716b | advil | 2018-10-02 21:35:58 -0400 Comment a few weird things via #854 -------------------------------------------------------------------------------- c497677b45 | advil | 2018-10-02 21:22:38 -0400 Fix several minor pointer issues via #854 -------------------------------------------------------------------------------- 55accd554f | advil | 2018-10-02 21:11:58 -0400 Fix a redundant feature on Sonja via #854 -------------------------------------------------------------------------------- cae3914892 | advil | 2018-10-02 16:50:00 -0400 Add a pointer check This one was strictly speaking ok as-is, because the conditions always target the player (MHITYOU), which guarantees that afoe is a pointer to the player. But this is the kind of thing that shouldn't be taken for granted in such an indirect way. via #854 -------------------------------------------------------------------------------- 51c88b6968 | advil | 2018-10-02 16:45:12 -0400 Some extra pointer checks I'm not sure these are necessary, but the static checker is right that they certainly aren't verified as necessary from surrounding code, and everything else here is pretty careful about `defender`. Via #854 -------------------------------------------------------------------------------- dacbca0855 | advil | 2018-10-02 16:39:09 -0400 Change a + to a += via #854 -------------------------------------------------------------------------------- 9a040af8fa | advil | 2018-10-02 16:11:32 -0400 Remove some vacuous ASSERTs Vacuous because these are unsigned types. via #854 -------------------------------------------------------------------------------- 643b770f28 | advil | 2018-10-02 15:58:14 -0400 Ensure fsim file always gets closed It would remain open when fsim was aborted at the a/d prompt. via #854 -------------------------------------------------------------------------------- fe727ee8d2 | advil | 2018-10-02 15:47:46 -0400 Fix an uninitialized variable Via #854 -------------------------------------------------------------------------------- 91074bd149 | advil | 2018-10-02 15:42:26 -0400 Fix two iterators becoming invalidated during iteration Both of these loops, used in constructing shoals levels, can add something to the back of the supporting vector during iteration, which (per the spec, though who knows in practice) will immediately invalidate an iterator for a vector. This change is a partial revert of a7d9996df05. Found via #854. -------------------------------------------------------------------------------- 95cc57954e | advil | 2018-10-02 13:32:53 -0400 Fix a bad bitwise calculation for ban_glyph in arena This incorrectly used logical negation, not bitwise negation, which would prevent the bounds check it was implementing from ever working. Found via #854. I've also cleaned up a couple of less-important stylistic things that came up. -------------------------------------------------------------------------------- 5ee874de49 | ICC | 2018-10-02 13:08:27 -0400 Change some dead links to relative links in new_dev_guidelines.md [Committer's note: changed commit message. Closes #855] -------------------------------------------------------------------------------- a4718cdc7d | advil | 2018-10-02 12:18:26 -0400 Exclude bones from checkwhite and run it Also unbrace. -------------------------------------------------------------------------------- b44a8d19cf | advil | 2018-10-02 11:42:31 -0400 Fix disaster area adjacency check 311b6308dd0e64a was supposed to add a constraint to disaster area that avoided adjacent spaces, but this never worked, because `victims` was never populated. I'm guessing the idea was to push used targets into `victims` during this loop, and then not use such targets if they are encountered later in the loop. (I discovered this while looking through the errors in #854.) This commit implements the idea in a somewhat different way. Rather than just failing on a new target that is adjacent to a previous target, it downweights all adjacents spaces each time it chooses a target, but never removes them. This ensures that `count` targets still get used, following the longstanding current behavior, and imposes a probabilistic bias against adjacency (with tight clusters >2 especially dispreferred). In testing this appears to result in better spread at middling invoc levels. -------------------------------------------------------------------------------- 0cf4261408 | Edgar A. Bering IV | 2018-10-01 23:31:49 -0400 Revert "Check bounds for player_can_hear (#689)" This reverts commit 44fbede512ef246a858dd77d60c7d0e2e745d440. This is causing initial portal vault messages to not be displayed at all. I don't have time to investigate further so I'm reverting for now. -------------------------------------------------------------------------------- 77505739ee | gammafunk | 2018-10-01 16:15:33 -0500 Don't place a ghost vault with tree walls on Swamp:$ (Pekkekke, 11700) since Lerny can knock down the trees that form the walls of this vault, thereby releasing the ghost. -------------------------------------------------------------------------------- 61290751a1 | gammafunk | 2018-10-01 15:26:22 -0500 Add windows to gammafunk_beogh_shrine and rebalance Per the reasons in 24521301, add windows into this vault to reveal all monsters and loot. Rebalance the loot to incorporate a couple good aux armor and consumables instead of using only highly variable | and * items. Also tweak the loot and monster distributions to scale quantities more consistently, tweaking the monster types for better balance. -------------------------------------------------------------------------------- 82784c59a1 | gammafunk | 2018-10-01 15:26:22 -0500 Add windows to gammafunk_jiyva_shrine and rebalance Per the reasons in 24521301, add windows into this vault to reveal all monsters and loot. Rebalance the loot to incorporate a couple good jewellery and consumables instead of using only highly variable | and * items. Also tweak the monster list to make more judicious use of eye monsters and high level jellies. -------------------------------------------------------------------------------- 24521301fc | gammafunk | 2018-10-01 15:05:34 -0500 Add windows to gammafunk_sealed_library and reformat This commit modifies this vault to allow players to see what's in the vault in terms of monsters and loot. Spoilery vaults still have a place in crawl, at least for the time being, but sealed vaults generally work better when the player can reason about the risk vs reward. It's better to discourage reading vault spoilers, which is what the player would want to do for the vault before this commit. Even if the player doesn't read spoilers, it's almost never wise to attempt a transporter vault blind until long after the vault is first encountered. We'd like these vaults to relevant much of the time when they place, so allowing the player to see what they'll face is a good way to help ensure that. Add windows on all four sides, and move the landing site to the other side of the vault, where we add another level connector. Also reformat the DES statement spacing. -------------------------------------------------------------------------------- ab6feb3dfb | Edgar A. Bering IV | 2018-09-29 23:53:47 -0400 Give Barachi full LOS halo and umbra (11650) you.normal_vision was perpetually LOS_DEFAULT_RANGE. This changes you.normal_vision to correctly be the species LOS and then apply further mutations, spells, and effects to it. The halo and umbra calculations were using LOS_DEFAULT_RANGE. There may be other locations where LOS_DEFAULT_RANGE is used instead of you.normal_vision that give Barachi weird edge cases. -------------------------------------------------------------------------------- 65e0026170 | Edgar A. Bering IV | 2018-09-29 21:14:47 -0400 Have wall jump ability respect constriction (11690) When wall jump is triggered by moving, the player first makes an escape attempt, and loses a turn if they fail to escape. This changes wall jump activated via the ability menu to behave in the same fashion. -------------------------------------------------------------------------------- ac4dfef62a | NormalPerson7 | 2018-09-29 19:48:43 -0400 Disallow wall jumping while stuck in a net/web (11690) When stuck in nets or webs, wall jumping via moving into a wall does not work, because attempting any movement will break out of the net first. However, the ability bypassed this check and so the player could wall jump to immediately free themselves from any net or web via the ability. Therefore, explicitly disallow wall jumping while held and give a message for when the player attempts to wall jump out of a net. Additionally, add a case to _check_ability_possible for the wall jump ability, which returns false if the player is held, in fungus form and in view of an enemy, or is not adjacent to any eligible wall. This will mean the ability is appropriately greyed out for the most general cases of when this ability is impossible. -------------------------------------------------------------------------------- c1433dcc0a | NormalPerson7 | 2018-09-29 19:48:43 -0400 Fix the wall jump ability not being available when berserk (11687) When berserk, like all martial attacks, wall jumping can be done via moving into a wall. However, the ability screen was previously unavailable when berserk and the function _check_ability_possible unconditionally returned false early when berserk, meaning the wall jump ability could not be used. The previous commit made the ability screen open even when berserk. In this commit, add a new abflag, berserk_ok, for abilities which can be used even while berserk, and add a check for this flag at the start of the _check_ability_possible function. This means both methods for wall jump, moving into a wall and using the ability, will now work while berserk. -------------------------------------------------------------------------------- d3700a3872 | NormalPerson7 | 2018-09-29 19:48:43 -0400 Don't prevent the ability menu from opening when berserk or confused Previously, three things happened depending on the player's statuses: - if the player was berserk, the ability menu would never open; - if the player was confused, the ability menu would only open if the player had one of the two conf_ok abilities (Ely's Purification and Ru's Draw Out Power), and if it did open, only conf_ok abilities would be shown. - if the player had any other restrictive statuses, the ability menu would open, and, in most cases, abilities affected by the restrictive statuses would be greyed out. It was decided that having berserk or confusion act differently to other statuses, for example silence, was inconsistent and unnecessary. Hence, we allow the ability menu to be opened even when berserk or confused, where unusable abilities will be greyed out. -------------------------------------------------------------------------------- 9c2c487a97 | Edgar A. Bering IV | 2018-09-29 16:19:08 -0400 Don't accept elemental colours by default (11468) The majority of uses of str_to_colour expect a terminal colour, and can crash if an elemental colour is returned. Lua and mapdef are the exceptions. 900b867fb7dce previously added an option to disallow elemental colours to fix some crashes. The option was set to default to allow elemental colours but the commit message mentions there are potentially other places where allowing elemental colours can be bad. This patch chases those down. Closes #781 -------------------------------------------------------------------------------- 7053962d5f | Edgar A. Bering IV | 2018-09-29 15:45:55 -0400 Fix a des syntax error -------------------------------------------------------------------------------- 4e7f3e49f7 | Edgar A. Bering IV | 2018-09-29 12:00:53 -0400 Revise the Spriggan's Knife description (MarvinPA) -------------------------------------------------------------------------------- a8fa5feffd | Edgar A. Bering IV | 2018-09-29 10:25:11 -0400 Fix lua documentation of Item.artprops -------------------------------------------------------------------------------- 133332c554 | Edgar A. Bering IV | 2018-09-28 22:35:57 -0400 Revise the Spriggan's Knife (mikee) The knife now always stabs at Tier 1; specifically any stab is converted to a sleep stab, this is flavoured as cutting into the realm of dreams. Remove the Dex+4 and MR+ to de-stat-stick it a little. The Dex+4 in addition to the EV and Stealth plusses was overkill, and since the knife now always stabs at tier 1 the extra Dex seemed like too much. A separate idea discussed for the knife was to make it a Hex enhancer. There's probably room for a Hex enhancer unrand dagger also. -------------------------------------------------------------------------------- bb6edffda0 | Edgar A. Bering IV | 2018-09-28 22:31:09 -0400 Allow tweaking more artps in wizmode &t only used 0-Z, there are now more artefact properties than that. This expands it to use a-z, then A-Z then 0-@. -------------------------------------------------------------------------------- b1a03105ca | Edgar A. Bering IV | 2018-09-28 22:30:39 -0400 Allow SH specification for unrands. 685a3a753ca introduced the ARTP_SHIELDING, but did not add processing in util/art-data.pl for a keyword. This allows unrands to specify the shielding property with SH: plus. -------------------------------------------------------------------------------- 8581c8f5cb | gammafunk | 2018-09-28 20:52:56 -0500 Fix a crash for tracers of LOS attack spells Introduced in fb95405 where an average damage value was removed. This is still needed for tracer calculations to get a scaling factor for friend info based on what proportion of damage the target would resist. This commit also refactors some of this code to remove redundant variables and better use an input argument pointer to hold the total damage. -------------------------------------------------------------------------------- ba00d9bbf4 | gammafunk | 2018-09-28 18:12:51 -0500 Use better damage dice for Drain Life The formula was changed in 2a92f5c in a way that introduced invocations breakpoints, so that damage increases were only seen on even invocation skill levels. This commit removes the spellpower divisor of two and uses one die instead of two, adjusting the adder value accordingly. We actually get the same average as before 2a92f5c, albeit with a slightly lower min and slightly higher max. -------------------------------------------------------------------------------- 2a92f5cd5c | gammafunk | 2018-09-28 16:56:36 -0500 Revamp the Singing Sword Currently this unrand is worse than a +7 vorpal double sword, since it has no brand and its "sonic damage" effect is weak. This sonic damage is also linked to having the sword wielded instead being linked to successful attacks. This commit rebalances the sword to be more comparable to an enchanted double sword of speed at high tension. It also makes the sonic damage effect to trigger only on successful melee attacks (including ripostes). The sword now casts a "Sonic Wave" spell that uses existing LOS attack spell code, instead of duplicating some of that logic, and has a visual flash when the effect triggers. Additionally the sword has a vorpal brand, instead of being brandless, and has an inscription and updated description indicating its spell effect. The sonic wave damage is simplified from the previous multiplicative die to use a 2d(5 + pow / 10) roll with the chance for the effect lowered to 50%. When the effect triggers at high tension, the sword has a 1/10 chance to "scream", as it did before this commit, but this now gives 50% more spellpower instead of double damage, since the sonic damage is much higher now. Finally, the sword's noise has been set so that it's the same chance and 20 noise value as the *Noise property at low tension, with that noise increasing by 10 at high tension and by 10 again if the sword "screams". -------------------------------------------------------------------------------- fb95405bed | gammafunk | 2018-09-28 16:56:36 -0500 Refactor LOS attack spell code This code previously had a lot of duplicated logic between functions used for the two spells that cast it, Ozo's Refrigeration and Drain Life. Instead of using function pointers to different functions doing similar things, use common functions where possible. Make zap entries for Ozo's and Drain Life to store details like the damage and color (used for flash effect). This way these details can be stored in the beam already used to store attack details. This commit changes the damage formula of Drain Life, which was previously: 3 + random2(7) + random2(pow) to be: 2d(4 + pow/2) which has a similar average as well as min/max damage compared to the old formula. -------------------------------------------------------------------------------- d8354db201 | gammafunk | 2018-09-28 16:55:18 -0500 Remove an unused dlua library This dlua code to have the dungeon cast LOS-acting spells is no longer used and partially non-working, so remove it. -------------------------------------------------------------------------------- 44a7aab0de | gammafunk | 2018-09-28 16:35:09 -0500 Make a function pointer argument into a function template -------------------------------------------------------------------------------- 069075cd5b | Edgar Bering | 2018-09-28 17:33:26 -0400 Update ebering in the mailmap -------------------------------------------------------------------------------- 6cf3e009b5 | NormalPerson7 | 2018-09-28 14:14:53 -0400 Add reference to * direction as alternative to ctrl+direction (#11401) There is no way to attack down-right (south-east) using ctrl in some browsers, since ctrl-N creates a new window and ctrl-3 switches to the third tab. This commit adds a reference to * direction as an alternative, to remind players of this option when they try to use ctrl-N to attack and their browser takes over. [Committer's note: Closes #738] -------------------------------------------------------------------------------- 44fbede512 | Matthew Boeh | 2018-09-28 09:38:24 -0400 Check bounds for player_can_hear (#689) This PR addresses something that aidanh fixed in a different way in e27d229730f9, but the change still looks correct to me even if there's no current bug that it fixes (and bounds for p maybe also should be checked). Original commit message: Fixes https://crawl.develz.org/mantis/view.php?id=11279 You can reproduce the bug consistently by entering a floor with a portal, leaving the floor, waiting for a while, and returning to that floor. While catching the floor up to the current time, the portal message is triggered while the player is not yet on the floor. -------------------------------------------------------------------------------- 31763e950f | Doesnty | 2018-09-28 09:24:52 -0400 Fix box_level_dp loot (#851) This vault was originally supposed to put one ring of teleportation in the metal room, a random quantity of scrolls of teleportation around the perimeter of the giant box, and a single amulet of reflection. Commit cefc067 removed the rings of teleportation from this vault without updating the letters used for the other two, causing the vault to place one scroll of teleportation nowhere, a random quantity of amulets of reflection, and a single nothing. This PR restores the old and less bizarre behavior. -------------------------------------------------------------------------------- ab8d2b54f3 | gammafunk | 2018-09-28 08:01:50 -0500 Add ebering to the list of crawl devs gammafunk gestures. A swirling arc of seething chaos appears! The arc of chaos hits ebering!!! ebering evaporates and reforms as a dev! Welcome to the team! -------------------------------------------------------------------------------- ab8a48c658 | Edgar A. Bering IV | 2018-09-28 08:26:06 -0400 Simplify Beogh conversion rules The previous commit mentions that these lead to a minigame of 'don't attack this orc until you're certain its met the simulationist criteria for a conversion attempt'. This commit makes orc conversion attempts happen on sight, like Gozag and Jiyva (even if the orc is asleep, confused, paralyzed, can't see you, or has not yet selected you as their foe), removing the minigame. -------------------------------------------------------------------------------- fbe1177272 | Edgar A. Bering IV | 2018-09-28 08:26:06 -0400 Attempt God conversions on sight. Currently three gods change monster attitudes on sight: Beogh, Gozag (under bribe), and Jiyva. When a player sees a monster, Gozag and Jiyva have already decided whether they will convert the monster, but prior to this patch the conversion did not happen until the player took an action with the monster in LOS. This led to an unfortunate bug in the following situation: if a bribed monster walked into LOS of a player bribing a branch with Gozag no messaging would be displayed and the player could attack the monster. This would have the effect of betraying the bribe and turn any bribed monsters in LOS hostile for what appeared to be no reason to the player. (The problem is less severe under Jiyva since not attacking slimes is part of the conduct, but it does cause the occasional 'hostile' slime to appear.) Beogh's conversion behavior is different, and requires the monster be awake, clear-headed, and targeting the player. As a result this check needs to happen every turn the orc is reacting to the player (Beogh sets a flag to make only one conversion attempt per-orc). This patch makes conversion attempts happen in both relevant code-paths using a do_conversions() function. While this causes some minor execution duplication, each conversion function handles being called multiple times on the same monster correctly, and abstracting the conversion attempts to attitude-change make it easier to keep track of them for the future (however unlikely more ally religions are). I'm fixing the bug this way and not by changing how gozag_break_bribe operates to avoid the mini-game of "I won't attack this monster that just walked into my LOS in case I'm about to bribe it". The Beogh conversion rules should probably be re-thought as their current state has a bit of this mini-game. -------------------------------------------------------------------------------- 8829680f9d | Edgar A. Bering IV | 2018-09-28 08:06:26 -0400 Add elemental colour support to the equip bar This commit modifies the equip bar to process elemental colours (coming from unrands) for equipment glyphs in the equip bar. By default, the colours are not animated, since a goal of the equip bar was to lower visual noise. The option "animate_equip_bar" is added to toggle this behavior, as the other goal is to show of your cool stuff. -------------------------------------------------------------------------------- 1bcb263a54 | Edgar A. Bering IV | 2018-09-28 07:52:29 -0400 Have butchering always leave a skeleton. Currently, if you cast animate skeleton, you get a skeleton and chunks. However, if you forget that you have animate skeleton (or have auto-butcher on or whatever), you have a one_chance_in(3) chance of being left with a skeleton to animate. This behavior gives Animate Dead an extra hidden nutritional trade-off, in exchange for an interface screw. This commit changes the behavior of butchering to always leave a skeleton, so that butchering and casting animate skeleton commute. A consequence is that Animate Dead becomes *slightly* stronger, as a player could now butcher every corpse for nutrition and then animate the skeleton, at the expense of a few HD for the undead minions. This isn't actually a buff, though, because said hypothetical player could walk to each corpse and cast animate skeleton for an almost identical effect (slightly different MP cost). -------------------------------------------------------------------------------- 1bc9708f6f | Edgar A. Bering IV | 2018-09-28 07:52:29 -0400 Remove an unused include -------------------------------------------------------------------------------- 2b5ca64aae | NormalPerson7 | 2018-09-27 21:09:31 -0400 Add functionality to search items by handedness. (#850) When a player has a good shield and has trained a lot of shield skill, it would be nice to filter out two-handed weapons. Likewise, later in the game once a player is committed to two-handed weapons, it can would be nice to filter out one-handed weapons. However, no stash search prefix has previously existed so it was impossible to search for a particular handedness. Hence, add a stash search prefix for handedness. There is no check in the hands function defined in l-item.cc that the item searched for is actually a weapon, so we check that the item is a weapon first. Additionally, filter out throwing weapons because they don't occupy the weapon slot, therefore their handedness is not useful to search for and will instead clutter up the search results list. -------------------------------------------------------------------------------- 3b46b076a4 | CanOfWorms | 2018-09-25 23:23:48 -0400 Remove a runed door subvault from the_grid This specific subvault could be placed in a way that let the out of depth monsters inside escape despite having a runed door (and could also rarely be placed without any walls around it at all), which mostly confused players into thinking there was a problem with the vault generation. -------------------------------------------------------------------------------- 563e2a7406 | CanOfWorms | 2018-09-25 23:14:41 -0400 Update Dithmenos's power description (Angani) Remove a leftover reference to old Shadow Step requirements. -------------------------------------------------------------------------------- 84a5ed292d | advil | 2018-09-25 15:12:45 -0400 Replace hacky allow_password_reset() with getattr calls I also added a comment in config.py documenting some of these complexities and recommending `getattr`. -------------------------------------------------------------------------------- 34886a9881 | advil | 2018-09-25 15:01:40 -0400 Fix client.html Just needed a way to safely access module parameters that might not exist. -------------------------------------------------------------------------------- 8cfa994ab4 | advil | 2018-09-25 14:47:39 -0400 Revert "Temporarily revert html side of forget password commits" This reverts commit f47f43309fcf60f96e15812b4b351e50b99c0873. -------------------------------------------------------------------------------- 5abb54889c | advil | 2018-09-25 14:45:36 -0400 Handle config.pys that lack lobby_url I missed that this was a new variable also. -------------------------------------------------------------------------------- f47f43309f | advil | 2018-09-25 13:47:14 -0400 Temporarily revert html side of forget password commits I think these are crashing servers that have updated but not restarted, temporarily pulling them until I figure out a better approach. -------------------------------------------------------------------------------- db1f849363 | advil | 2018-09-25 11:18:52 -0400 Merge branch 'floraline-webtiles-password-reset' -------------------------------------------------------------------------------- 33f0de1038 | advil | 2018-09-25 11:14:35 -0400 Handle the case where config.py lacks allow_password_reset Most servers don't keep their config.py in version control, or even merge with the git copy of config.py, so when adding new parameters to config.py one can't assume that they'll be there. (Yes, this is kind of a problem with how configuration is done in webtiles, that could use some more work.) -------------------------------------------------------------------------------- 68a31cccb1 | advil | 2018-09-25 10:20:06 -0400 Various small tweaks * improve code style (at least relative to our guidelines), comments * handle no auth smtp configurations * small tweaks to wording, logging -------------------------------------------------------------------------------- 12a1dd4888 | advil | 2018-09-25 09:01:34 -0400 Merge branch 'webtiles-password-reset' of https://github.com/floraline/crawl into floraline-webtiles-password-reset -------------------------------------------------------------------------------- b6b040f31c | gammafunk | 2018-09-24 00:01:08 -0500 Remove a spiral vault (11554) This vault is one of many single-tile-corridor spiral vaults. It places a set of out-of-branch air-themed monsters that aren't particularly challenging given the narrow layout. Since we already have a lot of spiral vaults that are more effective, remove this one. Closes #827. -------------------------------------------------------------------------------- 93a313ee0c | NormalPerson7 | 2018-09-23 18:13:40 -0400 Fix teleport closets in Cigotuvi's Fleshworks (11570) This wizlab previously had eight teleport closets, designed to be terrariums of various shapeshifted monsters placed on display. They are completely disconnected from the rest of the map and visible only through their transparent walls. This commit adds the no_tele_into flag to all tiles inside these eight areas, to avoid the player teleporting/being teleported into these areas and then having no way to get out of them. We use nine new symbols to ensure that the content of the wizlab isn't changed at all. -------------------------------------------------------------------------------- 7d5962a1ba | NormalPerson7 | 2018-09-23 18:12:22 -0400 Unify range checks between the targeter and fatal_attraction for Gell's This commit: (a) re-implements a gravitas_range function to be used by both the fatal_attraction function and the targeter for Gell's Gravitas; (b) makes this function return a value (2 or 3) solely dependent on whether the spellpower is greater than the breakpoint of 80 rather than using an overcomplicated and inaccurate formula to do this; (c) makes the fatal_attraction function check the range of an actor near to the centre of the "gravitational reorientation" using the gravitas_range function instead of checking if the calculated strength was greater than 0; and (d) calculates the strength as before in fatal_attraction, but removes the restriction that it must always be less than LOS_RADIUS - this sanity check was unnecessary and limited the damage slightly at high power for targets colliding when they are range 1 from the centre. -------------------------------------------------------------------------------- 77c8c957c9 | NormalPerson7 | 2018-09-23 18:12:22 -0400 Fix the spell targeter for Gell's Gravitas Previously, the formula used to calculate the targeted area was completely different to that which the spell itself used, resulting in the targeter blatantly lying to the player about the tiles which could and could not be affected. The current behaviour of Gell's Gravitas is entirely predictable based on spell power, with no randomness involved, therefore the new targeter is entirely in the darker yellow colour to indicate the certainty. The power breakpoints are: >0 power: at radius 1 from the centre, the monster is pulled 1 tile; >0 power: at radius 2, the monster is pulled 1 tile; >60 power: at radius 2, the monster is pulled 2 tiles; and >80 power: at radius 3, the monster is pulled 1 tile. The previous spell targeter suggested that, at low power levels, monsters at radius 2 could never be affected, and that at exceptionally high power levels, targets at radius 4 could be affected, both of which are incorrect. Hence, this commit changes the targeter to reflect the fact that monsters at radius 2 are always affected and monsters at radius 3 are always affected when, and only when, above 80 power. An argument could be made for having the targeted tile (the centre of the "gravitational reorientation") not appear coloured, given that this tile is not affected, however this would require significantly more work. This commit removes the gravitas_range function, which was previously only used for making the targeter, because it is no longer required. Additionally, this commit removes the player's tile being highlighted, given the player is never affected. -------------------------------------------------------------------------------- 3eb00d1601 | Aidan Holm | 2018-09-24 01:14:01 +0800 Fix dry fountain tile not showing in ?/F -------------------------------------------------------------------------------- 14233b2029 | Aidan Holm | 2018-09-24 00:56:45 +0800 Add list of embedded packages to simplebar.js (advil) -------------------------------------------------------------------------------- 4d241d03a5 | Aidan Holm | 2018-09-24 00:30:53 +0800 Add background to webtiles scrollbars -------------------------------------------------------------------------------- b82a549ae1 | Aidan Holm | 2018-09-24 00:30:49 +0800 Fix some webtiles scrollbar update lag -------------------------------------------------------------------------------- 45387a99ae | Aidan Holm | 2018-09-24 00:28:49 +0800 Fix webtiles scrollbar visibility and zoom issues The purpose of these modifications is to make the scrollbar 'stick out' from the side of the scroller window, so that it is flush with the edge of the popup. Unfortunately, using a transform is not possible here due to clipping. This commit resolves some issues reported by users where the scrollbar would not be immediately visible, and where the browser scrollbar would reappear if the zoom level was changed. -------------------------------------------------------------------------------- 1502417413 | Aidan Holm | 2018-09-24 00:28:05 +0800 Update simplebar.js to 3.0.0-beta5 This commit also changes to a human-readable and more easily editable version of the simplebar.js file. -------------------------------------------------------------------------------- aba95fd1df | Edgar A. Bering IV | 2018-09-23 09:18:14 -0400 Clean up internal comments (aidanh) Remove '////' and '----' instances being used as dividers or in internal comments that are not intended for ldoc. -------------------------------------------------------------------------------- 039bf959b9 | Edgar A. Bering IV | 2018-09-23 09:18:14 -0400 Sort lua api table of contents. -------------------------------------------------------------------------------- 7bc873d401 | Edgar A. Bering IV | 2018-09-23 09:18:14 -0400 Document the rest of clua in ldoc Modules food, item, spells, travel, and view, you. Globals from l-global.cc. The lua option metatable, internal macro hook, and clua modules iter and util; and globals provided from loaded lua. Documents module monster and the monster.info clua class based on the source diving and pastebin by Leszczynek. Documents globals defined in clua.cc inline using ldoc syntax; clua.cc does not have any Doxygen comments in it. If they get added in the future that could casue trouble. Documents the various entry hooks into lua used throughout the codebase in dat/dlua/userbase.lua, instead of in-line, as that is the file that initializes hook tables, just to keep things in one place. -------------------------------------------------------------------------------- a34892ab54 | Edgar A. Bering IV | 2018-09-23 09:18:14 -0400 Stubs for dlua only modules. Remove spurrious comments triggering ldoc, put in comment stubs in for modules provided only in dlua. Fixup some punctuation. -------------------------------------------------------------------------------- 49b57b546c | Edgar A. Bering IV | 2018-09-23 09:18:14 -0400 Document dlua additions to the crawl module Also fix some typos in the previous commit. -------------------------------------------------------------------------------- 96814a83a9 | Edgar A. Bering IV | 2018-09-23 09:18:14 -0400 Switch over and expand old luadoc This documents the dlua module colour and the clua parts of crawl, based on the old LuaDoc comments that were already present. -------------------------------------------------------------------------------- a2dadd3380 | Edgar A. Bering IV | 2018-09-23 09:18:14 -0400 De-Doxygen-ify These C++ files provide the Lua api, which is documented with ldoc. The corresponding parts of the internal C++ structure should be documented at their definitions. Unfortunately ldoc and doxygen almost but not-quite get along so they are exclusive. -------------------------------------------------------------------------------- c5a959909e | Edgar A. Bering IV | 2018-09-23 09:18:14 -0400 Switch from LuaDoc to LDoc LuaDoc never had C++ support, and is now listed as obsolete, directing users to switch to LDoc, which has C++ support (if a few quirks of its own). Adds a make target api-dev to generate a developer's api documentation. This includes internal functions and hooks that the user should not touch directly. -------------------------------------------------------------------------------- dcd3064b91 | Aidan Holm | 2018-09-23 15:58:45 +0800 Don't include hidden spectators in count (#11691, collin38) -------------------------------------------------------------------------------- c87c613cd2 | Aidan Holm | 2018-09-23 12:40:52 +0800 Improve monster description quote display This adds support for showing monster description quotes on webtiles, and uses a switcher widget to prevent the local tiles popup size from changing when switching between quote and description. -------------------------------------------------------------------------------- e70c5d8508 | Aidan Holm | 2018-09-23 12:21:10 +0800 Const-ify some member functions -------------------------------------------------------------------------------- 904d0f54cc | Aidan Holm | 2018-09-23 12:15:28 +0800 Unparent container widgets' children before destruction -------------------------------------------------------------------------------- 3217af623f | Aidan Holm | 2018-09-23 12:03:28 +0800 Fix rare text widget rendering glitch If a text widget with a maximum height has its size queried without being reallocated, its prewrapped text could be expanded beyond what would normally be shown. This fix ensures that text is wrapped to the correct size before rendering takes place, even if the widget was not reallocated (e.g. if it didn't move and wasn't resized). -------------------------------------------------------------------------------- 2f00525d27 | Aidan Holm | 2018-09-23 12:03:28 +0800 Fix crash when reducing popup width -------------------------------------------------------------------------------- 0ca621acee | Aidan Holm | 2018-09-23 12:03:28 +0800 Add background to scrollbars -------------------------------------------------------------------------------- f37f6fb109 | advil | 2018-09-20 10:32:57 -0400 Add messaging when servitors skip a turn Servitors sometimes sit twiddling their thumbs even with a target, and I've long wondered why, and even if this could be a bug (since this is something very few monsters do). I've also noticed there's a bunch of lore around this e.g. you need to constantly do ta to get a servitor to do something. It turns out it is intentional, and that for balance reasons servitors have a randomized interval between casts, that is implemented by random energy loss. There's no AI problem that I can find and so there's no need to do ta, but the interface isn't very transparent about what's going on. This change simply prints a message on every turn that a servitor loses to random energy as long as it has a target, so that this random delay is flavored with "something happening". The situation might also be helped by being clearer in the UI somehow about when allies have a target. As a side note, I'm not really happy about this effect being implemented using random energy, it'd probably be better to add an extra noop action to the servitor's action set and balance the weights directly, but that's a more complicated change to get right -------------------------------------------------------------------------------- 58cdd98f8d | gammafunk | 2018-09-19 00:17:35 -0500 Fix a message for wand pickup (minmay) -------------------------------------------------------------------------------- 24f899ac9f | advil | 2018-09-18 15:08:00 -0400 Revert complex bones install stuff, add dist_bones to repo As annoying as it is to have binary files in the repository, the bones installation code that this commit removes was ending up no less annoying, and considerably more complicated. This change will also make it easier for servers that reset the bones folder on incremental updates to make use of dist_bones. -------------------------------------------------------------------------------- a5275e7ff7 | advil | 2018-09-17 16:44:49 -0400 Fix the build -------------------------------------------------------------------------------- cb8baf84df | advil | 2018-09-17 15:27:21 -0400 Don't crash when doing describe-all with a buggy net in los This also removes net_holdee, instead of relaxing the non-null assumption; it's just a wrapper on actor_at with some assertions. This is the first step towards just removing the whole implementation of net status being stored as an item on the ground. -------------------------------------------------------------------------------- 440b721736 | advil | 2018-09-17 10:42:00 -0400 Add bones downloading to the `make source` step This is intended to simplify packaging on linux; since this step must be run from a repository, the downloader is more likely to succeed here than in later packaging steps. The result will be a source distribution that has the bones tarbell in place so that any build process on that source distribution defaults to using the local bones file, rather than downloading. (This could be overridden by deleting the local bones file in that source directory.) -------------------------------------------------------------------------------- dbc91a4fd4 | advil | 2018-09-17 10:02:30 -0400 Add a way of using a local bones distribution for make install To use this, put a file named dist_bones.tar.gz containing bones files in the appropriate directory structure (in `dat/dist_bones/` in the tarbell) in `source`. You can also use a custom location by changing LOCAL_BONES_LOC. If this file exists, it will override the steps that try to download the bones file from github. This may be useful for doing things like building crawl in a chroot that doesn't have wget/curl. Also updates .gitignore. -------------------------------------------------------------------------------- 3888083293 | advil | 2018-09-17 10:01:16 -0400 Clear trapping nets when a monster moves via gell's (minmay) This appears to have been intentional, but this code is inherited from singularity, so the history is a bit complicated and I'm not really sure why it was this way. This was resulting in the net being marked as trapped, but with no actor trapped in it, so it couldn't be picked up. Also do some other cleanup that seems to have been missing. -------------------------------------------------------------------------------- 97aacdb306 | Aidan Holm | 2018-09-15 21:49:22 +0800 Fix inventory menu obscuring some message prompts (#11645, Yermak) -------------------------------------------------------------------------------- 50e13424c7 | Aidan Holm | 2018-09-15 21:46:19 +0800 Hide shopping list key if shopping list is empty -------------------------------------------------------------------------------- d05d27e280 | Aidan Holm | 2018-09-15 20:33:38 +0800 Show correct MP after aborting spell (#11598, Siegurt) MP is deducted before casting begins, and the deducted amount is returned if casting is aborted, but the screen was not refreshed afterward, leading to player confusion. -------------------------------------------------------------------------------- 8f6560338e | gammafunk | 2018-09-15 01:51:00 -0500 Properly disable Scrying when abandoning Ashenzari (guyde, salmon) -------------------------------------------------------------------------------- 5ae17c6e89 | CanOfWorms | 2018-09-11 23:35:06 -0400 More description updates Mention a (sometimes important) uncommon interaction of teleportation scrolls. This is already in the status description section (?/T), but there's no harm in making it more visible. -------------------------------------------------------------------------------- 07fecf47cd | CanOfWorms | 2018-09-11 20:07:57 -0400 Update some scroll descriptions Clarify exactly what can (or more specifically, can't) be affected by fear. Unfortunately, this is not a perfect solution as holiness is hidden to the player, but the holiness of most monsters (especially in the early dungeon) is usually clear so it should help newer players. The Cause Fear spell should also have an updated description, but it currently uses the monster spell description, so that needs to be adjusted first. Also remove a very outdated reference to hides in the enchant armour scroll description. -------------------------------------------------------------------------------- b21e69520c | gammafunk | 2018-09-10 18:34:05 -0500 Adjustments for the Lehudib's Moon Base WizLab Update the loot in this map to introduce some good loot potions and scrolls among the loot piles. Also replace the "acquire any" item with artefact jewellery or good_item aux armour and replace one superb item in the main loot pile with this. We want to save use of "acquire any" for things like troves, and there was no need for this particular item to depend on the player. Next, give the moon troll a couple randomized monster friends so that he's not stuck all by himself. Finally, slightly tweak the monster set to remove rust demons and have the random monster list (used for Shadow Creatures) more in line with the monsters on the map. For level adjustments, make some transparent stone areas to see into the moon troll's lair area. This lets the player see the loot they're after as well as where they will land when they take the transporter. It also helps reveal the artefact book in the lair area, which is something players have tended to miss. Finally, reglyph the vault DES to not use pre-defined glyphs in our custom glyph definitions. -------------------------------------------------------------------------------- 0d986b7597 | gammafunk | 2018-09-10 18:24:08 -0500 Move scroll and potion loot definitions to a better location The lists formerly in ghost_loot_scrolls and ghost_loot_potions are now in dgn.loot_scrolls and dgn.loot_potions, respectively, defined in dungeon.lua. This allows them to be used outside of ghost vaults. -------------------------------------------------------------------------------- f92cf62f8f | advil | 2018-09-10 17:31:32 -0400 Remove glob from tar call in Makefile Gnu tar handles globs differently and they would need to be manually activated just for those versions; this change should work the same on all versions of tar (I hope). -------------------------------------------------------------------------------- 6564cf386f | advil | 2018-09-10 17:29:37 -0400 Fix some warnings (gammafunk) -------------------------------------------------------------------------------- 826d253260 | advil | 2018-09-10 15:48:18 -0400 Add bones downloading to package/install targets This is not very elegant in that it will try to redownload the bones package each time these targets are called, but I did it this way so as to not make build success contingent on actually downloading this thing for these targets. Better Makefileing welcome. I believe this covers all of our packaging targets; I've tested it on mac tiles only so far. -------------------------------------------------------------------------------- 7711e572f3 | advil | 2018-09-08 20:25:11 -0400 Attempt to fix newgame colors on remote console (11671) I can't get this to happen locally, but it looks like an issue with only 8 colors being used in the newgame menus over ssh, even with the right options set. (Maybe unsurprising, since the options aren't read yet). This resets the highlight colors for webtiles specifically to what they were before 44136481aa11. Looks ok in webtiles, could be better. As a side note, using blue for dispreferred combos (as a fallback for darkgrey) in console looks really bad. -------------------------------------------------------------------------------- 800ba1ec23 | advil | 2018-09-08 15:15:46 -0400 Add a build target for installing bones distributions The way this works is that it looks for a file named `dist_bones.tar.gz` as an asset attached to the most recent tag on github, and downloads any files in that tarbell that will unpack into `dat/dist_bones`. It will try either curl or wget, and fail with an error message if neither are available (or if the relevant link is 404). The tarbell needs to be manually uploaded to the tag. For now, no other build rule calls this so it will need to be done manually. -------------------------------------------------------------------------------- d0dd13620d | advil | 2018-09-08 15:15:46 -0400 Add a basic deduplication command for bones files There might be a bug somewhere that is resulting in multiple copies of the same ghost? -------------------------------------------------------------------------------- 70f5b0061b | advil | 2018-09-08 15:15:46 -0400 Tweak permastore sizes Branches where the store doesn't include individual levels (e.g. depths) could be a bit bigger. -------------------------------------------------------------------------------- daa33e9031 | advil | 2018-09-08 15:15:46 -0400 Further tweaks to --bones commands A few formatting fixes; also, don't require case matching for rm, and show count for ls. -------------------------------------------------------------------------------- b54bf1b0da | advil | 2018-09-08 15:15:46 -0400 Clarify semantics of player_in_hell I would've expected that this includes the vestibule (and did, leading to a bones naming bug), but it didn't, so this change provides both options. -------------------------------------------------------------------------------- 3cb3a19595 | advil | 2018-09-08 15:15:46 -0400 Command line tools for manipulating bones files These are aimed at preparing a bones collection for offline builds. -------------------------------------------------------------------------------- ee4e6b7238 | advil | 2018-09-08 15:15:46 -0400 Increase MAX_GHOSTS This used to place a (very coarse) limit on how many ghosts could in principle spawn on the same level. This limit is meaningless now, because ghosts spawn only via vaults, and it was acting as an artificial constraint on how many ghosts could be in a bones file. Increase this so that permastore files can be bigger. -------------------------------------------------------------------------------- 28ba102798 | advil | 2018-09-08 15:15:46 -0400 Don't use the full minor tag versioning for bones files Only use the subset that is relevant to reading and writing ghost_demons. The issue here is that upgrading a bones file on a server leads to it not being loadable by older saves, and it gets upgraded any time a new minor tag is introduced. A previous commit introduced a somewhat complicated backup system to deal with this, but that still had some corner cases, and leads to unnecessarily many bones backups on servers. The fact is that most save compat doesn't have much to do with bones files, and out of the current 199 minor tags, only 4 actually impacted bones. So, only use relevant minor tags for bones versions (which do need to be manually set). I'll leave the backup thing in place, but this change means that it only rarely will come into play. This doesn't impact ghost_demons in player saves, which inherit the versioning from the save. -------------------------------------------------------------------------------- 2c6674ca8f | advil | 2018-09-08 15:15:46 -0400 Support for distributing bones permastore files in dat/ This doesn't yet actually finish the mechanics of distributing them, but if permastore files are put in the right subfolder of dat/, they will be copied to the player's bones folder when needed. This should even work on a server, though it's less necessary there. -------------------------------------------------------------------------------- ee7bbb8033 | advil | 2018-09-08 15:15:46 -0400 Improve the new save version api a bit and use it more Encapsulates more version logic in just tag-version.h, with a cleaner interface. -------------------------------------------------------------------------------- 2e7624f900 | advil | 2018-09-08 15:15:46 -0400 Remove a debugging change -------------------------------------------------------------------------------- add243beea | advil | 2018-09-08 15:15:46 -0400 Improve handling of upgrading bones files for online games Plus several other fixes + a bunch of streamlining. Now, when a bones file is loaded that is an old save version, a numbered backup of it will be made before upgrading so that previous versions of the game can still use the backup, rather than failing to load the updated versions. Despite all this fancy footwork, the situation still isn't all that great. For example, suppose that a player triggers a bones update for some file from 34.199 to 34.201, and then another player comes along with save version 34.200. Possibly a solution is to look for older versions at that point, but I haven't yet come up with a good implementation of that. Another possible solution is to move to a seperate versioning system for bones files (probably a subset of the minor tags); most of this is a pseudo-problem in that there is very little save compat in bones files at all. -------------------------------------------------------------------------------- f6d1ed2717 | advil | 2018-09-06 22:06:40 -0400 Add cross-compiling to travis Would be nice to consistently test if the windows build is broken. This actually builds the packages, so we could consider replacing the CAO unstable builds with something like this. -------------------------------------------------------------------------------- 7664ed78f7 | Aidan Holm | 2018-09-06 22:09:52 +0800 Remove debugging console.log() calls -------------------------------------------------------------------------------- 21b9829214 | Aidan Holm | 2018-09-06 22:09:36 +0800 Fix misaligned aptitude table highlighting (#11662, falconhit) -------------------------------------------------------------------------------- 2abc2a7c72 | Aidan Holm | 2018-09-06 21:56:31 +0800 Add tile for grasping roots monster spell -------------------------------------------------------------------------------- 7935be99ec | gammafunk | 2018-09-06 01:05:32 -0500 Give Jorgrun the Grasping Roots spell This will give Jorgrun a way to get in damage from anywhere and hopefully give him more chances to get in range for iron shot. This commit also re-adds Jorgrun to Swamp. He now has a full-range source of damage that doesn't depend on walls, which Swamp lacks. -------------------------------------------------------------------------------- b865740ec8 | gammafunk | 2018-09-06 01:05:32 -0500 Rework the Grasping Roots ability of Shambling Mangroves This monster ability currently applies a Roots status that lowers player EV, slows movement, and removes any flight. This is similar to a number of existing monster effects and is a mild effect overall. This commit reworks Grasping Roots to be a smite-targeted version of monster constriction, similar to the effect used by the player Borg's Vile Clutch spell. Grasping Roots now applies a non-resistable constriction effect to the player (or target monster) when cast, with similar for escape for the normal constriction used by e.g. naga monsters. The constriction damage for Grasping Roots is higher than direct constriction, using two dice instead of one. This is 2d9 for shambling mangroves at 13 HD, which is high enough to be significant when applied over several turns. Constriction impedes movement and lowers EV similarly to how the Roots status did, but adds additional escape restrictions as well as significant damage. These help Grasping Roots be a more meaningful ability without requiring players to learn the effects of yet another player debuff. -------------------------------------------------------------------------------- 12c6407db4 | gammafunk | 2018-09-06 01:04:34 -0500 Make a function non-static and reorder its arguments The monster spell-power calculation will be needed outside of mon-cast.cc in the future. Also use a more logical argument order that's consistent with the other global mons_ functions. -------------------------------------------------------------------------------- e4bf05c952 | gammafunk | 2018-09-06 01:01:22 -0500 Fix monster spell ranges for certain spells and refactor For monster spells with range varying based on spell-power, properly use monster HD as an argument for the range lookup instead of using the monster's spell-power. This was effectively giving monsters a range boost for these spells. Also refactor a range function to have a clearer name and more logical order of arguments. -------------------------------------------------------------------------------- 1adec7bb76 | gammafunk | 2018-08-31 00:07:13 -0500 An updated tile for the Robe of Vines (ploom, ontoclasm) -------------------------------------------------------------------------------- 8eac906cd0 | gammafunk | 2018-08-31 00:07:13 -0500 Update a Depths vault (minmay) The door for this vault was meant to contain the jellies, which can't open doors. However, after the player first comes into view of the jellies, a subsequent autoexplore will see that the jellies are sealed and proceed normally, opening the door. This commit makes the vault have a proper runed door to prevent autoexplore from opening it. We also update the threats in the vault, removing early Dungeon slimes and replacing those with slime creatures and higher level jellies. Additionally remove unnecessary no_tele_into and no_item_gen flags. There's nothing in particular about this vault that should require preventing teleports (or not generating items) compared to other runed door vaults. -------------------------------------------------------------------------------- 456867d837 | advil | 2018-08-30 23:23:54 -0400 Fix incorrect .. in some text popups on hidpi displays The problem was that the window preferred height was calculated including subpixel advances, but the code to actually split the string and trim it before rendering it was not. When deciding if text would fit, it was sometimes (depending on the exact math) predicting that the text was one line longer than it actual was (with subpixel advances), and it therefore would chop the last line and put `..` in place of the last two characters of the prior line. -------------------------------------------------------------------------------- 7f38390aa5 | advil | 2018-08-30 22:10:46 -0400 Fix ?/ at the main menu This isn't very elegant, it just uses two sequential popups. It's still better than what was happening before, where the prompt text wasn't begin displaying at all. -------------------------------------------------------------------------------- a22e90c45f | Alan Malloy | 2018-08-29 11:08:36 -0700 Fix announcements for collecting runes in Sprints (hayenne, #11655) -------------------------------------------------------------------------------- 286b84bf81 | advil | 2018-08-29 09:30:38 -0400 Tone down some blue/purple fog machines (hayenne) These were written assuming a spread rate of 0, I think, but this was changed in 646ff71b4c43. (Though the size parameter in sprint_mu.des just seems wrong, and maybe calibrated for gloom before a0ae0798b3ff7928?) -------------------------------------------------------------------------------- ef0ad6d46f | AndSDev | 2018-08-28 12:28:08 -0700 Highlighting exploring horizon behind the doors -------------------------------------------------------------------------------- 722f094350 | advil | 2018-08-27 16:43:06 -0400 Tweak newgame highlighting further for console/webtiles It turns out that console has some fancy thing that automatically inverts the foreground colors when needed, but this was resulting in lightgray on lightgray highlighting in webtiles. These tweaks fix that, and also remove the darkgray on blue combo for non-preferred options that was also not so readable, replacing it with simple darkgray on lightgray, which is readable on both targets. -------------------------------------------------------------------------------- e225a8b5e9 | advil | 2018-08-27 11:23:52 -0400 Add explicit description of jelly spawning mechanic to TRJ This is one of those things that everyone knows, except when they don't yet, and it's actually fairly spoilery. This change will also hopefully make the three main corner cases a bit clearer: stabbing, poly, and (recently) grand finale. -------------------------------------------------------------------------------- 23b030f935 | advil | 2018-08-27 11:03:12 -0400 Fix a grammar issue with flying corrosive monster bits -------------------------------------------------------------------------------- 2ef98b0e17 | Aidan Holm | 2018-08-27 21:49:45 +0800 Convert some malloc/free code to std::array -------------------------------------------------------------------------------- fd4a40fe29 | Aidan Holm | 2018-08-27 21:07:50 +0800 Fix incorrect minimap resizing (RoGGa, #11642) Placing the minimap uses the difference between m_statcol_top and m_statcol_bottom to calculate how much available space there is to show the minimap. m_statcol_bottom was being wrongly calculated because some inventory size calculations hadn't been completed. This is fixed by completing those first, if they haven't already been done. -------------------------------------------------------------------------------- 2622018599 | Aidan Holm | 2018-08-27 21:07:05 +0800 Allow minimap to shrink when tile_map_pixels set (RoGGa, #11642) -------------------------------------------------------------------------------- 0e7800ee05 | advil | 2018-08-26 18:55:25 -0400 checkwhite -------------------------------------------------------------------------------- 3b8b0789e7 | advil | 2018-08-26 18:55:19 -0400 Spawn jellies when TRJ dies to grand finale (Doesnt) I'm pretty sure this was just an oversight, the regular jelly spawn code path is in react_to_damage but grand finale just calls monster_die. This change brings this TRJ tech in line with poly and stabbing. -------------------------------------------------------------------------------- 2d122ddfbf | gammafunk | 2018-08-26 15:35:48 -0500 Remove the trunk reminder for the 0.22 tournament This reverts commit aa8cc03057152a697db27c544c24ec6098168342. -------------------------------------------------------------------------------- a8cb661cfc | advil | 2018-08-26 09:06:26 -0400 Notify player before forgetting a non-library spell (RoGGa) Applies to Vehumet gifts. With a large spell library, it's very easy to lose trick of where spells came from and not be aware that some spell has only been encountered via vehumet and won't be re-memorizable. Since the only UI doesn't display this information anywhere in the spell menus (you'd have to track it down with ?:), include this information in the new confirmation prompt. -------------------------------------------------------------------------------- 19e28b46dc | Aidan Holm | 2018-08-26 02:09:27 +0800 Wrap chardump notes, overview, and messages (NormalPerson7, #11583) Notes and messages are the major contributors to overly long lines, but the chardump still contains a few tables that can reach up to 105 columns; these are more difficult to adapt to smaller screen widths. -------------------------------------------------------------------------------- 9417b5cadc | Aidan Holm | 2018-08-26 01:47:25 +0800 Ask for confirmation when forgetting spells (RoGGa, #11581) -------------------------------------------------------------------------------- ecc7f9df0b | Aidan Holm | 2018-08-26 01:34:39 +0800 Fix double-space in Ash dancing weapon warning (Pekkekke, #11603) Not sure why Ash feels the need to warn about these.. -------------------------------------------------------------------------------- b1aafca977 | Aidan Holm | 2018-08-26 01:08:12 +0800 Fix X> leaking location of portals (silenth. #11629) As far as I can see, is_feature() checks against the known feature in a location; this commit changes that function to return true for portal entrances and exits, allowing them to still function with > and < if they are known to be entrances/exits. _is_feature_fudged() calls is_feature(), and then checks some extra special cases; we remove checks for portal entrances/exits here, since these are checks against the actual feature, rather than the player-known feature. -------------------------------------------------------------------------------- f5ddf05aac | Aidan Holm | 2018-08-25 22:23:57 +0800 Fix compilation error with TOUCH_UI=yes (sagitter, GH #833) This fixes support for clicking the menu title/more in order to switch panes. It seems quite a few menus don't specify a cycling action, howver, and there are some menus with multiple toggleable options (e.g. stash tracker menu); perhaps these should be made into explicitly clickable buttons? -------------------------------------------------------------------------------- 44136481aa | advil | 2018-08-24 19:59:30 -0400 Make newgame menu highlighting less toned down in tiles Depending on the highlight color, things were pretty invisible at these alpha values, partly because tiles and console colors *really* don't match up (even though code assumes they do). This maybe goes too far in the other direction, so could use some further tweaking. I also toned down the amount of colors used in the newgame menus on local tiles, where I don't think they look good. (I have my doubts about console as well, especially the blue, but I left that as-is.) The change from WHITE to LIGHTGREY in startup.cc is mainly for local tiles to balance out the alpha change, it doesn't have an impact on console. -------------------------------------------------------------------------------- 0f769d1648 | advil | 2018-08-24 19:59:30 -0400 Fix swapped blue/green in BoxMenuHighlighter highlight color -------------------------------------------------------------------------------- a86c9e7f02 | gammafunk | 2018-08-23 22:30:04 -0500 Updated Azrael tile (ploom, CanOfWorms) -------------------------------------------------------------------------------- 70321190f2 | Aidan Holm | 2018-08-23 20:09:58 +0800 Fix item description formatting, take two (NormalPerson7, #11632) Using 'pre-wrap' here instead of 'pre', which was causing some descriptions to be clipped, since their description text was unwrapped. -------------------------------------------------------------------------------- ebca68c5b3 | gammafunk | 2018-08-23 00:15:23 -0500 Updated mana viper tile (ontoclasm) -------------------------------------------------------------------------------- 4173aa6431 | gammafunk | 2018-08-22 23:50:16 -0500 Updated dream sheep tile (CanOfWorms) -------------------------------------------------------------------------------- 8d3be6a088 | gammafunk | 2018-08-22 21:48:57 -0500 Updated shock serpent tile (ontoclasm) -------------------------------------------------------------------------------- 55e0228dad | advil | 2018-08-22 15:02:08 -0400 Provide a (disabled-by-default) way to use lua require Add #define CLUA_UNRESTRICTED_LIBS to load all libs (or do it from the command line); if this is set, the original global value for "require" loaded by package will be bound to `lua_require`. (Crawl has its own `require` that shadows this.) -------------------------------------------------------------------------------- b59193a44f | Aidan Holm | 2018-08-23 02:27:43 +0800 Revert item description fix (silenth, #11633) -------------------------------------------------------------------------------- 497f4a5a2c | Aidan Holm | 2018-08-23 02:15:57 +0800 Fix require() only failing the first time (pibborn) Filenames were added to a list of already-loaded files before loading was actually attempted, which meant that only the first load failure returned an error, with subsequent require() calls returning true. -------------------------------------------------------------------------------- 6bf7575dfd | Aidan Holm | 2018-08-23 00:05:23 +0800 Fix god screen powers colours on webtiles (btonasse) Not proud of this... fg* are used instead of the colour_* classes because unsurprisingly, the colours are not actually the same. Separately, the match for the colour tag is optional because on Gozag everything is yellow all the time, so only the first line has a colour tag. -------------------------------------------------------------------------------- d4e5561ac0 | Aidan Holm | 2018-08-23 00:02:39 +0800 Fix webtiles whitespace formatting (NormalPerson7, #11632) Apart from the issues described in the mantis report, this also fixes a bug where ash bondage info was not displayed on the ^ screen. -------------------------------------------------------------------------------- 5e4b187028 | Floodkiller | 2018-08-21 23:26:09 +0800 Add another set of Gnoll playerdoll tiles Adds another set of Gnoll playerdoll tiles, by Metoron. -------------------------------------------------------------------------------- f7ee2ed0be | advil | 2018-08-20 20:50:41 -0400 Continue to work around old firefox bugs This time firefox 47 -- it appears that max-height was never inherited properly from a calc'd max-height in this version, fixed before firefox 49. This makes it explicit everywhere that it's needed (unless I missed some popup type), which fixes the issue. n.b. I can still see some broken things in firefox 47, which we may be less likely to fix. For example, the god screen panes don't work right, even though this commit makes that popup not completely unusable. -------------------------------------------------------------------------------- 46bba9cb96 | advil | 2018-08-20 20:18:44 -0400 Avoid dith "unlinked items" for clumsy bashes (RoGGa, 11413) RoGGa noticed in 11630 that this seems to happen when your shadow mimics a clumsy bash with a ranged weapon. What is happening is that your shadow unwields the range weapon and then attacks unarmed -- I'm not even sure if clumsy attacks with a ranged weapon are implemented for monsters. This was moving the mimicked weapon into the alt slot, and it wasn't getting cleaned up. -------------------------------------------------------------------------------- 63f3d0bd30 | advil | 2018-08-19 15:04:15 -0400 Load the lua libs correctly for Lua 5.1 It turns out that these setup functions aren't supposed to be called directly from C as of lua 5.1, but rather called like a lua function. This is documented (very briefly) in: http://www.lua.org/manual/5.1/manual.html#5 http://www.lua.org/manual/5.1/manual.html#7.3 This doesn't appear to have mattered for the libraries we were using (though who knows), but it does matter for other libraries: e.g. package will panic if not loaded the right way. A recommendation that I found on stackexchange was to see how it is done in linit.cc for the specific version of Lua one is using, and follow the practices there, so that's more or less what I've done. If we upgrade Lua to some later version, it sounds like this might change again, so this code may need to be updated. (cherry picked from commit ce2052a233ead033e2f61c92c51e49403427babb) -------------------------------------------------------------------------------- 9f8b2530fb | gammafunk | 2018-08-19 14:02:41 -0500 Make the Temple entrance always visible for two entry vaults (hayenne) These vaults require access from the floor below and have glass showing the Temple entrance on the current level. However the entrance is only visible from a square adjacent to the glass, and it's currently possible for that square to be a solid feature from the rest of the level. This commit includes the relevant square as normal floor in these maps. -------------------------------------------------------------------------------- 3bb90113a8 | advil | 2018-08-19 12:37:02 -0400 Tweak texture loading error message Make the consequences of the error more transparent to users who haven't encountered this before. -------------------------------------------------------------------------------- e8f86619e0 | Aidan Holm | 2018-08-18 17:00:15 +0800 Show now-monster-only spells on ?/S Spells that the player used to be able to cast, but that are now munster-only, are marked as removed by spell_removed(); but since monsters can still cast them, and the player may reach their description by other means (such as via a monster description), it's useful to show them directly in ?/S. This does not show other spells that have actually been removed (e.g. delayed fireball), presumably because lookup-help uses the descriptions database to find all candidate spells, and fully removed spells have had their descriptions removed. -------------------------------------------------------------------------------- 1b1c69945b | Aidan Holm | 2018-08-18 16:57:32 +0800 Restore mass confusion tile Mass Confusion can still be cast by pan lords and ancestors. -------------------------------------------------------------------------------- 5e01147d08 | Aidan Holm | 2018-08-18 16:31:09 +0800 Add twisted resurrection tile (NormalPerson7, #11622) -------------------------------------------------------------------------------- 33897af1d2 | advil | 2018-08-17 21:59:30 -0400 Fix at least some Beogh unlinked item bugs (8187) The problem was with named followers who had been gifted items. What was happening was that both drop_item and take_item could fail, but beogh_gift_item() didn't check for these fail conditions and forced the gift on the follower regardless. If the follower had an old item in the relevant slot, this left the old item still associated with the follower but unlinked, and errors started showing up when the follower died and the item didn't get properly converted to a floor item. The main case where this came up was if you gifted a follower an item and the item they already had in that slot was cursed, causing drop_item to fail. The key symptom (which is rather hard to notice) is that the follower wouldn't generate a drop message for the old item. I have changed things so that Beogh removes the curse in these cases, so that the follower can drop their cursed item. Alternatively, the gift could just fail, but this harsher behavior didn't seem to me to contribute anything interesting to gameplay. I've also ensured that take_item respects drop_item's fail conditions, and that beogh_gift_item respects take_item's fail conditions with an error message. There are many variants of this out there so I can't promise this fixes all of them, but I think this will probably fix the Beogh version; all the saves I have access to are consistent with the case I have replicated and fixed here, though for many of them the only real evidence is that a named follower previously died on the level in question. To figure this out, it was crucial to get access to a tv that included the whole sequence of events; thanks to Defined for having a fairly precise description of their instance of the bug that allowed me to do this (the tv: `!lg defined game_key=Defined:cxc:20180717045212S -tv: