Skip to content

Conversation

@alexjurkiewicz
Copy link

Single-use dungeon feature that can enhance (or damage) a non-artefact
weapon/armour item. The success chance decreases with increasing
enchantment/ego level. On success, add enchantment or an ego; failure
can do the opposite.

Has a few bugs right now.

john-science and others added 29 commits October 23, 2019 16:57
853fe2e fixed this for harming allies, but not yourself.
The vault cheibrodos_wizard_tower placed on-average 3 8-tier monsters at
Lair depth, which is fairly nasty. This commit reworks the monster and
loot placement to better scale with depth, starting with 1.25 monsters
at D:7-9. The monster set now includes a possible deep elf annihilator
in Dungeon, but only at depths where those are possible 8 spawns, and
with a small chance. The monster count in Elf has been increased as
well.

The vault range is now increased to include D:13-D:$. The loot now has
some thematic aux armor, randbooks, and staves mixed in, and the loot
scales in count with depth.
This has been broken for a while; it was a mid/mindex confusion. I've
also refactored the call so that it will better handle the case where
your summon does before the fineff fires.
We'll see if players think this is too spammy or too obscure, but for
0.24.0 at least this will be helpful for testing any seed issues that
come up.
(cherry picked from commit 54606e7)
(cherry picked from commit a7d21de)
I found some names (apparently) not in here while writing the release
post. Also, apparently CXC was missing from here??
This introduces a bunch of extra detail and modifies some of the
recommendations based on our experience packaging debs over the last few
releases. Main changes:
* explicit discussion of how to check dependencies of the built debs,
  hopefully avoiding ubuntu incompatibilities.
* recommend always fully specifying OS/DIST/ARCH for creating and
  updating cows; this would head off some mistakes I've made at least.
* convert doc to md, some cosmetic overhauls
Win32 colour adjustment was added so that the new menu implementation
was legible on windows console, but the legibility issue was fixed at
6844edd, which added explicit menu colouring. Meanwhile, colour
adjustment is breaking the foreground text colour on the species/job
menu on Windows. I'm not sure why unix is not affected.

This reverts commit 40b4c61.
This fixes weird behavior in two cases: (i) it keeps the permastore from
being updated when ghosts are used during level load but the level is
vetoed, and (ii) it keeps the permastore from being updated
unintentionally using wizmode commands.
Unfortunately it's not a good idea to cherry-pick this to 0.24 during
the tournament (or maybe during 0.24) as this change will potentially
affect any seed that uses minmay_the_grid.
Console crawl has a concept of 'branding' colours, which involves
setting one of several high bits each corresponding to a given brand.
This brand is then looked up in the options, allowing customization of
e.g. how summons are displayed.

On win32 console, branded colours were converted into actual colour
pairs (fg and bg) much earlier than on unix console, (inside the
real_colour() function), with the background colour being stored in bits
0xF0. This worked fine because win32 textcolour() actually updated both
foreground and background colours simultaneously, until db4295c,
which corrected this API inconsistency, inadvertently breaking branded
colours.

This commit moves win32 console branding into libw32c.cc, and applies
branding in the same way it is applied for unix console, fixing this
issue.

I'm not sure why the win32 branding was also enabled for all local tiles
builds, since tiles never draws anything via the console...
It's generally assumed that titles and entries of the same number of
characters will have the same width. This was not the case because menu
entry text has a right-padding of 10px. This commit adds a right-margin
of 10px to both the title and the more, which fixes ellipsizing of menu
entries when the window width is reduced.
The spell info and memorise menus were slightly wider than the
minimum width. When viewing a description from one of these menus on a
console screen with minimum width (79 chars), the UI layout engine takes
the width of the lower layout into account, and makes the description
view wider than the viewport. Any text outside the viewport is
then truncated, leading to seemingly incorrect wordwrapping.

Menu minimum widths are primarily determined by the width of the title
string. Trimming off empty spaces at the end is enough to fix the issue.
Keyboard events now have to be explicitly passed to scroller widgets, as
they cannot (currently) be focused. A better implementation is in the
works.
This commit reworks worms_lemuel to place more reasonable numbers of
monsters in the earliest depths and to scale monsters and loot up with
depth. For example, in D:7-10 it places only two on-average and 3 at
maximum. The moths of wrath and/or torpor snails are also scaled more
reasonably, only beginning to appear in Lair. Previously the vault used
absolute depth for monster placement, but now it looks at branch and
branch level. The vault's layout is slightly changed to accommodate the
potential max number of spawns.

