-------------------------------------------------------------------------------- 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