I've also made the vault place within-branch monsters in Swamp/Spider,
since placing swamp worms in Spider is not too interesting. Now it uses
demonic crawlers in Spider and only torpor snails as the "assistant"
monster there, since crawlers can't be berserked by moth of wrath.
cursorto() moves the on-screen cursor to the correct position, given the
cursor offset in the input text. However, resumable_line_reader never
renders to the screen directly, so it's safe to NOP this function
entirely.

The crash itself seems to have something to do with the line reader
start position, but I'm less interested in fixing this hacky mess
because a replacement (textentry widget) is almost finished.
Change i_feel_safe to alert the player instead of waiting near friendly
fulminant prisms, ball lightning, or ballistomyete spores. Currently
this is slightly overzealous and will refuse to wait in sight of a
fulminant prism regardless of distance, but this minor edge case is
preferable to players waiting after a fight with Fedhas or CBL and dying
after pressing 5.
The UI layer calls viewwindow() via redraw_screen() to ensure that
the base layout (view, hud, and messages) is fully rendered before
rendering any popups (if there are any). viewwindow() does not render
the main view if the player is currently running, however, so if
autoexplore is paused during a prompt (e.g. the inventory full during
pickup prompt or rune pickup force-more), the view is not fully rendered
on either tiles or console.

This commit fixes this issue by only skipping rendering while running if
the current mouse_control mode is MOUSE_MODE_NORMAL. Prompts via more()
and yesno() change the mouse mode, forcing full rendering.

This commit also fixes the turn counter not being updated while
running, and partially fixes the more prompt while running. Currently,
at least on local tiles, resizing the window causes the --more-- line to
disappear, due to the way the message code is structured.
Scattershot and Cloud cone were incorrectly using a fake_beam tracer to
determine when to be used as wand spells, instead of the relevant tracer
functions from mon-cast.cc
marksg07 and others added 29 commits December 8, 2019 10:41
[ Committer's note: Squashed and rebased. Closes crawl#1109 ]
Ability slots need to be claimed before setting initial piety. This
is because if a player's starting piety is at least 1*, the local
tiles version will trigger a redraw of the ability tab, a side
effect of which is to fix any available but unassigned abilities
using the default logic (starting at f) rather than the god ability
rules (a-e + X).
Divine abilities are blocked by silence, but renouncing your religion
isn't really a divine ability.
The cause was an unintentional fallthrough.
The function get_monster_equipment_desc already tried to get a
description including what is quivered, but this part of the inventory
wasn't copied from the monster to its corresponding monster info. This
commit makes that copying happen.

This allows players to rely less on animations to tell which monsters
are doing what.
Update conditions for including information about monster gear in the
"comes into view" message in several ways:

- monster gear is all identified, so no need to check that

- now warn for all artefacts as well as for branded equipment (an orc
  warrior with Maxwell's Patent Armour is often at least as interesting as
  an orc with branded plate, but its armour wasn't noted)

- the old rules were not warning for wands in the alt weapon slot (I'm
  not clear on whether this can even happen?) if they were not offensive
  wands. The rules for warning about wands shouldn't depend on what slot
  the wand is in. Also one often wants to be warned or force-mored for
  monsters with wands of digging, despite their being non-offensive. That
  leaves wands of random effects as the only non-offensive wand; rather
  than special casing the single wand type, we warn for all wand types.

  [ Committer's note: Monsters may learn to use random effects in the
    future, this is good future proofing. ]
When multiple monsters come into view at the same time, the game warned
you if a monster was using a dangerous weapon but ignored other
equipment, even if that equipment was interesting enough that it would
be flagged if the monster were alone. This commit liberalizes what the
game is willing to note.

It also changes the function to check equipment through the monster info
instead of directly, on the grounds that warnings should be based on
revealed information only.

As a side-effect this liberalization also fixes a small bug with alerts
for dual-wielding monsters.

This commit increases message spam, which is unfortunate. But warnings
about what items monsters have are relatively important messages,
especially since many players use force_mores to warn about dangerous
monsters.

[ Committer's note: Squashed and rebased. Reworded one commit message
  since the change had been implemented in trunk but the commit
  contained helpful comment clarifications. Closes crawl#1215 ]
Through 0.25-a0-277-g7046ed1b37.
The range check always considered it to be cast with power -1 so would falsely
claim that no enemies were in range when the flash reached radius 3.
This is sort of a quick fix. e48d713 changed the behavior of
split_string so that it parsed '' into a single segment '', where before
it would turn '' into an empty segments list. The old behavior
implicitly prevented the log replay from filling the buffer with many
empty lines. This commit fixes the issue by restoring the old behavior
just for log replays, and doesn't address the question of why these
empty log messages are there in the first place.
Use the predefined aux armour list in dungeon.lua instead of making our
own list, use better syntax for NSUBST, and clean up statement
alignment.
Prepare to get slurped! Swamp worms line a narrow corridor of Zot traps
with briar patches on either side. The worms are contained by lava and
try to collide the player with lava, the briar patches, or the Zot
traps, depending on the player's position and whether they are flying.
Either flying over the lava or destroying the briar patches offer paths
to the loot. Loot consists of good jewellery and aux armour along with
some star items. Number of worms and loot items scale with depth, which
is D:12-$ and Swamp. Original notion suggested by mikee, but you can
definitely blame me for everything about this vault.
Includes an undead lerny (which should generally be weaker than a
living lerny; the only one that does more damage is simulacrum which
is 8 speed and low MR).

Equal chance of the rune being in each lobe. Yred lobe has 2 vampire
knights, assorted yred gifts and some undead hydrae/drakes. Fedhas
lobe has several thorn hunters/shambling mangroves, 2 spriggan druids,
and a handful of oklobs. The antechamber is watery, and populated by a
bunch of swamp drakes/dragons and an undead Lerny.
act->as_monster() returns nullptr for the player, so some check like
this needs to happen. Not immediately sure if clouds under the player
should return 0 or a negative value, this goes with negative.
When starting up the game and opening the seed selection dialog, the
game fills in a seed and attempts to sync that to the js client. If the
js client doesn't receive and process that message fast enough, it will
send a sync message to the game with a blank text field; in my local
setup these actually cross paths and things end up in an inconsistent
state: the game thinks the field is empty, but there is still a number
showing on the client side. (If the player does more things in the UI
that number will be resynced, so it is only on immediately pressing
enter that there is buggy behavior.)

This fix is very brute-force, and I'm not sure it'll really get all the
cases. I'm generally worried that this syncing mechanism can have
race-cases like this beyond just the game start, and also it seems like
the possibility of messages crossing paths might need to be dealt with
more consistently.
This started just as an attempt to get the seed input dialog to be
focused on game start, but that led to various other issues:
* [enter] only begins the game when seed selection or the begin game
  button are selected.
* ctrl-v now works for pasting.
* the [enter] button is disabled when there is no valid seed (rather
  than acting like esc in that case)
* full pregen button is reenabled offline, there is still demand.
* hotkeys -, p, and d now work when the seed input box is focused.
* hotkeys -, p, d now cause the seed input box to become focused.
* a bug (I think) where hotkeys always preempt other events, even if
  their handler returns false, is fixed. (I could be misunderstanding
  the intent here, as this looked semi-purposeful -- but this doesn't
  seem like the behavior that would be intended.)
* other formatting / wording tweaks.

Main remaining issues that I know of:
* clicking enter while - or d buttons are selected (via tab) in
  webtiles still starts the game if it can; in local tiles it does
  nothing. This seems to be because clicking on a button in webtiles
  doesn't change the focus.
* in all platforms, hitting [esc] while anything is focused defocuses
  it. This is most weird in the seed input box, on tiles/webtiles, where
  players won't have been as likely to navigate the ui with keys, and so
  will be expecting [esc] to cancel.
* webtiles could use some visual tweaking
* if you hit esc from the species menus after seed selection, it returns
  to the main menu instead of seed selection.
* It's posible this ui should give some clearer indication that entering
  0 will actually start a different game type than anything else.
There was a crack in the stone wall surrounding it
This function was routinely called with *act->as_monster(), which is a
fairly bad paradigm since player::as_monster() returns nullptr, and so a
segfault was guaranteed of a protecting monster check is missed. As long
as this is so, it is better for this function to take a monster pointer
instead of reference.
This prompt should trigger for monsters that are not protected by
fedhas, rather than players that are not protected by fedhas.
Single-use dungeon feature that can enhance (or damage) a non-artefact
weapon/armour item.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.