Giter Site home page Giter Site logo

crawl / crawl Goto Github PK

View Code? Open in Web Editor NEW
2.2K 2.2K 1.2K 282.91 MB

Dungeon Crawl: Stone Soup official repository

Home Page: https://crawl.develz.org/

License: Other

Perl 0.60% C++ 82.13% C 4.77% C# 0.01% Objective-C 0.07% Makefile 0.51% Java 0.75% Lua 4.43% Shell 0.30% NSIS 0.02% TeX 0.09% Python 2.22% JavaScript 3.53% CSS 0.24% HTML 0.22% Batchfile 0.01% Emacs Lisp 0.01% Roff 0.01% sed 0.01% Vim Script 0.08%

crawl's Introduction

Build Status

Dungeon Crawl Stone Soup

Dungeon Crawl Stone Soup is a game of dungeon exploration, combat and magic, involving characters of diverse skills, worshipping deities of great power and caprice. To win, you'll need to be a master of tactics and strategy, and prevail against overwhelming odds.

Contents

  1. How to Play
  2. Community
  3. How you can help
  4. License and history information

How to Play

If you'd like to dive in immediately, we suggest one of:

There is also an ingame list of frequently asked questions which you can access by typing ?Q.

Internet Play

You can play Crawl online, competing with other players or watching them. Click "Play Online Now!" on the Crawl homepage to find your closest server. You can play in your browser or over SSH.

Offline Play

Both classical ASCII and tiles (GUI) versions of Crawl are available to download for Linux, Windows and OS X.

Community

How you can help

If you like the game and you want to help make it better, there are a number of ways to do so. For a detailed guide to the crawl workflow, look at the contributor's guide.

Reporting bugs

At any time, there will be bugs -- finding and reporting them is a great help. Many of the online servers host the regularly updated development version. Bugs should be reported to our github issue tracker. Thoughtful ideas on how to improve interface or gameplay are welcome, but it's often best to discuss changes before opening an issue or pull request.

Map making

Crawl creates levels by combining many hand-made (but often randomised) maps, known as vaults. Making them is fun and easy. It's best to start with simple entry vaults: see simple.des for examples. You can also read the level-design manual for more help.

If you're ambitious, you can create new vaults for anywhere in the game. If you've made some vaults, you can test them on your own system (no compiling needed) and submit them via a github pull request. See the contributor's guide for details.

Monster Speech & Item Descriptions

Monster speech provides a lot of flavour. Just like vaults, varied speech depends upon a large set of entries. Speech syntax is effective but unusual, so you may want to read the formatting guide.

Current item descriptions can be read in-game with ?/ or out-of-game them in dat/descript/. The following conventions should be more or less obeyed:

  • Descriptions ought to contain flavour text, ideally pointing out major weaknesses/strengths.
  • No numbers, please.
  • Citations are okay, but try to stay away from the most generic ones.

Tiles

We're always open to improvements to existing tiles or variants of often-used tiles (eg floor tiles). If you want to give this a shot, please contact us. In case you drew some tiles of your own, you can simply share them with a developer or submit them via a github pull request. See the contributor's guide for details.

Patches

For developers (both existing & aspiring!), you can download/fork the source code and write patches. Bug fixes as well as new features are very much welcome.

For large changes, it's always a good idea to talk with the dev team first, to see if any plans already exist and if your suggestion is likely to be accepted.

Please be sure to read docs/develop/coding_conventions.md too.

License and history information

Crawl is licensed as GPLv2+. See LICENSE for the full text.

Crawl is a descendant of Linley's Dungeon Crawl. The final alpha of Linley's Dungeon Crawl (v4.1) was released by Brent Ross in 2005. Since 2006, the Dungeon Crawl Stone Soup team has continued development. CREDITS.txt contains a full list of contributors.

Crawl uses the following open source packages; thanks to their developers:

  • The Lua scripting language, for in-game functionality and user macros (license).
  • The PCRE library, for regular expressions (license).
  • The SQLite library, as a database engine (license).
  • The SDL and SDL_image libraries, for tiles display (license).
  • The libpng library, for tiles image loading (license).

Thank you, and have fun crawling!

crawl's People

Contributors

aidanholm avatar amalloy avatar bhickey avatar caotto avatar cbuchananhowland avatar doy avatar dpeg avatar dracoomega avatar ebering avatar elliptic avatar evktalo avatar flodiebold avatar galehar avatar gammafunk avatar kilobyte avatar michael-gagno avatar neilmoore avatar plampila avatar pleasingfungus avatar pooka109 avatar quisquous avatar rawlins avatar robx avatar samb avatar semitonal avatar sevemonahan avatar sgrunt avatar snw-0 avatar tycho avatar wheals avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

crawl's Issues

Keyboard letter area not working properly on linux tiles version

PLATFORM:
Gallium OS(Ubuntu 16.04 based) on a chromebook pixel 2013
Xfce4
local tiles

VERSION:
0.21 from package repository (instruction here

DESCRIPTION:
Letter area (a-z) not working in game.
I also found the letter keys only work when pressing left-alt key.
IME is english (Asian IME not activated)
I never touched any config file.
Only tiles version affected. ASCII version works fine.
This happens all the time.

Crash when blinking away a cleaving attacker

VERSION:
0.22-a0-265-g0d8bc90

To reproduce:

  • Give the player a long blade of distortion, and an allied monster (eg a training dummy).
  • Give a monster an axe
  • Get the monster to attack the player while cleaving onto the allied monster

Eventually, the player's riposte will trigger, activating distortion to blink away the attacker. But the attacker cleaves the allied monster anyway, even though it is no longer adjacent, and then an assertion is triggered, because a monster is attacking something it cannot reach.

Example crashlog: http://crawl.berotato.org/crawl/morgue/cellescent/crash-cellescent-20180308-020454.txt

MUT_NECRO_ENHANCER has no implementation

PLATFORM: all
VERSION: current (0.20+)
DESCRIPTION:
Examining the code, the MUT_NECRO_ENHANCER mutation has no implementation, other than stating that the mummy is "in touch with death." So your mummy is in touch with death, but it doesn't actually change anything in the game.

on view of mutaition, it shows only 1 demonspawn mutation.

When reporting a bug, please include the following:

PLATFORM:
local tiles, Mac version

VERSION:
0.22

DESCRIPTION:

First, it's normal mutations. we can see all of description of mutaition on each lines.
retina1

And it's just 1 demonspawn mutation. It looks OK.
retina2

But when I get more demonspawn mutations, It is not be shown and we can see that there is ....
retina3

It means that these sentences are combined I think. I mean, maybe there is no code for starting on new lines after add sentence for description like '/n' lol hahaha

Please check it. It's 22 version for Mac. I love DCSS.

PS. please add Slime as species lol

[@aidanholm edit: inlined pictures]

black-on-black text with default options

Version: 0.19.4-5-g38cae0c
Platform: Console, via the OS X .app release.

With the default options (blank .rc file), some text is rendered in black-on-black.

I assume this is fallout of the darkgray-on-black decision from e35ada9; however, I'm not sure the current behavior is as intended because the text becomes unreadable black-on-black even with default values for all bright color assumptions. As evidence for this view, when I allow my terminal to interpret "bright as bold" (without telling crawl about it), the text becomes readable darkgray-on-black โ€”ย presumably thanks to "best_effort_brighten_foreground". That also shows that my terminal settings have no trouble rendering darkgray-on-black so it's not a simple instance of broken color support.

No experiment I could think of disproved my notion that crawl really, truly was attempting to render black-on-black with nothing but the 'bold' bit to distinguish them, despite 'bold_brightens_foreground' being its default value of 'false'.

Screenshot without 'bright for bold' in terminal options:
image

Screenshot with 'bright for bold' in terminal options, and a distinct light green color as darkgray:
image

Yes, there's a workaround of always choosing 'bright for bold', but presumably there's no workaround on terminals without this option.

Barachian aptitudes not highlighted in new game or help menu tables of aptitudes

The Barachian species name adjustment commit (abbfcfc) ruins their table of aptitudes menu highlighting in newgame.cc and command.cc

newgame.cc -> static string _highlight_pattern(const newgame_def& ng)
command.cc -> string help_highlighter::get_species_key() const

Possible fix would be adding conditionals to these functions and using species_name(species, SPNAME_ADJ) to get the correct string from species_data.h for Barachian

Filename error in Turkish locale

PLATFORM:
Manjaro XFCE Desktop Linux 64-bit, kernel 4.14.67
System language is Turkish.

VERSION:
0.22.0-1 from Manajaro repository

DESCRIPTION:
When I start Dungeon Crawl Stone Soup, I get the following error. I noticed Turkish lower case I's in the message and thought it is about some locale problem.
CC: @schuay

stone-shot

Monster Help describes "A buggy draconian monk"

PLATFORM:
webtiles/console

VERSION:
0.22-a0-78-g0f8607c5c5

DESCRIPTION:
When input "?/M" -> "draconian monk" in game, title of description becomes "A buggy draconian monk."

A buggy draconian monk.
A draconian who has eschewed the study of weaponry and magic in order to train in the art of unarmed combat. Its scaly fists, well-thewed legs, and mighty tail rain down blows upon its opponents.

(Omitted)

This patch can fix this problem, but looks just a makeshift.

diff --git a/crawl-ref/source/describe.cc b/crawl-ref/source/describe.cc
index b639d8af74..9c297d369c 100644
--- a/crawl-ref/source/describe.cc
+++ b/crawl-ref/source/describe.cc
@@ -3785,7 +3785,10 @@ void get_monster_db_desc(const monster_info& mi, describe_info &inf,
     if (inf.title.empty())
         inf.title = getMiscString(mi.common_name(DESC_DBNAME) + " title");
     if (inf.title.empty())
+    {
         inf.title = uppercase_first(mi.full_name(DESC_A)) + ".";
+        inf.title = replace_all(inf.title, "buggy ", "");
+    }

     string db_name;

_monster_menu_gen() doesn't generate
specific-color draconian monsters, so draconian_colour_name() returns "buggy" string.

PitSprint (and others?) have loot in vaults replaced by large amounts of dungeon exits.

Bug occurred when playing Sprint a few days ago on CBRO Webtiles.

http://crawl.berotato.org/crawl/morgue/SevenDeadlySins/morgue-SevenDeadlySins-20170227-122118.txt

Version 0.20-a0-787-g4ba4951 (webtiles)

Not visible in the map there, but in a few different loot areas of the inner vaults, large swaths of loot were replaced by dungeon exits. Probably related to a change to glyph definitions in vault files, which were not updated in Sprints.

Crash if you have a typo in Arena mode

PLATFORM:
Only tested it using local tiles on Windows.

VERSION:
0.22.1

DESCRIPTION:
If you mistype something in Arena mode, it displays the message:

Fatal error:
Expected arena monster spec "xxx v yyy", but got "test"
Hit any key to exit, ctrl-p for the full log.

Then exits the program, instead of going back to arena mode.

sourceless file: simplebar.js

0.22.0 includes a file source/webserver/game_data/static/simplebar.js that's the result of compiling a bunch of npm modules into a non-human-readable/editable form.

Besides being unacceptable for Debian, this is also a GPL violation: if a body of work (not merely bundled) contains non-GPL pieces, they must not only be of GPL-compatible licenses (MIT here, that's ok), but also come in preferred form for modification (which preprocessed and minified javascript certainly is not).

All other Javascript files are in proper source form; they can get combined/minified later but only as a part of the build process.

For now, as Debian doesn't ship webtiles builds, I simply repacked the tarball to exclude this file.

Macro assignment does not escape angle brackets correctly.

PLATFORM:
Verified on both Tiles and Console on Windows.

VERSION:
This bug has been dormant for several versions, and I noticed it a couple versions ago. Currently on 0.21-a0-641-geef9d7f.

DESCRIPTION:
When you assign a new macro, angle brackets are not escaped correctly and end up messing with the XML tags used for colored text.

EXAMPLE: https://i.imgur.com/nZxJK3R.png

HOW TO REPRODUCE:
Try to assign any key to the default upstairs key (<).

  • CTRL+D
  • m or M
  • any key
  • any text that contains an opening angle bracket

I can work on this myself, if it's not a problem. I've never contributed to this repo otherwise.

Strange drunky movement with numpad keys (numlock on)

In 0.20.x (local tiles, win7) using numpad with and without numlock had same effect - one turn walk.
In 0.21.0 when numlock is ON (it is usually), player often moves multiple turns in a sometimes strange, drunk & random way, somewhat similar to shift-walking but with random hard-to-predict movement, after attacking enemies it may perform several walks, it often skips entrances in temple, or some stuff, very hard to aim into door from the middle of the room or catch potion/scroll (i had few ridiculous moments already). When numlock off - player moves per 1 turn.

Gif demo/numlock on:
numlock-on

Numlock off with shift walk:
numlock-off-shift-move

Compiling error of menu.cc

Hi everyone. Please, take a look to this error.

PLATFORM:
"crawl tiles"

VERSION:
0.22.0

DESCRIPTION:
Compiling error on Fedora 29 (devel branch):

g++ -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2  -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -std=gnu++11 -fPIC -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2  -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fPIC -pipe    -DUSE_TILE -DUSE_TILE_LOCAL -DTOUCH_UI -DUSE_SDL -DUSE_GL -DUSE_FT   -D_REENTRANT  -DUSE_SOUND -Wall -Wformat-security -Wundef -Wno-array-bounds  -Wmissing-declarations -Wredundant-decls  -Wno-parentheses -Wwrite-strings -Wshadow -pedantic -Wuninitialized -Iutil -I. -isystem /usr/include/lua-5.1  -Irltiles  -isystem /usr/include/freetype2 -I/usr/include/libpng16  -isystem /usr/include/SDL2     -DWIZARD -DASSERTS -DPROPORTIONAL_FONT=\"/usr/share/fonts/bitstream-vera/Vera.ttf\" -DMONOSPACED_FONT=\"/usr/share/fonts/bitstream-vera/VeraMono.ttf\" -D_REENTRANT  -DCLUA_BINDINGS -DSAVE_DIR_PATH=\"~/.crawl\" -DDATA_DIR_PATH=\"/usr/share/crawl/\" -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600  -MMD -c menu.cc -o menu.o
menu.cc: In member function 'virtual bool UIMenu::on_event(const wm_event&)':
menu.cc:694:18: error: 'y' was not declared in this scope
         else if (y < 0 || y >= m_region[3])
                  ^
make: *** [Makefile:1559: menu.o] Error 1
make: Leaving directory '/builddir/build/BUILD/crawl-0.22.0/crawl-ref/crawl-tiles'

GCC-8.2.1 on x86_64 machine
Full build log: https://koji.fedoraproject.org/koji/getfile?taskID=28985930&volume=DEFAULT&name=build.log
Complete list of dependencies used: https://kojipkgs.fedoraproject.org//work/tasks/5930/28985930/root.log

'i' key in throw.cc is hardcoded and cannot be changed in config

Platform: any
Version: 0.20.1/0.21

'i' key for inventory when you a firing ranged weapon is hardcoded which makes it impossible to rebind CMD_TARGET_RIGHT to 'i' for Colemak layout which as well breaks auto-combat for ranged characters.

There is a workaround to bind CMD_TARGET_RIGHT to some other key which fixes auto-combat but makes manual targeting counter-intuitive and frustrating.

For clarification: Colemak layout has 'h' 'n' 'e' 'i' keys instead of 'h' 'j' 'k' 'l' in qwerty.

Generate on-demand Abyss stairs next to the player, not on top of

When the Abyss generates stairs up or down (due to the player killing monsters) they currently generate below the player. It would probably look cooler if they generated next to the player. Bit of a risk the player would be teleported before they could use the teleport, but random Abyss teleports are not that common.

Potion of experience interface is broken

PLATFORM: webtiles - underground.eu - trunk/git version

VERSION: 0.22-a0-748-g283c1ef38e

DESCRIPTION:
I drank a potion of experience. Then an empty ui box (i.e. only the frame) popped up, while this happened in the message log:

You feel more experienced!
Training target 4.0 for Charms reached!
Your Charms skill increases to level 4!

And I got a force more because I have a force more for skill increases, so after pressing enter the empty ui box turned into the normal popup where I could select which skills to increase. But when I marked skills, the number that showed how much a skill would increase stayed the same as what the skill currently was! So I tried to mark the skills I wanted to increase (Necromancy and Earth), and pressed enter, and got this:

You have reached level 16!
You feel clever.

The skills I had selected got no increase, but it looks like the skills I was training before I quaffed the pot of exp (Charms, Axes, Dodging) got increased.

The spacing between the letters does not seem to match.

When reporting a bug, please include the following:

PLATFORM:
window local ( Not tile )
also fine.*

VERSION:
0.21

DESCRIPTION:
I changed the font to Korean to make Korean version.
The spacing between the letters does not seem to match.
The characters overlap.
Which part need to be modified so that it prints [normally?](url
k-002
)

Help lookup for transmutation status indicators (in ?/T)

Transformation status lights don't have descriptions in ?/T look-up. I was just porkalated by Pikel with a polymorph wand, and it wasn't immediately obvious what I would be able to do, so I tried to look the Pig status up - but there's no helpful description text for it there. Hence, this issue:

  1. Figure out what are the transmutation statuses, particularly the negative transformations monsters inflict on the player (for the transmutation spells, there already are spell descriptions)
  2. Figure out how they affect the player character
  3. Write informative descriptions of the statuses (what would a player want to know) in dat/descript/status.txt

[Request] autofight_stop_hit

Can we get an option like autofight_stop that will stop autofighting when you receive heavy damage like 50%? Or perhaps an option where autofight would stop when an "extremely dangerous" monster first appears in field of vision. Of course, if the user decides to continue to autofight, then that monster acknowledged and autofight can continue. Reasoning, often times, I hold down CTRL I to fight little monsters and a strong enemy creeps and and smashes me. Autofight_stop didn't help at all. I mean I can set autofight_stop higher but the problem really is the one or two shot hits.

weird display bug/glitches in Shoals

webtiles version 0.21-a0-584-g185da8e
Chromium Version 63.0.3239.84 (Official Build) Built on Ubuntu , running on Ubuntu 17.04 (64-bit)

Exploring Shoals 3, I found a teleport trap, but didn't step on it. At that point, I could no longer see my character icon tile at all. I took a step or two, and noticed the display not rendering certain tiles at all. Likewise, I don't see the trap icon. When my allies walk in the black squares, they appear, but the background tiles do not show up. I walked around and through the black squares closest to me after this. A few of them disappeared and background tiles took their places, seemingly without cause, and the bar of black tiles to the south of me also got painted with proper tiles. To my southeast in the screenshot you can also see several tiles that are in LOS but shaded in grey for some reason. Some of these resolved due to tidal movement. The teleport trap eventually appeared, on a full-black background. Moving out and then back into LOS of the wrongly-shaded tiles caused them to render properly, but some of the black tiles remained.

Spooky!

Screenshot:
ee

Chardump: https://pastebin.com/5yxKt8YK

Empty white map boxes on first run

PLATFORM:
Win7-32bit, under VirtualBox

VERSION:

DESCRIPTION:

  1. Download Windows ZIP file
  2. Launch
  3. Get texture wall error message, hit escape to move past it

2018-08-19 10_37_41-dungeon crawl stone soup 0 22 0

Defect: Map had odd white squares

2018-08-19 10_59_20-dungeon crawl stone soup 0 22 0

I realize the texture error message is probably related to the white boxes issue and this might be a unfixable VirtualBox issue

HP Rewrite

#870 is more complicated than initially expected.

recalc_and_scale_hp()
calc_hp()
get_real_hp()

are problematic. In particular, calc_hp() is called twice during a transformation, if the user is wearing HP artefacts. This would be fine, but get_real_hp() inside of calc_hp() returns the transformed HP value both times.

For example, 57/148 wearing +15 faerie dragon scales, casting dragon form. After the transform's remove_equip code, including a call to recalc_and_scale_hp() due to the scales, the character is at 77/148 (since recalc_and_scale_hp() thinks the max HP is already 199 due to the call to get_real_hp(true,false)). Then the second call within _extra_hp sets us to 119/199.

The issue stems from unintelligent calls to get_real_hp(), as well as unintelligent code within get_real_hp().

The code originates from this commit

#875 is a working patch for the original problem.
#877 is a better patch, and also solves the original problem.

Closed because I wrote it

Compilation fails via MSYS2 on Windows 10

Building the non-graphical version with make works.

When building the graphical version with make TILES=y, I get the following build errors:

make[2]: Entering directory '/home/haha/crawl/crawl-ref/source/contrib/sdl2'
    CC src/core/windows/SDL_xinput.o
In file included from src/core/windows/SDL_xinput.c:24:0:
src/core/windows/SDL_xinput.h:145:5: error: unknown type name 'XINPUT_STATE_EX';                                                                                                                                                                                                                                                                                            did you mean 'XINPUT_STATE'?
     XINPUT_STATE_EX* pState     /* [out] Receives the current state */
     ^~~~~~~~~~~~~~~
     XINPUT_STATE
src/core/windows/SDL_xinput.h:171:8: error: unknown type name 'XInputGetState_t'
 extern XInputGetState_t SDL_XInputGetState;
        ^~~~~~~~~~~~~~~~
src/core/windows/SDL_xinput.c:29:1: error: unknown type name 'XInputGetState_t';                                                                                                                                                                                                                                                                                            did you mean 'XInputSetState_t'?
 XInputGetState_t SDL_XInputGetState = NULL;
 ^~~~~~~~~~~~~~~~
 XInputSetState_t
In file included from include/SDL_platform.h:174:0,
                 from include/SDL_config.h:25,
                 from src/core/windows/../../SDL_internal.h:48,
                 from src/core/windows/SDL_xinput.c:21:
include/begin_code.h:164:14: warning: initialization makes integer from pointer                                                                                                                                                                                                                                                                                            without a cast [-Wint-conversion]
 #define NULL ((void *)0)
              ^
src/core/windows/SDL_xinput.c:29:39: note: in expansion of macro 'NULL'
 XInputGetState_t SDL_XInputGetState = NULL;
                                       ^~~~
src/core/windows/SDL_xinput.c: In function 'WIN_LoadXInputDLL':
src/core/windows/SDL_xinput.c:107:27: error: 'XInputGetState_t' undeclared (firs                                                                                                                                                                                                                                                                                           t use in this function); did you mean 'XInputSetState_t'?
     SDL_XInputGetState = (XInputGetState_t)GetProcAddress((HMODULE)s_pXInputDLL                                                                                                                                                                                                                                                                                           , (LPCSTR)100);
                           ^~~~~~~~~~~~~~~~
                           XInputSetState_t
src/core/windows/SDL_xinput.c:107:27: note: each undeclared identifier is report                                                                                                                                                                                                                                                                                           ed only once for each function it appears in
src/core/windows/SDL_xinput.c:107:44: error: expected ';' before 'GetProcAddres                                                                                                                                                                                                                                                                                            '
     SDL_XInputGetState = (XInputGetState_t)GetProcAddress((HMODULE)s_pXInputDLL                                                                                                                                                                                                                                                                                           , (LPCSTR)100);
                                            ^~~~~~~~~~~~~~
src/core/windows/SDL_xinput.c:109:48: error: expected ';' before 'GetProcAddres                                                                                                                                                                                                                                                                                            '
         SDL_XInputGetState = (XInputGetState_t)GetProcAddress((HMODULE)s_pXInpu                                                                                                                                                                                                                                                                                           tDLL, "XInputGetState");
                                                ^~~~~~~~~~~~~~
make[2]: *** [Makefile:173: src/core/windows/SDL_xinput.o] Error 1
make[2]: Leaving directory '/home/haha/crawl/crawl-ref/source/contrib/sdl2'
make[1]: *** [Makefile:24: sdl2] Error 2
make[1]: Leaving directory '/home/haha/crawl/crawl-ref/source/contrib'
make: *** [Makefile:1581: .contrib-libs] Error 2

ten-key doesn't work when including dvorak_command_keys.txt.

When reporting a bug, please include the following:

PLATFORM:
webtiles

VERSION:
trunk (also 0.21 at least)

DESCRIPTION:
the ten key with numlock on moves with default RC file. But, when I uncomment

include = dvorak_command_keys.txt

the tenkey no longer works unless i turn off numlock. adding keybindings in my RC for 1-9 also does not work.

bindkey = [4] CMD_MOVE_LEFT
bindkey = [2] CMD_MOVE_DOWN
bindkey = [8] CMD_MOVE_UP
bindkey = [6] CMD_MOVE_RIGHT
bindkey = [7] CMD_MOVE_UP_LEFT
bindkey = [9] CMD_MOVE_UP_RIGHT
bindkey = [1] CMD_MOVE_DOWN_LEFT
bindkey = [3] CMD_MOVE_DOWN_RIGHT

but, other keybindings still do work:

bindkey = [;] CMD_CAST_SPELL

Lua error in float.des:1401 ("azure gelly")

PLATFORM:
Webtiles (crawl.akrasiac.org)

VERSION:
0.20-b1-2-gc5a9893

DESCRIPTION:
Went downstairs:

_There is an open door here.
_There is a stone staircase leading down here.
You climb downwards.
Lua error: /crawl-master/crawl-0.20/data/dat/des/variable/float.des:4101:
_unknown monster: "azure gelly" x25
Found 47 gold pieces, a chain mail and a scroll of amnesia.
There is a stone staircase leading up here.
Okay, then.

Notice the Lua error. I suspect this is a simple typo:

https://github.com/crawl/crawl/blob/master/crawl-ref/source/dat/des/variable/float.des#L4101

Context information for decks show wrong action

Hi, I'm trying out the latest release from Debian testing (version .19) and noticed that you cannot use v to evoke decks as you could on .18. I'm not sure if that by itself is a bug but I do miss that feature since I like Nemelex a lot as a god. To be honest this could be an old macro of mine trading v for V which I could have forgotten to reapply.

Back to the point: in tiles mode, when you hover your mouse over an item it will popup a blue text area with context information, telling you how to invoke actions on this item (right click, left click, etc). For decks, it shows that left click will wield (w) the deck when in fact doing so actually draws a card (evokes it). It should be an easy fix just to change the text to represent the correct action, which in my option makes a lot more sense to be evoke/draw since you don't need to wield a deck to draw a card and doing so would be a waste of a turn - which as you all know can be deadly if done at the wrong moment.

Thank you for the great game, hope this gets fixed for the next release :)

Compile error (PowerPC-le)

Hi all.

I'm building Crawl-0.19.0 on PowerPC64-le build-root for Fedora, compiler stops with this error:

g++ -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mcpu=power8 -mtune=power8 -std=c++11 -fPIC -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mcpu=power8 -mtune=power8 -fPIC -pipe    -DUSE_TILE -DUSE_TILE_LOCAL -DTOUCH_UI -DUSE_SDL -DUSE_GL -DUSE_FT   -D_REENTRANT -DUSE_SOUND -Wall -Wformat-security -Wundef -Wno-array-bounds -Wno-format-zero-length -Wmissing-declarations -Wredundant-decls -Wno-parentheses -Wwrite-strings -Wshadow -pedantic -Wuninitialized -Iutil -I. -isystem /usr/include/lua-5.1 -Irltiles  -isystem /usr/include/freetype2 -I/usr/include/libpng16 -isystem /usr/include/SDL2    -DWIZARD -DASSERTS -DPROPORTIONAL_FONT=\"/usr/share/fonts/bitstream-vera/Vera.ttf\" -DMONOSPACED_FONT=\"/usr/share/fonts/bitstream-vera/VeraMono.ttf\" -D_REENTRANT -DCLUA_BINDINGS -DSAVE_DIR_PATH=\"~/.crawl\" -DSHARED_DIR_PATH=\"/usr/share/crawl/dat\" -DDATA_DIR_PATH=\"/usr/share/crawl/\" -D_GNU_SOURCE -MMD -c glwrapper-ogl.cc -o glwrapper-ogl.o
In file included from windowmanager-sdl.cc:27:0:
cio.h:46:74: error: could not convert 'true' from 'bool' to '__vector(4) __bool int'
                             bool fake_ctrl = true, bool fake_shift = true);
                                                                          ^
cio.h:46:74: error: could not convert 'true' from 'bool' to '__vector(4) __bool int'
cio.h: In member function 'c_mouse_event::operator __vector(4) __bool int() const':
cio.h:105:16: error: cannot convert 'const int' to '__vector(4) __bool int' in return
         return bstate;
                ^~~~~~
cio.h: In member function '__vector(4) __bool int c_mouse_event::left_clicked() const':
cio.h:110:25: error: cannot convert 'int' to '__vector(4) __bool int' in return
         return bstate & BUTTON1;
                         ^~~~~~~
cio.h: In member function '__vector(4) __bool int c_mouse_event::right_clicked() const':
cio.h:115:25: error: cannot convert 'int' to '__vector(4) __bool int' in return
         return bstate & BUTTON3;
                         ^~~~~~~
cio.h: In member function '__vector(4) __bool int c_mouse_event::scroll_up() const':
cio.h:120:64: error: cannot convert 'int' to '__vector(4) __bool int' in return
         return bstate & (BUTTON4 | BUTTON4_DBL | BUTTON_SCRL_UP);
                                                                ^
cio.h: In member function '__vector(4) __bool int c_mouse_event::scroll_down() const':
cio.h:125:64: error: cannot convert 'int' to '__vector(4) __bool int' in return
         return bstate & (BUTTON2 | BUTTON2_DBL | BUTTON_SCRL_DN);
                                                                ^
cio.h: At global scope:
cio.h:131:66: error: could not convert 'false' from 'bool' to '__vector(4) __bool int'
 void          c_input_reset(bool enable_mouse, bool flush = false);
                                                                  ^
cio.h: In constructor 'cursor_control::cursor_control(__vector(4) __bool int)':
cio.h:212:77: error: cannot convert 'bool' to '__vector(4) __bool int' in initialization
         : cstate(is_cursor_enabled()), smartcstate(is_smart_cursor_enabled())
                                                                             ^
cio.h:212:77: error: cannot convert 'bool' to '__vector(4) __bool int' in initialization
cio.h:215:42: error: cannot convert '__vector(4) __bool int' to 'bool' for argument '1' to 'void set_cursor_enabled(bool)'
         set_cursor_enabled(cursor_enabled);
                                          ^
cio.h: In destructor 'cursor_control::~cursor_control()':
cio.h:219:34: error: cannot convert '__vector(4) __bool int' to 'bool' for argument '1' to 'void set_cursor_enabled(bool)'
         set_cursor_enabled(cstate);
                                  ^
cio.h:220:40: error: cannot convert '__vector(4) __bool int' to 'bool' for argument '1' to 'void enable_smart_cursor(bool)'
         enable_smart_cursor(smartcstate);
                                        ^
cio.h: At global scope:
cio.h:237:41: error: could not convert 'true' from 'bool' to '__vector(4) __bool int'
     int read_line(bool clear_previous = true);
                                         ^~~~
In file included from windowmanager-sdl.cc:28:0:
files.h:45:7: error: expected unqualified-id before '<' token
 vector<string> get_dir_files(const string &dir);
       ^
files.h:46:7: error: expected unqualified-id before '<' token
 vector<string> get_dir_files_ext(const string &dir, const string &ext);
       ^
files.h:47:7: error: expected unqualified-id before '<' token
 vector<string> get_dir_files_recursive(const string &dirname,
       ^
files.h:54:71: error: could not convert 'true' from 'bool' to '__vector(4) __bool int'
                      bool (*thing_exists)(const string&) = file_exists);
                                                                       ^
files.h:54:71: error: could not convert 'false' from 'bool' to '__vector(4) __bool int'
files.h:64:70: error: could not convert 'false' from 'bool' to '__vector(4) __bool int'
 bool check_mkdir(const string &what, string *dir, bool silent = false);
                                                                      ^
files.h:67:7: error: expected unqualified-id before '<' token
 vector<player_save_info> find_all_saved_characters();
       ^
files.h:77:7: error: expected unqualified-id before '<' token
 vector<string> get_title_files();
       ^
files.h:112:35: error: could not convert 'false' from 'bool' to '__vector(4) __bool int'
 void save_ghost(bool force = false);
                                   ^
files.h:126:76: error: could not convert 'true' from 'bool' to '__vector(4) __bool int'
     file_lock(const string &filename, const char *mode, bool die_on_fail = true);
                                                                            ^~~~
In file included from windowmanager-sdl.cc:29:0:
glwrapper.h:174:49: error: could not convert 'false' from 'bool' to '__vector(4) __bool int'
     static GLShapeBuffer *create(bool texture = false, bool colour = false,
                                                 ^~~~~
glwrapper.h:174:70: error: could not convert 'false' from 'bool' to '__vector(4) __bool int'
     static GLShapeBuffer *create(bool texture = false, bool colour = false,
                                                                      ^~~~~
In file included from windowmanager-sdl.cc:30:0:
libutil.h: In function '__vector(4) __bool int isadigit(int)':
libutil.h:31:29: error: cannot convert 'bool' to '__vector(4) __bool int' in return
     return c >= '0' && c <= '9';
                             ^~~
libutil.h: In function '__vector(4) __bool int isalower(int)':
libutil.h:37:29: error: cannot convert 'bool' to '__vector(4) __bool int' in return
     return c >= 'a' && c <= 'z';
                             ^~~
libutil.h: In function '__vector(4) __bool int isaupper(int)':
libutil.h:42:29: error: cannot convert 'bool' to '__vector(4) __bool int' in return
     return c >= 'A' && c <= 'Z';
                             ^~~
libutil.h: In function '__vector(4) __bool int isaalpha(int)':
libutil.h:47:59: error: cannot convert 'bool' to '__vector(4) __bool int' in return
     return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
                                                           ^
libutil.h: In function '__vector(4) __bool int isaalnum(int)':
libutil.h:52:85: error: cannot convert 'bool' to '__vector(4) __bool int' in return
     return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9');
                                                                                     ^
libutil.h: In function 'char32_t toalower(char32_t)':
libutil.h:57:42: error: cannot convert '__vector(4) unsigned int' to 'char32_t' in return
     return isaupper(c) ? c + 'a' - 'A' : c;
                                          ^
libutil.h: In function 'int toalower(int)':
libutil.h:63:42: error: cannot convert '__vector(4) int' to 'int' in return
     return isaupper(c) ? c + 'a' - 'A' : c;
                                          ^
libutil.h: At global scope:
libutil.h:73:64: error: could not convert 'false' from 'bool' to '__vector(4) __bool int'
 bool strip_tag(string &s, const string &tag, bool nopad = false);
                                                                ^
libutil.h:75:7: error: expected unqualified-id before '<' token
 vector<string> strip_multiple_tag_prefix(string &s, const string &tagprefix);
       ^
libutil.h:104:16: error: variable or field 'erase_any' declared void
 void erase_any(vector<Z> &vec, unsigned long which)
                ^
libutil.h:104:16: error: expected primary-expression before '__attribute__'
 void erase_any(vector<Z> &vec, unsigned long which)
                ^
libutil.h:104:32: error: expected primary-expression before 'unsigned'
 void erase_any(vector<Z> &vec, unsigned long which)
                                ^~~~~~~~
libutil.h: In function '__vector(4) __bool int testbits(uint64_t, uint64_t)':
libutil.h:231:30: error: cannot convert 'bool' to '__vector(4) __bool int' in return
     return (flags & test) == test;
                              ^~~~
In file included from feature.h:4:0,
                 from options.h:6,
                 from windowmanager-sdl.cc:31:
show.h: In member function 'show_type::operator __vector(4) __bool int() const':
show.h:57:43: error: cannot convert 'bool' to '__vector(4) __bool int' in return
     operator bool() const { return cls != SH_NOTHING; }
                                           ^~~~~~~~~~
show.h: At global scope:
show.h:87:84: error: could not convert 'false' from 'bool' to '__vector(4) __bool int'
 void update_item_at(const coord_def &gp, bool detected = false, bool wizard = false);
                                                                                    ^
show.h:87:84: error: could not convert 'false' from 'bool' to '__vector(4) __bool int'
In file included from options.h:6:0,
                 from windowmanager-sdl.cc:31:
feature.h: In member function '__vector(4) __bool int feature_def::is_notable() const':
feature.h:47:46: error: cannot convert 'unsigned int' to '__vector(4) __bool int' in return
     bool is_notable() const { return flags & FFT_NOTABLE; }
                                              ^~~~~~~~~~~
In file included from newgame_def.h:4:0,
                 from options.h:7,
                 from windowmanager-sdl.cc:31:
itemprop-enum.h: At global scope:
itemprop-enum.h:303:13: error: expected unqualified-id before '<' token
 const vector<misc_item_type> deck_types =
             ^
itemprop-enum.h:316:13: error: expected unqualified-id before '<' token
 const vector<misc_item_type> misc_types =
             ^
In file included from options.h:7:0,
                 from windowmanager-sdl.cc:31:
newgame_def.h:21:11: error: expected unqualified-id before '<' token
     vector<string> allowed_combos;
           ^
newgame_def.h:22:11: error: expected unqualified-id before '<' token
     vector<species_type> allowed_species;
           ^
newgame_def.h:23:11: error: expected unqualified-id before '<' token
     vector<job_type> allowed_jobs;
           ^
newgame_def.h:24:11: error: expected unqualified-id before '<' token
     vector<weapon_type> allowed_weapons;
           ^
In file included from windowmanager-sdl.cc:31:0:
options.h: In member function '__vector(4) __bool int message_filter::operator==(const message_filter&) const':
options.h:33:55: error: cannot convert 'bool' to '__vector(4) __bool int' in return
         return channel == mf.channel && pattern == mf.pattern;
                                                       ^~~~~~~
options.h: In member function '__vector(4) __bool int message_filter::is_filtered(int, const string&) const':
options.h:38:59: error: cannot convert 'bool' to '__vector(4) __bool int' in initialization
         bool channel_match = ch == channel || channel == -1;
                                                           ^
options.h:39:28: error: could not convert '(#'vec_cond_expr' not supported by dump_expr#<expression error> | (((const message_filter*)this)->message_filter::pattern.text_pattern::empty() ? (__vector(4) int){-1, -1, -1, -1} : (__vector(4) int){0, 0, 0, 0}))' from '__vector(4) int' to 'bool'
         if (!channel_match || pattern.empty())
             ~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
options.h:41:33: error: cannot convert 'bool' to '__vector(4) __bool int' in return
         return pattern.matches(s);
                                 ^
options.h: In member function '__vector(4) __bool int sound_mapping::operator==(const sound_mapping&) const':
options.h:51:55: error: cannot convert 'bool' to '__vector(4) __bool int' in return
         return pattern == o.pattern && soundfile == o.soundfile;
                                                       ^~~~~~~~~
options.h: In member function '__vector(4) __bool int colour_mapping::operator==(const colour_mapping&) const':
options.h:62:68: error: cannot convert 'bool' to '__vector(4) __bool int' in return
         return tag == o.tag && pattern == o.pattern && colour == o.colour;
                                                                    ^~~~~~
options.h: At global scope:
options.h:127:41: error: expected ',' or '...' before '<' token
                             const vector<string> *rcdirs = nullptr);
                                         ^
options.h:144:11: error: expected unqualified-id before '<' token
     vector<item_glyph_override_type > item_glyph_overrides;
           ^
options.h:154:11: error: expected unqualified-id before '<' token
     vector<string> additional_macro_files;
           ^
options.h:252:11: error: expected unqualified-id before '<' token
     vector<unsigned> fire_order;  // missile search order for 'f' command
           ^
options.h:261:11: error: expected unqualified-id before '<' token
     vector<string> pizzas;
           ^
options.h:267:11: error: expected unqualified-id before '<' token
     vector<string> terp_files; // Lua files to load for luaterp
           ^
options.h:274:11: error: expected unqualified-id before '<' token
     vector<pair<int, int> > hp_colour;
           ^
options.h:275:11: error: expected unqualified-id before '<' token
     vector<pair<int, int> > mp_colour;
           ^
options.h:276:11: error: expected unqualified-id before '<' token
     vector<pair<int, int> > stat_colour;
           ^
options.h:277:11: error: expected unqualified-id before '<' token
     vector<int> enemy_hp_colour;
           ^
options.h:280:11: error: expected unqualified-id before '<' token
     vector<pair<text_pattern, bool> > force_autopickup;
           ^
options.h:281:11: error: expected unqualified-id before '<' token
     vector<text_pattern> note_monsters;  // Interesting monsters
           ^
options.h:282:11: error: expected unqualified-id before '<' token
     vector<text_pattern> note_messages;  // Interesting messages
           ^
options.h:283:11: error: expected unqualified-id before '<' token
     vector<pair<text_pattern, string> > autoinscriptions;
           ^
options.h:284:11: error: expected unqualified-id before '<' token
     vector<text_pattern> note_items;     // Objects to note
           ^
options.h:287:11: error: expected unqualified-id before '<' token
     vector<pair<text_pattern, string>> auto_spell_letters;
           ^
options.h:288:11: error: expected unqualified-id before '<' token
     vector<pair<text_pattern, string>> auto_item_letters;
           ^
options.h:289:11: error: expected unqualified-id before '<' token
     vector<pair<text_pattern, string>> auto_ability_letters;
           ^
options.h:304:11: error: expected unqualified-id before '<' token
     vector<message_filter> force_more_message;
           ^
options.h:305:11: error: expected unqualified-id before '<' token
     vector<message_filter> flash_screen_message;
           ^
options.h:306:11: error: expected unqualified-id before '<' token
     vector<text_pattern> confirm_action;
           ^
options.h:313:11: error: expected unqualified-id before '<' token
     vector<text_pattern> auto_exclude; // Automatically set an exclusion
           ^
options.h:338:11: error: expected unqualified-id before '<' token
     vector<text_pattern> explore_stop_pickup_ignore;
           ^
options.h:353:11: error: expected unqualified-id before '<' token
     vector<sound_mapping> sound_mappings;
           ^
options.h:354:11: error: expected unqualified-id before '<' token
     vector<colour_mapping> menu_colour_mappings;
           ^
options.h:355:11: error: expected unqualified-id before '<' token
     vector<message_colour_mapping> message_colour_mappings;
           ^
options.h:357:11: error: expected unqualified-id before '<' token
     vector<menu_sort_condition> sort_menus;
           ^
options.h:368:11: error: expected unqualified-id before '<' token
     vector<string> dump_order;
           ^
options.h:385:11: error: expected unqualified-id before '<' token
     vector<text_pattern> drop_filter;
           ^
options.h:420:11: error: expected unqualified-id before '<' token
     vector<flang_entry> fake_langs;       // The fake language(s) in use.
           ^
options.h:436:11: error: expected unqualified-id before '<' token
     vector<string> fsim_scale;
           ^
options.h:437:11: error: expected unqualified-id before '<' token
     vector<string> fsim_kit;
           ^
options.h:514:11: error: expected unqualified-id before '<' token
     vector<string> tile_layout_priority;
           ^
options.h:593:11: error: expected unqualified-id before '<' token
     vector<GameOption*> option_behaviour;
           ^
options.h:595:17: error: expected unqualified-id before '<' token
     const vector<GameOption*> build_options_list();
                 ^
options.h:596:60: error: expected ',' or '...' before '<' token
     map<string, GameOption*> build_options_map(const vector<GameOption*> &opts);
                                                            ^
options.h:115:62: error: could not convert 'false' from 'bool' to '__vector(4) __bool int'
     void read_option_line(const string &s, bool runscripts = false);
                                                              ^~~~~
options.h:117:44: error: could not convert 'true' from 'bool' to '__vector(4) __bool int'
                       bool clear_aliases = true);
                                            ^~~~
options.h:571:57: error: could not convert 'true' from 'bool' to '__vector(4) __bool int'
     void new_dump_fields(const string &text, bool add = true,
                                                         ^~~~
options.h:572:41: error: could not convert 'false' from 'bool' to '__vector(4) __bool int'
                          bool prepend = false);
                                         ^~~~~
options.h:579:37: error: could not convert 'false' from 'bool' to '__vector(4) __bool int'
                      bool prepend = false);
                                     ^~~~~
options.h: In member function '__vector(4) __bool int game_options::has_fake_lang(flang_t)':
options.h:423:29: error: 'fake_langs' was not declared in this scope
         return any_of(begin(fake_langs), end(fake_langs),
                             ^~~~~~~~~~
In file included from windowmanager-sdl.cc:32:0:
syscalls.h: At global scope:
syscalls.h:13:53: error: could not convert 'false' from 'bool' to '__vector(4) __bool int'
 bool lock_file(int fd, bool write, bool wait = false);
                                                     ^
In file included from windowmanager-sdl.cc:33:0:
unicode.h:11:64: error: could not convert 'true' from 'bool' to '__vector(4) __bool int'
 string chop_string(const char *s, int width, bool spaces = true);
                                                                ^
unicode.h:12:66: error: could not convert 'true' from 'bool' to '__vector(4) __bool int'
 string chop_string(const string &s, int width, bool spaces = true);
                                                                  ^
unicode.h:13:71: error: could not convert 'true' from 'bool' to '__vector(4) __bool int'
 string chop_tagged_string(const char *s, int width, bool spaces = true);
                                                                       ^
unicode.h:14:73: error: could not convert 'true' from 'bool' to '__vector(4) __bool int'
 string chop_tagged_string(const string &s, int width, bool spaces = true);
                                                                         ^
unicode.h: In member function 'virtual __vector(4) __bool int LineInput::error()':
unicode.h:63:35: error: cannot convert 'bool' to '__vector(4) __bool int' in return
     virtual bool error() { return false; };
                                   ^~~~~
unicode.h: In member function 'virtual __vector(4) __bool int FileLineInput::error()':
unicode.h:85:37: error: cannot convert 'bool' to '__vector(4) __bool int' in return
     bool error() override { return !f; };
                                     ^
unicode.h: In member function 'virtual __vector(4) __bool int UTF8FileLineInput::error()':
unicode.h:99:37: error: cannot convert 'bool' to '__vector(4) __bool int' in return
     bool error() override { return !f; };
                                     ^
windowmanager-sdl.cc: In member function 'virtual int SDLWrapper::init(coord_def*, int*, int*)':
windowmanager-sdl.cc:401:69: error: cannot convert 'bool' to '__vector(4) __bool int' in initialization
     bool too_small = (_desktop_width < 1024 || _desktop_height < 800);
                                                                     ^
windowmanager-sdl.cc:403:9: error: could not convert '((((int)Options.game_options::tile_full_screen) == 1) ? (__vector(4) int){-1, -1, -1, -1} : #'vec_cond_expr' not supported by dump_expr#<expression error>)' from '__vector(4) int' to 'bool'
     if (Options.tile_full_screen == SCREENMODE_FULL
         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         || too_small && Options.tile_full_screen == SCREENMODE_AUTO)
         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
windowmanager-sdl.cc: At global scope:
windowmanager-sdl.cc:513:6: error: prototype for '__vector(4) __bool int SDLWrapper::set_window_icon(const char*)' does not match any in class 'SDLWrapper'
 bool SDLWrapper::set_window_icon(const char* icon_name)
      ^~~~~~~~~~
In file included from windowmanager-sdl.cc:6:0:
windowmanager-sdl.h:25:18: error: candidate is: virtual bool SDLWrapper::set_window_icon(const char*)
     virtual bool set_window_icon(const char* icon_name) override;
                  ^~~~~~~~~~~~~~~
windowmanager-sdl.cc:825:6: error: prototype for '__vector(4) __bool int SDLWrapper::load_texture(GenericTexture*, const char*, MipMapOptions, unsigned int&, unsigned int&, tex_proc_func, __vector(4) __bool int)' does not match any in class 'SDLWrapper'
 bool SDLWrapper::load_texture(GenericTexture *tex, const char *filename,
      ^~~~~~~~~~
In file included from windowmanager-sdl.cc:6:0:
windowmanager-sdl.h:54:18: error: candidate is: virtual bool SDLWrapper::load_texture(GenericTexture*, const char*, MipMapOptions, unsigned int&, unsigned int&, tex_proc_func, bool)
     virtual bool load_texture(GenericTexture *tex, const char *filename,
                  ^~~~~~~~~~~~
windowmanager-sdl.cc:946:19: error: expected declaration before end of line
         ASSERT(pal);
                   ^

Build log: https://kojipkgs.fedoraproject.org//work/tasks/1398/16271398/build.log

(Does not happen on other architecture like x86, x86_64, PPC64 big-endian)

[makefile] on osx, prefix ignored during 'make install'

I've checked out the 0.90.0 tag into a local branch. I run the following:

prefix='/opt/draeath/crawl' DATADIR='share/crawl' SAVEDIR='~/.crawl' V='1' make -j5

Compilation seems happy, and (as expected) it won't run as the data files are missing when you try to run from the build directory. However, when I then try to install (as such):

prefix='/opt/draeath/crawl' DATADIR='share/crawl' SAVEDIR='~/.crawl' V='1' make -j5 install

I receive this output:

Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
/Applications/Xcode.app/Contents/Developer/usr/bin/make -C rltiles all ARCH=x86_64-apple-darwin15.6.0 TILES=
Neither DESTDIR nor prefix defined -- nowhere to install to, aborting.
make: *** [install-data] Error 1

I'm not sure where the indicated --prefix is coming from, and I'm not sure why it thinks prefix hasn't been defined - because it was. I've also tried dropping -j5 just in case, and found that made no difference. Also, I should note that I have ownership and permissions on /opt/draeath, if that might matter.

cant build with new function

When reporting a bug, please include the following:

PLATFORM:
webtiles, ubuntu 16.04

VERSION:
0.20

DESCRIPTION:

I created a new fork to make the i18n feature automatically adaptable for every update.

There are several goals here.

Since the word order may be different for each language, you must be able to change the order in which the following parameters are applied in the formatting string

In addition, the formatting string alone will tell you which sentence structure the sentence is and what the parameter points to.

I created a function that satisfies this using va_list.

It works as follows.

( the function's name is 'format'. )

printf( format("{01 : attacker }(์€)๋Š” {00 : monster }๋ฅผ { 2 : to do }ํ–ˆ๋‹ค.\n", "์ฝ”๋ณผํŠธ", "๋‹น์‹ ", "๊ณต๊ฒฉ") );
// TRANSLATE("kobold"), TRANSLATE("you"), TRANSLATE("attack")
// Meaning of Korean string
printf( format("{01 : attacker } {2 : todo }ed { 0 : to do }. \n", "kobold", "you", "attack") );

console output <<
๋‹น์‹ (์€)๋Š” ์ฝ”๋ณผํŠธ๋ฅผ ๊ณต๊ฒฉํ–ˆ๋‹ค.
you attacked kobold.

This makes it possible to change the order of Korean and English to different languages โ€‹โ€‹and change the formatting string, without changing the parameter order.

Open the i18n-format.cc file and uncomment the commented main function, and

run following command

gcc -o a.out i18n-format.h i18n-format.cc && ./a.out

You can see the console output above.


The problem occurred when applying the monster death message processing part under

if (death_message)

in the mon-death.cc file as follows.

2247 mprf(MSGCH_MONSTER_DAMAGE, MDAM_DEAD,
2248 format("๋‹น์‹ ์€ {0:monster}์„(๋ฅผ) {1:killtype}!", mons.name(DESC_PLAIN).c_str(),
2249 exploded ? "ํ„ฐ๋œจ๋ ธ๋‹ค" :
2250 wounded_damaged(targ_holy) ? "๋ฐ•์‚ด๋‚ด๋ฒ„๋ ธ๋‹ค"
2251 : "์ฃฝ์˜€๋‹ค"));

I also added '#include "i18n-format.h"' at the top of the file, adding i18n-format.cc to the mon-death.d file and adding i18n-format.o or i18n-format.h . However, no compile error occurs, and a link error occurs.

---- error msg

CXX version.o
LINK crawl

mon-death.o:mon-death.cc:function monster_die(monster&, killer_type, int, bool, bool, bool): error: undefined reference to '_format(char*, unsigned long, ...)'
collect2: error: ld returned 1 exit status
Makefile:1473: recipe for target 'crawl' failed
make: *** [crawl] Error 1


For the web tile version, the build script looks like this:
If you run it without the format function, it is normally buildable and executable.

make clean && make -j7 WEBTILES=y USE_DGAMELAUNCH=y


I just want to add a function and apply it to the part.

I do not know why this is an error. The result of Googleing is only about using the library and not using the -l option at build time. However, I did not use the new library and I could not find similar questions.

Can't find "SlowM" in the ?/t function

The lookup description of statuses is lacking "SlowM"

got the status while playing Xom, and wanted to know what it is.

PLATFORM: Linux Offline Tiles (compiled from git on 10th of August)

Borgnjor's Vile Clutch does not target through allies

PLATFORM:
Webtiles

VERSION:
0.21-a0-641-geef9d7f

DESCRIPTION:
Zombie hands is smite-targeted, but does not seem to be aware of it. Trying to target normally (i.e. with z) with an ally in between the player and the target results in a 'You can't see any susceptible monsters within range! (Use Z to cast anyway.)' message, with some exceptions. These exceptions seem to occur when you could aim a fireball at the target (aiming around the ally.) in these cases the targeter is placed directly on the monster.

Using Z from behind an ally targets the monster as expected. It does not, however, account for its radius at the edge of its range when targeting.

Ctrl-O window obscures UI

webtiles (might be in other UIs too), trunk

Pressing Ctrl-O brings up the dungeon overview and level annotations. Unlike seemingly all other command which pop up a modal window, this one causes the rest of the UI to be hidden. This can be somewhat annoying when figuring out where one wants to go next, as things like your current XL, HP, location, etc., are not visible.

Apologies if this has been submitted before and rejected as a request.

Show unvisited areas on minimap. WebTiles and Tiles.

This path allow to show unvisited areas on minimap (WebTiles).

Main idea:
On the minimap simply define unvisited area - if black areas are not surrounded by walls. I propose highlight these border areas.

Standart minimap:
image
New minimap:
image

Patch (all changes in minimap.js):

diff --git a/crawl-ref/source/webserver/game_data/static/minimap.js b/crawl-ref/source/webserver/game_data/static/minimap.js
index 3313cca..eae6f4c 100644
--- a/crawl-ref/source/webserver/game_data/static/minimap.js
+++ b/crawl-ref/source/webserver/game_data/static/minimap.js
@@ -162,6 +162,25 @@ function ($, map_knowledge, dungeon_renderer, view_data,
     function update(x, y, cell)
     {
         cell = cell || map_knowledge.get(x, y);
+
+        if (cell.mf && cell.mf != enums.MF_WALL && cell.mf != enums.MF_MAP_WALL)
+        {
+            for (var i = -1; i <= 1; i++)
+            {
+                for (var j = -1; j <= 1; j++)
+                {
+                    if (i != 0 || j != 0)
+                    {
+                        var c = map_knowledge.get(x + i, y + j);
+                        if (!c.mf)
+                        {
+                            set(x + i, y + j, minimap_colours[enums.MF_MAP_FLOOR]);
+                        }
+                    }
+                }
+            }
+        }
+
         if (x == player.pos.x && y == player.pos.y)
             set(x, y, minimap_colours[enums.MF_PLAYER]);
         else

P.S. May be problems in the Labyrinth or in the Abyss (not tested).

[debian/ubuntu] missing xterm dependency

The .deb for the 0.20.1 non-tiles build installs a .desktop that looks to run xterm. However, xterm is not listed as a package dependency, and some desktop environment metapackages (such as mate on debian stable) do not install this by default.

Additionally, xterm is a barebones and ugly terminal emulator. It would be better if there was a more "intelligent" way to run the game in the user's preferred terminal (via the .desktop launcher, they can always just type crawl in their terminal)

ctrl-q doesn't display "are you sure?" message in webtiles

I've noticed this in trunk webtiles across a few commits. Pressing ^Q to quit the game should be displaying something like "are you sure?" with a box where one needs to type "yes" to actually quit. The message does not appear, but the box does, and one can quit normally provided one knows to type "yes".

PVS-Studio static analysis report

Hi!
I've run the PVS-Studio static analyzer tool on the DCSS codebase. In the table below you can see its findings. At least some of them seem legit, e.g. possible file handle leak in wizard_fight_sim. Hope this report helps with improving this incredible game!

file line severity description
www.viva64.com/en/w 1 err Help: The documentation for all analyzer warnings is available here: https://www.viva64.com/en/w/.
rltiles/tool/tile_colour.h 31 warn V730 Not all members of a class are initialized inside the constructor. Consider inspecting: r, g, b, a.
rltiles/tool/tile.h 9 warn V690 The 'tile' class implements a copy constructor, but lacks the '=' operator. It is dangerous to use such a class.
rltiles/tool/tile.cc 12 warn V730 Not all members of a class are initialized inside the constructor. Consider inspecting: m_variations.
rltiles/tool/tile_list_processor.cc 56 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
rltiles/tool/tile_list_processor.cc 105 err V663 Infinite loop is possible. The 'cin.eof()' condition is insufficient to break from the loop. Consider adding the 'cin.fail()' function call to the conditional expression.
rltiles/tool/tile_list_processor.cc 1109 err V773 The function was exited without releasing the 'part_min' pointer. A memory leak is possible.
bitary.h 15 warn V690 The 'bit_vector' class implements a copy constructor, but lacks the '=' operator. It is dangerous to use such a class.
tags.h 136 err V702 Classes should always be derived from std::exception (and alike) as 'public' (no keyword was specified, so compiler defaults it to 'private').
mgen-data.h 173 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
stringutil.h 99 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
viewgeom.h 15 warn V690 The 'crawl_view_buffer' class implements the '=' operator, but lacks a copy constructor. It is dangerous to use such a class.
abyss.cc 458 warn V768 The variable 'which_feat' is of enum type. It is odd that it is used as a variable of a Boolean-type.
abyss.cc 1342 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
abyss.cc 1798 warn V522 There might be dereferencing of a potential null pointer 'cmark'.
tags.h 47 err V730 Not all members of a class are initialized inside the constructor. Consider inspecting: _pbuf.
externs.h 334 err V730 Not all members of a class are initialized inside the constructor. Consider inspecting: source.
externs.h 374 err V730 Not all members of a class are initialized inside the constructor. Consider inspecting: num.
tiles.h 25 warn V730 Not all members of a class are initialized inside the constructor. Consider inspecting: r, g, b, a.
geom2d.h 60 warn V730 Not all members of a class are initialized inside the constructor. Consider inspecting: val.
geom2d.h 74 warn V730 Not all members of a class are initialized inside the constructor. Consider inspecting: offset, dist.
beam.h 49 warn V730 Not all members of a class are initialized inside the compiler generated constructor. Consider inspecting: tile_beam.
kills.h 25 warn V730 Not all members of a class are initialized inside the constructor. Consider inspecting: monnum, modifier.
kills.h 85 warn V730 Not all members of a class are initialized inside the constructor. Consider inspecting: exp.
mon-info.h 238 err V730 Not all members of a class are initialized inside the constructor. Consider inspecting: i_ghost.
god-companions.h 20 err V730 Not all members of a class are initialized inside the constructor. Consider inspecting: timestamp.
mon-transit.h 19 err V730 Not all members of a class are initialized inside the constructor. Consider inspecting: transit_start_time.
cio.h 351 err V730 Not all members of a class are initialized inside the constructor. Consider inspecting: key.
notes.h 68 warn V730 Not all members of a class are initialized inside the constructor. Consider inspecting: type, first, second.
menu.h 1073 warn V703 It is odd that the 'm_old_bg_colour' field in derived class 'BlackWhiteHighlighter' overwrites field in base class 'BoxMenuHighlighter'. Check lines: menu.h:1073, menu.h:1055.
ability.cc 1322 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
ability.cc 1348 warn V768 The expression 'you.undead_state()' is of enum type. It is odd that it is used as an expression of a Boolean-type.
ability.cc 3165 warn V506 Pointer to local variable 'numbers' is stored outside the scope of this variable. Such a pointer will become invalid.
ability.cc 3202 warn V506 Pointer to local variable 'numbers' is stored outside the scope of this variable. Such a pointer will become invalid.
ability.cc 3402 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
ability.cc 3426 err V654 The condition 'k >= 0' of loop is always true.
ability.cc 3426 err V621 Consider inspecting the 'for' operator. It's possible that the loop will be executed incorrectly or won't be executed at all.
ui.h 80 warn V730 Not all members of a class are initialized inside the compiler generated constructor. Consider inspecting: m_region, cached_sr, cached_sr_pw.
ui.h 344 warn V730 Not all members of a class are initialized inside the constructor. Consider inspecting: hl_line.
ui.h 391 warn V730 Not all members of a class are initialized inside the constructor. Consider inspecting: m_tw, m_th.
ui.h 472 warn V730 Not all members of a class are initialized inside the compiler generated constructor. Consider inspecting: size, offset, sr.
acquire.cc 1303 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
actor.cc 388 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
arena.cc 1090 err V564 The '&' operator is applied to bool type value. You've probably forgotten to include parentheses or intended to use the '&&' operator.
arena.cc 1090 warn V560 A part of conditional expression is always true: !(mons_char(type) &!127).
arena.cc 1117 err V564 The '&' operator is applied to bool type value. You've probably forgotten to include parentheses or intended to use the '&&' operator.
arena.cc 1117 warn V560 A part of conditional expression is always true: !(mons_char(mg.cls) &!127).
arena.cc 1400 err V523 The 'then' statement is equivalent to the subsequent code fragment.
art-func.h 950 err V501 There are identical sub-expressions 'x_chance_in_y(evoc, 27 * 27)' to the left and to the right of the '||' operator.
artefact.cc 896 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
artefact.cc 1651 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
nearby-danger.h 44 warn V690 The 'position_node' class implements a copy constructor, but lacks the '=' operator. It is dangerous to use such a class.
attack.cc 199 err V595 The 'weapon' pointer was utilized before it was verified against nullptr. Check lines: 199, 204.
attack.cc 957 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
attack.cc 1543 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
attack.cc 52 err V730 Not all members of a class are initialized inside the constructor. Consider inspecting: attk_type, attk_flavour, attk_damage.
fineff.h 292 err V730 Not all members of a class are initialized inside the constructor. Consider inspecting: damage.
nearby-danger.h 149 warn V730 Not all members of a class are initialized inside the constructor. Consider inspecting: test.
beam.cc 980 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
beam.cc 1239 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
beam.cc 1981 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
beam.cc 2023 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
beam.cc 2172 warn V519 The 'child.origin_spell' variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 2167, 2172.
beam.cc 2608 warn V547 Expression 'agent()' is always true.
beam.cc 2805 warn V519 The 'monst' variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 2804, 2805.
beam.cc 2996 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
beam.cc 3003 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
beam.cc 3181 warn V768 The variable 'origin_spell' is of enum type. It is odd that it is used as a variable of a Boolean-type.
beam.cc 3207 warn V547 Expression '!penet' is always true.
beam.cc 3893 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
beam.cc 4074 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
beam.cc 4399 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
beam.cc 4834 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
beam.cc 6023 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
butcher.cc 208 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
butcher.cc 405 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
chardump.cc 792 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
chardump.cc 1147 err V610 Undefined behavior. Check the shift operator '<<'. The left operand is negative ('auxtype' = [-32768..32767]).
cloud.cc 393 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
cloud.cc 775 warn V1016 Expression 'ctype >= CLOUD_NONE' is always true.
cloud.cc 1770 warn V522 There might be dereferencing of a potential null pointer 'mark'.
clua.cc 484 warn V779 Unreachable code detected. It is possible that an error is present.
clua.cc 850 warn V1004 The 'vm' pointer was used unsafely after it was verified against nullptr. Check lines: 848, 850.
clua.cc 1142 warn V547 Expression 'lua' is always true.
coordit.cc 277 warn V768 The variable 'los' is of enum type. It is odd that it is used as a variable of a Boolean-type.
coordit.cc 279 warn V768 The variable 'los' is of enum type. It is odd that it is used as a variable of a Boolean-type.
coordit.cc 284 warn V768 The variable 'los' is of enum type. It is odd that it is used as a variable of a Boolean-type.
coordit.cc 286 warn V768 The variable 'los' is of enum type. It is odd that it is used as a variable of a Boolean-type.
dbg-asrt.cc 208 warn V560 A part of conditional expression is always true: sk >= 0.
dbg-asrt.cc 210 warn V560 A part of conditional expression is always true: sk >= 0.
dbg-asrt.cc 427 warn V1016 Expression 'type < MAT_FEATURE' is always false.
dbg-asrt.cc 509 warn V522 There might be dereferencing of a potential null pointer 'lua_marker'.
dbg-scan.cc 136 err V510 The 'mprf' function is not expected to receive class-type variable as fourth actual argument.
dbg-scan.cc 499 warn V1004 The 'h' pointer was used unsafely after it was verified against nullptr. Check lines: 494, 499.
dbg-scan.cc 676 warn V768 The variable 'portal' is of enum type. It is odd that it is used as a variable of a Boolean-type.
dbg-scan.cc 683 warn V768 The variable 'exit' is of enum type. It is odd that it is used as a variable of a Boolean-type.
decks.cc 421 warn V768 The expression 'origin_as_god_gift(deck)' is of enum type. It is odd that it is used as an expression of a Boolean-type.
decks.cc 515 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
decks.cc 533 warn V656 Variables 'num_cards', 'num_flags' are initialized through the call to the same function. It's probably an error or un-optimized code. Consider inspecting the 'cards.size()' expression. Check lines: 532, 533.
delay.cc 836 warn V547 Expression 'm' is always true.
describe.cc 654 warn V1016 Expression 'trap >= 0' is always true.
describe.cc 3170 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
describe-god.cc 285 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
describe-god.cc 920 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
describe-god.cc 1265 warn V560 A part of conditional expression is always true: step == JOIN.
describe-spells.cc 102 warn V786 It is odd that value 'type = MON_SPELL_WIZARD' is assigned to the 'is_spell' variable. The value range of 'is_spell' variable: [0, 1].
dgn-labyrinth.cc 345 warn V648 Priority of the '&&' operation is higher than that of the '||' operation. Consider inspecting the 'step < 2 || step < 12 && coinflip()' expression.
dgn-overview.cc 654 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
dgn-overview.cc 826 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
dgn-overview.cc 852 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
dgn-proclayouts.cc 119 warn V636 The 'offset / 3' expression was implicitly cast from 'int' type to 'double' type. Consider utilizing an explicit type cast to avoid the loss of a fractional part. An example: double A = (double)(X) / Y;.
dgn-proclayouts.cc 442 warn V547 Expression 'enable_forest' is always true.
dgn-shoals.cc 128 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
dgn-shoals.cc 326 warn V547 Expression 'npoints < size_limit' is always true.
dgn-shoals.cc 376 err V789 Iterators for the 'visit' container, used in the range-based for loop, become invalid upon the call of the 'push_back' function.
dgn-shoals.cc 575 err V789 Iterators for the 'wind_points' container, used in the range-based for loop, become invalid upon the call of the 'push_back' function.
directn.cc 900 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
directn.cc 1113 err V547 Expression 'aff == AFF_MULTIPLE' is always true.
directn.cc 1325 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
directn.cc 3287 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
directn.cc 3316 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
directn.cc 503 err V730 Not all members of a class are initialized inside the constructor. Consider inspecting: valid_shadow_step.
domino.h 206 err V730 Not all members of a class are initialized inside the constructor. Consider inspecting: colours_.
domino.h 253 err V730 Not all members of a class are initialized inside the constructor. Consider inspecting: colours_.
domino.h 298 err V730 Not all members of a class are initialized inside the constructor. Consider inspecting: colours_.
dungeon.cc 938 warn V768 The variable 'fill' is of enum type. It is odd that it is used as a variable of a Boolean-type.
dungeon.cc 2259 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
dungeon.cc 3678 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
dungeon.cc 5914 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
dungeon.cc 6066 warn V522 There might be dereferencing of a potential null pointer.
dungeon.cc 6681 warn V547 Expression '!stairs_unique' is always false.
dungeon.cc 2778 err V730 Not all members of a class are initialized inside the constructor. Consider inspecting: label.
evoke.cc 1098 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
evoke.cc 1349 warn V768 The expression is of enum type. It is odd that it is used as an expression of a Boolean-type.
evoke.cc 1404 warn V768 The expression 'player_will_anger_monster(* victim)' is of enum type. It is odd that it is used as an expression of a Boolean-type.
exclude.cc 550 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
feature.cc 216 warn V1016 Expression 'feat >= 0' is always true.
fight.cc 810 warn V560 A part of conditional expression is always true: min_delay < 10.
fight.cc 1044 warn V648 Priority of the '&&' operation is higher than that of the '||' operation. Consider inspecting the 'victims.empty() || penancen &&!penance' expression.
files.cc 506 err V614 Uninitialized variable 'found' used.
files.cc 1199 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
files.cc 1491 warn V581 The conditional expressions of the 'if' statements situated alongside each other are identical. Check lines: 1487, 1491.
files.cc 2321 warn V519 The 'crawl_state.default_startup_name' variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 2313, 2321.
files.cc 2627 warn V768 The variable 'ReleaseType' is of enum type. It is odd that it is used as a variable of a Boolean-type.
fineff.cc 173 warn V522 There might be dereferencing of a potential null pointer 'ssdfe'.
food.cc 337 warn V602 Consider inspecting the '(you.hunger_state > HS_SATIATED)' expression. '>' possibly should be replaced with '>>'.
food.cc 477 warn V768 The expression 'you.undead_state()' is of enum type. It is odd that it is used as an expression of a Boolean-type.
ghost.cc 770 warn V1016 Expression 'ghost.job < JOB_FIGHTER' is always false.
ghost.cc 776 warn V1016 Expression 'ghost.religion < GOD_NO_GOD' is always false.
god-abil.cc 1909 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
god-abil.cc 3533 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
god-abil.cc 4958 err V654 The condition 'j < victims.size()' of loop is always false.
god-abil.cc 4958 err V621 Consider inspecting the 'for' operator. It's possible that the loop will be executed incorrectly or won't be executed at all.
skill-menu.h 71 warn V730 Not all members of a class are initialized inside the constructor. Consider inspecting: m_sk, m_name, m_level, m_progress, m_aptitude.
god-blessing.cc 807 warn V560 A part of conditional expression is always true: blessing.empty().
god-wrath.cc 1668 warn V519 The 'mon' variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 1667, 1668.
hiscores.cc 312 warn V519 The 'tmp' variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 311, 312.
hiscores.cc 1221 warn V668 There is no sense in testing the 'fields' pointer against null, as the memory was allocated using the 'new' operator. The exception will be generated in the case of memory allocation error.
hiscores.cc 2002 err V655 The strings were concatenated but are not utilized. Consider inspecting the expression.
hiscores.cc 2251 warn V768 The expression 'you.undead_state()' is of enum type. It is odd that it is used as an expression of a Boolean-type.
initfile.cc 577 warn V1016 Expression 'wpn_type >= 0' is always true.
initfile.cc 3052 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
initfile.cc 3063 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
initfile.cc 1759 warn V730 It is possible that not all members of a class are initialized inside the constructor. Consider inspecting: macro_meta_entry, evil_colour.
invent.cc 582 warn V522 There might be dereferencing of a potential null pointer 'item'.
invent.cc 883 warn V522 There might be dereferencing of a potential null pointer 'inv'.
invent.cc 1083 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
invent.cc 1552 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
invent.cc 2040 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
item-use.cc 287 warn V522 There might be dereferencing of a potential null pointer 'ie'.
item-use.cc 456 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
item-use.cc 1431 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
item-name.cc 111 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
item-name.cc 859 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
item-name.cc 1290 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
item-name.cc 1383 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
item-name.cc 1719 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
item-name.cc 1826 warn V560 A part of conditional expression is always false: pqual < 0.
item-name.cc 1829 warn V560 A part of conditional expression is always false: pcolour < 0.
item-name.cc 1829 warn V560 A part of conditional expression is always false: pcolour >= PDC_NCOLOURS.
item-name.cc 2074 warn V560 A part of conditional expression is always true: !basename.
item-name.cc 2116 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
item-name.cc 2332 warn V522 Dereferencing of the null pointer 'inv' might take place. The potential null pointer is passed into 'KnownEntry' function. Inspect the first argument. Check lines: 2332, 2451.
item-name.cc 2837 warn V728 An excessive check can be simplified. The '||' operator is surrounded by opposite expressions 'name.length() <= 2' and 'name.length() > 2'.
item-name.cc 2865 warn V560 A part of conditional expression is always false: name.empty().
item-name.cc 2869 warn V560 A part of conditional expression is always true: !name.empty().
item-name.cc 3246 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
item-name.cc 3308 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
item-name.cc 3393 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
item-name.cc 3396 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
item-name.cc 3530 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
item-name.cc 3528 warn V768 The expression 'you.undead_state(temp)' is of enum type. It is odd that it is used as an expression of a Boolean-type.
item-name.cc 3578 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
item-name.cc 3576 warn V768 The expression 'you.undead_state(temp)' is of enum type. It is odd that it is used as an expression of a Boolean-type.
item-name.cc 3589 warn V768 The expression 'you.undead_state(temp)' is of enum type. It is odd that it is used as an expression of a Boolean-type.
item-prop.cc 1999 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
item-prop.cc 2045 warn V1016 Expression 'ammo < 0' is always false.
items.cc 216 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
items.cc 1280 warn V560 A part of conditional expression is always true: iorig > GOD_NO_GOD.
items.cc 2208 warn V1001 The 'quant_got' variable is assigned but is not used by the end of the function.
items.cc 2818 warn V547 Expression '!old_inscription.empty()' is always false.
items.cc 3292 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
items.cc 3357 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
items.cc 4518 warn V547 Expression 'create_for_real' is always true.
items.cc 4634 warn V547 Expression '!item.sub_type' is always true.
json.cc 83 warn V701 realloc() possible leak: when realloc() fails in allocating memory, original pointer 'sb->start' is lost. Consider assigning realloc() to a temporary pointer.
json.cc 1243 warn V779 Unreachable code detected. It is possible that an error is present.
kills.cc 50 warn V1016 Expression 'kc >= KC_YOU' is always true.
l-crawl.cc 220 warn V601 The bool type is implicitly cast to the double type. Inspect the second argument.
l-dgn.cc 1260 err V590 Consider inspecting the 'kc == KC_NCATEGORIES || kc != KC_OTHER' expression. The expression is excessive or contains a misprint.
l-dgnbld.cc 816 warn V764 Possible incorrect order of arguments passed to '_calculate_join_the_dots_path' function: 'to' and 'from'.
l-dgngrd.cc 49 warn V768 The variable 'f' is of enum type. It is odd that it is used as a variable of a Boolean-type.
l-dgngrd.cc 108 warn V768 The variable 'feat' is of enum type. It is odd that it is used as a variable of a Boolean-type.
l-item.cc 638 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
l-item.cc 682 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
l-item.cc 1211 warn V560 A part of conditional expression is always true: q != - 1.
l-los.cc 59 warn V601 The bool type is implicitly cast to the double type. Inspect the second argument.
l-moninf.cc 254 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
l-mons.cc 530 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
l-mons.cc 560 warn V1016 Expression '0 <= beh' is always true.
macro.cc 1344 warn V547 Expression 'cmd == CMD_NO_CMD' is always false.
macro.cc 1437 warn V557 Array overrun is possible. The value of 'context' index could reach 5.
macro.cc 1438 warn V557 Array overrun is possible. The value of 'context' index could reach 5.
makeitem.cc 1815 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
makeitem.cc 1876 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mapdef.cc 199 warn V794 The assignment operator should be protected from the case of 'this == &place'.
mapdef.cc 404 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mapdef.cc 1679 warn V547 Expression '!overlay' is always false.
mapdef.cc 1684 warn V547 Expression '!key' is always false.
mapdef.cc 1699 warn V547 Expression '!overlay' is always false.
mapdef.cc 1704 warn V547 Expression '!key' is always false.
mapdef.cc 5834 err V629 Consider inspecting the '1 << i' expression. Bit shifting of the 32-bit value with a subsequent expansion to the 64-bit type.
mapdef.cc 432 err V730 Not all members of a class are initialized inside the constructor. Consider inspecting: next_keyspec_idx.
mapdef.cc 439 warn V730 It is possible that not all members of a class are initialized inside the constructor. Consider inspecting: next_keyspec_idx.
mapdef.cc 2167 warn V730 It is possible that not all members of a class are initialized inside the constructor. Consider inspecting: original.
mapmark.cc 1316 warn V522 There might be dereferencing of a potential null pointer 'posm'.
maps.cc 245 warn V648 Priority of the '&&' operation is higher than that of the '||' operation. Consider inspecting the 'must_rot || can_rot && coinflip()' expression.
maps.cc 272 warn V560 A part of conditional expression is always true: exact_fit.
melee-attack.cc 101 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
melee-attack.cc 223 err V595 The 'defender' pointer was utilized before it was verified against nullptr. Check lines: 223, 228.
melee-attack.cc 867 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
melee-attack.cc 1797 warn V768 The expression 'god_hates_item_handling(* weapon)' is of enum type. It is odd that it is used as an expression of a Boolean-type.
melee-attack.cc 2003 warn V648 Priority of the '&&' operation is higher than that of the '||' operation. Consider inspecting the 'dam <= 0 || dam < 4 && coinflip()' expression.
melee-attack.cc 2284 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
melee-attack.cc 3297 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
melee-attack.cc 3421 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
melee-attack.cc 3445 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
menu.cc 2280 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
menu.cc 4729 warn V547 Expression '!m_visible' is always false.
menu.cc 4729 warn V649 There are two 'if' statements with identical conditional expressions. The first 'if' statement contains function return. This means that the second 'if' statement is senseless. Check lines: 4726, 4729.
menu.cc 3522 err V730 Not all members of a class are initialized inside the constructor. Consider inspecting: m_visible.
menu.cc 4693 err V730 Not all members of a class are initialized inside the constructor. Consider inspecting: m_old_bg_colour.
menu.cc 4778 warn V730 Not all members of a class are initialized inside the constructor. Consider inspecting: m_old_bg_colour, m_old_fg_colour.
menu.cc 71 err V730 Not all members of a class are initialized inside the constructor. Consider inspecting: m_height.
message-stream.cc 110 warn V522 There might be dereferencing of a potential null pointer 'ps'.
message-stream.cc 117 warn V522 There might be dereferencing of a potential null pointer 'ps'.
message-stream.cc 52 warn V730 Not all members of a class are initialized inside the constructor. Consider inspecting: internal_buf.
message.cc 168 warn V560 A part of conditional expression is always true: Options.msg_condense_repeats.
message.cc 706 warn V618 It's dangerous to call the 'cprintf' function in such a manner, as the line being passed could contain format specification. The example of the safe code: printf("%s", str);
message.cc 1123 warn V522 There might be dereferencing of a potential null pointer 'heapbuf'.
message.cc 1567 warn V560 A part of conditional expression is always true: size > 0.
mon-act.cc 138 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-act.cc 598 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-act.cc 621 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-act.cc 638 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-act.cc 656 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-act.cc 667 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-act.cc 1172 warn V547 Expression '!niceWand' is always true.
mon-act.cc 1400 warn V678 An object is used as an argument to its own method. Consider checking the first actual argument of the 'banish' function.
mon-act.cc 1652 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-act.cc 1836 err V583 The '?:' operator, regardless of its conditional expression, always returns one and the same value.
mon-act.cc 2611 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-behv.cc 373 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-behv.cc 488 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-behv.cc 598 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-behv.cc 522 err V595 The 'afoe' pointer was utilized before it was verified against nullptr. Check lines: 522, 528.
mon-behv.cc 938 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-behv.cc 1368 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-cast.cc 719 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-cast.cc 1280 warn V519 The 'beam.glyph' variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 1254, 1280.
mon-cast.cc 1281 warn V519 The 'beam.thrower' variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 1256, 1281.
mon-cast.cc 1976 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-cast.cc 2121 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-cast.cc 2202 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-cast.cc 2310 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-cast.cc 3862 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-cast.cc 4400 warn V602 Consider inspecting the '(spell_hd > 15)' expression. '>' possibly should be replaced with '>>'.
mon-cast.cc 4653 warn V560 A part of conditional expression is always true: !already_mesmerised.
mon-cast.cc 7622 warn V602 Consider inspecting the '(mon.spell_hd(SPELL_AWAKEN_EARTH) > 15)' expression. '>' possibly should be replaced with '>>'.
mon-cast.cc 7706 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-cast.cc 7822 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-cast.cc 7882 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-cast.cc 7953 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-cast.cc 7964 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-cast.cc 8050 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-cast.cc 8053 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-death.cc 549 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-death.cc 962 warn V522 There might be dereferencing of a potential null pointer 'marker'.
mon-death.cc 1140 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-death.cc 2295 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-death.cc 2355 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-death.cc 2433 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-death.cc 3193 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-ench.cc 2097 warn V1016 Expression 'ench > NUM_ENCHANTMENTS' is always false.
mon-gear.cc 1251 warn V560 A part of conditional expression is always false: !floor_tile.empty().
mon-gear.cc 2039 warn V796 It is possible that 'break' statement is missing in switch statement.
mon-movetarget.cc 929 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-pathfind.cc 193 warn V560 A part of conditional expression is always false: (idir = 0).
mon-pathfind.cc 68 err V730 Not all members of a class are initialized inside the constructor. Consider inspecting: traverse_in_sight.
mon-place.cc 103 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-place.cc 249 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-place.cc 288 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-place.cc 365 warn V768 The expression 'player_will_anger_monster(mt)' is of enum type. It is odd that it is used as an expression of a Boolean-type.
mon-place.cc 439 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-place.cc 581 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-place.cc 2446 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-place.cc 2456 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-place.cc 2466 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-place.cc 2476 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-place.cc 2835 warn V768 The variable 'why' is of enum type. It is odd that it is used as a variable of a Boolean-type.
mon-place.cc 2888 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-poly.cc 135 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-poly.cc 179 warn V560 A part of conditional expression is always true: power == PPT_LESS.
mon-poly.cc 182 warn V560 A part of conditional expression is always true: power == PPT_MORE.
mon-poly.cc 295 warn V768 The expression 'player_will_anger_monster(real_targetc)' is of enum type. It is odd that it is used as an expression of a Boolean-type.
mon-poly.cc 473 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-poly.cc 583 warn V560 A part of conditional expression is always true: x >= 3.
mon-poly.cc 585 warn V560 A part of conditional expression is always true: x >= 5.
mon-project.cc 253 err V595 The 'caster' pointer was utilized before it was verified against nullptr. Check lines: 253, 254.
mon-speak.cc 418 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-speak.cc 602 warn V560 A part of conditional expression is always true: msg.empty().
mon-tentacle.cc 315 warn V730 Not all members of a class are initialized inside the constructor. Consider inspecting: target_positions, connection_constraints, base_monster, max_string_distance.
mon-tentacle.cc 427 warn V730 Not all members of a class are initialized inside the constructor. Consider inspecting: connection_constraints, base_monster.
mon-transit.cc 225 warn V730 It is possible that not all members of a class are initialized inside the constructor. Consider inspecting: transit_start_time.
mon-data.h 6607 err V501 There are identical sub-expressions 'M_SPEAKS' to the left and to the right of the '
mon-data.h 6607 warn V578 An odd bitwise operation detected. Consider verifying it.
mon-util.cc 178 warn V547 Expression 'valid_mons.empty()' is always false.
mon-util.cc 205 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-util.cc 378 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-util.cc 1115 err V595 The 'item' pointer was utilized before it was verified against nullptr. Check lines: 1115, 1129.
mon-util.cc 1194 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-util.cc 1398 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-util.cc 1496 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-util.cc 3217 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-util.cc 3919 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
mon-util.cc 4686 warn V560 A part of conditional expression is always false: s_type < 0.
monster.cc 267 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
monster.cc 676 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
monster.cc 743 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
monster.cc 1197 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
monster.cc 1427 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
monster.cc 1598 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
monster.cc 1920 warn V560 A part of conditional expression is always true: !force.
monster.cc 1955 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
monster.cc 2390 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
monster.cc 2989 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
monster.cc 3941 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
monster.cc 4919 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
monster.cc 5027 warn V1019 Compound assignment expression 'amount /= 2' is used inside condition.
monster.cc 6254 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
monster.cc 6592 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
monster.cc 71 err V730 Not all members of a class are initialized inside the constructor. Consider inspecting: ench_countdown, summoner, damage_friendly, damage_total.
mutation.cc 266 warn V1016 Expression 'mut >= 0' is always true.
mutation.cc 545 err V547 Expression 'you.mutation[mut] >= 0' is always true. Unsigned type value is always >= 0.
mutation.cc 546 err V547 Expression 'you.innate_mutation[mut] >= 0' is always true. Unsigned type value is always >= 0.
mutation.cc 547 err V547 Expression 'you.temp_mutation[mut] >= 0' is always true. Unsigned type value is always >= 0.
mutation.cc 1966 warn V768 The variable 'mutat' is of enum type. It is odd that it is used as a variable of a Boolean-type.
mutation.cc 2235 warn V560 A part of conditional expression is always true: result.empty().
nearby-danger.cc 140 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
nearby-danger.cc 393 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
newgame.cc 356 warn V648 Priority of the '&&' operation is higher than that of the '||' operation. Consider inspecting the 'spfirst ||!jobfirst && coinflip()' expression.
newgame.cc 408 warn V768 The expression 'job_allowed(ng.species, ng.job)' is of enum type. It is odd that it is used as an expression of a Boolean-type.
newgame.cc 727 warn V768 The expression 'job_allowed(ng.species, ng.job)' is of enum type. It is odd that it is used as an expression of a Boolean-type.
newgame.cc 2414 err V562 It's odd to compare a bool type value with a value of 4.
newgame.cc 2414 warn V560 A part of conditional expression is always false.
notes.cc 75 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
notes.cc 394 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
ouch.cc 434 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
output.cc 813 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
output.cc 1219 warn V560 A part of conditional expression is always true: !small_layout.
output.cc 1221 warn V560 A part of conditional expression is always true: !small_layout.
output.cc 1223 warn V560 A part of conditional expression is always true: !small_layout.
output.cc 1400 warn V560 A part of conditional expression is always false: you.wield_change.
output.cc 1772 warn V560 A part of conditional expression is always true: i_print >= skip_lines.
package.cc 626 warn V779 Unreachable code detected. It is possible that an error is present.
package.cc 826 warn V730 It is possible that not all members of a class are initialized inside the constructor. Consider inspecting: off, z_buffer.
package.cc 834 warn V730 It is possible that not all members of a class are initialized inside the constructor. Consider inspecting: off, z_buffer.
pattern.cc 73 warn V668 There is no sense in testing the 're' pointer against null, as the memory was allocated using the 'new' operator. The exception will be generated in the case of memory allocation error.
pattern.cc 141 err V790 It is odd that the assignment operator takes an object by a non-constant reference and returns this object.
perlin.cc 441 warn V636 The '1 / divisor' expression was implicitly cast from 'int' type to 'double' type. Consider utilizing an explicit type cast to avoid the loss of a fractional part. An example: double A = (double)(X) / Y;.
playable.cc 60 warn V768 The expression is of enum type. It is odd that it is used as an expression of a Boolean-type.
player-act.cc 264 warn V560 A part of conditional expression is always true: weap.
player-act.cc 318 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
player-reacts.cc 634 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
player-reacts.cc 843 warn V560 A part of conditional expression is always true: !sanguine_armour_is_valid.
player.cc 523 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
player.cc 774 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
player.cc 1585 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
player.cc 1618 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
player.cc 1930 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
player.cc 4342 warn V768 The expression 'you.undead_state()' is of enum type. It is odd that it is used as an expression of a Boolean-type.
player.cc 4342 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
player.cc 4837 warn V560 A part of conditional expression is always true: !quiet.
player.cc 6093 warn V768 The expression 'undead_state(temp)' is of enum type. It is odd that it is used as an expression of a Boolean-type.
player.cc 6122 warn V768 The expression 'undead_state()' is of enum type. It is odd that it is used as an expression of a Boolean-type.
player.cc 6191 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
player.cc 6210 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
player.cc 6269 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
player.cc 6380 warn V547 Expression 'found_nonartefact' is always false.
player.cc 7661 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
potion.cc 96 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
prompt.cc 136 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
prompt.cc 248 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
prompt.cc 1 err V002 Some diagnostic messages may contain incorrect line number in this file.
randbook.cc 489 warn V648 Priority of the '&&' operation is higher than that of the '||' operation. Consider inspecting the 'level <= 3 || level == 4 && coinflip()' expression.
randbook.cc 933 warn V560 A part of conditional expression is always true: !god_gift.
ranged-attack.cc 138 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
ranged-attack.cc 332 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
ranged-attack.cc 491 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
religion.cc 946 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
religion.cc 953 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
religion.cc 1152 warn V547 Expression 'gifts <= 12' is always true.
religion.cc 1255 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
religion.cc 1343 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
religion.cc 1487 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
religion.cc 1535 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
religion.cc 1997 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
religion.cc 2321 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
religion.cc 2356 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
religion.cc 3608 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
religion.cc 4637 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
scroller.cc 99 warn V519 The 'more' variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 98, 99.
shopping.cc 783 warn V636 The 'spells.size() / 6' expression was implicitly cast from 'size_t' type to 'double' type. Consider utilizing an explicit type cast to avoid the loss of a fractional part. An example: double A = (double)(X) / Y;.
shopping.cc 1268 warn V522 There might be dereferencing of a potential null pointer 'dynamic_cast< ShopEntry * > (a)'.
shopping.cc 1269 warn V522 There might be dereferencing of a potential null pointer 'dynamic_cast< ShopEntry * > (b)'.
shopping.cc 1277 warn V522 There might be dereferencing of a potential null pointer 'dynamic_cast< ShopEntry * > (a)'.
shopping.cc 1278 warn V522 There might be dereferencing of a potential null pointer 'dynamic_cast< ShopEntry * > (b)'.
shopping.cc 1285 warn V522 There might be dereferencing of a potential null pointer 'dynamic_cast< ShopEntry * > (a)'.
shopping.cc 1286 warn V522 There might be dereferencing of a potential null pointer 'dynamic_cast< ShopEntry * > (b)'.
shopping.cc 1358 warn V522 There might be dereferencing of a potential null pointer.
shopping.cc 1382 warn V522 There might be dereferencing of a potential null pointer 'entry'.
shopping.cc 1647 warn V730 Not all members of a class are initialized inside the constructor. Consider inspecting: list, min_unbuyable_cost, min_unbuyable_idx, max_buyable_cost, max_buyable_idx.
showsymb.cc 306 warn V768 The variable 'feat' is of enum type. It is odd that it is used as a variable of a Boolean-type.
showsymb.cc 321 warn V768 The expression 'cell.feat()' is of enum type. It is odd that it is used as an expression of a Boolean-type.
skill-menu.cc 310 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
skill-menu.cc 1185 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
skill-menu.cc 1879 warn V796 It is possible that 'break' statement is missing in switch statement.
skill-menu.cc 552 err V730 Not all members of a class are initialized inside the constructor. Consider inspecting: m_state.
skill-menu.cc 61 err V730 Not all members of a class are initialized inside the constructor. Consider inspecting: m_sk.
skills.cc 302 warn V560 A part of conditional expression is always true: n > 0.
skills.cc 314 warn V560 A part of conditional expression is always true: n > 0.
species.cc 448 err V547 Expression 'you.mutation[i] >= 0' is always true. Unsigned type value is always >= 0.
spl-cast.cc 220 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
spl-cast.cc 238 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
spl-cast.cc 1500 warn V547 Expression '!allow_fail' is always false.
spl-damage.cc 624 err V595 The 'mons' pointer was utilized before it was verified against nullptr. Check lines: 624, 652.
spl-goditem.cc 623 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
spl-goditem.cc 702 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
spl-miscast.cc 276 err V501 There are identical sub-expressions 'random2(40) > severity' to the left and to the right of the '&&' operator.
spl-summoning.cc 277 warn V768 The expression 'player_will_anger_monster(type)' is of enum type. It is odd that it is used as an expression of a Boolean-type.
spl-summoning.cc 370 warn V768 The expression 'player_will_anger_monster(mon)' is of enum type. It is odd that it is used as an expression of a Boolean-type.
spl-summoning.cc 867 warn V768 The variable 'why' is of enum type. It is odd that it is used as a variable of a Boolean-type.
spl-summoning.cc 1194 warn V768 The expression 'player_will_anger_monster(* mons)' is of enum type. It is odd that it is used as an expression of a Boolean-type.
spl-summoning.cc 1236 warn V768 The expression 'player_will_anger_monster(* * mi)' is of enum type. It is odd that it is used as an expression of a Boolean-type.
spl-tornado.cc 354 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
spl-util.cc 1140 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
spl-util.cc 1206 warn V768 The expression 'you.undead_state(temp)' is of enum type. It is odd that it is used as an expression of a Boolean-type.
spl-util.cc 1215 warn V768 The expression 'you.undead_state(temp)' is of enum type. It is odd that it is used as an expression of a Boolean-type.
spl-util.cc 1220 warn V768 The expression 'you.undead_state(false)' is of enum type. It is odd that it is used as an expression of a Boolean-type.
spl-util.cc 1323 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
spl-util.cc 1483 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
sqldbm.cc 266 warn V614 The 'result' smart pointer is utilized immediately after being declared or reset. It is suspicious that no value was assigned to it.
sqldbm.cc 334 warn V668 There is no sense in testing the 'dptr' pointer against null, as the memory was allocated using the 'new' operator. The exception will be generated in the case of memory allocation error.
sqldbm.cc 378 warn V668 There is no sense in testing the 'dptr' pointer against null, as the memory was allocated using the 'new' operator. The exception will be generated in the case of memory allocation error.
stairs.cc 829 warn V768 The variable 'force_stair' is of enum type. It is odd that it is used as a variable of a Boolean-type.
stairs.cc 832 warn V768 The variable 'force_stair' is of enum type. It is odd that it is used as a variable of a Boolean-type.
startup.cc 580 err V730 Not all members of a class are initialized inside the constructor. Consider inspecting: full_name, input_text, game_modes, save_games, descriptor.
stash.cc 187 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
stash.cc 460 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
stash.cc 805 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
stash.cc 1350 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
state.cc 30 warn V730 It is possible that not all members of a class are initialized inside the constructor. Consider inspecting: test_list, flash_monsters.
status.cc 1042 warn V547 Expression 'perm' is always false.
store.cc 358 warn V572 It is odd that the object which was created using 'new' operator is immediately cast to another type.
store.cc 362 warn V572 It is odd that the object which was created using 'new' operator is immediately cast to another type.
store.cc 366 warn V572 It is odd that the object which was created using 'new' operator is immediately cast to another type.
store.cc 370 warn V572 It is odd that the object which was created using 'new' operator is immediately cast to another type.
store.cc 374 warn V572 It is odd that the object which was created using 'new' operator is immediately cast to another type.
store.cc 378 warn V572 It is odd that the object which was created using 'new' operator is immediately cast to another type.
store.cc 382 warn V572 It is odd that the object which was created using 'new' operator is immediately cast to another type.
store.cc 386 warn V572 It is odd that the object which was created using 'new' operator is immediately cast to another type.
store.cc 390 warn V572 It is odd that the object which was created using 'new' operator is immediately cast to another type.
store.cc 298 warn V794 The assignment operator should be protected from the case of 'this == &other'.
store.cc 574 warn V572 It is odd that the object which was created using 'new' operator is immediately cast to another type.
store.cc 581 warn V572 It is odd that the object which was created using 'new' operator is immediately cast to another type.
store.cc 590 warn V572 It is odd that the object which was created using 'new' operator is immediately cast to another type.
store.cc 635 warn V572 It is odd that the object which was created using 'new' operator is immediately cast to another type.
store.cc 644 warn V572 It is odd that the object which was created using 'new' operator is immediately cast to another type.
stringutil.cc 257 warn V522 There might be dereferencing of a potential null pointer 'buf2'. A constructor of the string class expects a valid pointer.
tags.cc 1120 warn V522 There might be dereferencing of a potential null pointer 'featm'.
tags.cc 2237 warn V1016 Expression 'you.religion >= 0' is always true.
tags.cc 2541 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
tags.cc 3184 warn V560 A part of conditional expression is always false: j >= OLD_NUM_ABILITIES.
tags.cc 3195 err V654 The condition 'j < OLD_NUM_ABILITIES' of loop is always false.
tags.cc 3195 err V621 Consider inspecting the 'for' operator. It's possible that the loop will be executed incorrectly or won't be executed at all.
tags.cc 5558 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
tags.cc 6143 warn V547 Expression 'slot.spell == SPELL_CORRUPT_BODY' is always false.
target.cc 265 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
target.cc 588 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
target.cc 1080 err V730 Not all members of a class are initialized inside the constructor. Consider inspecting: base_beam.
target.cc 1152 err V730 Not all members of a class are initialized inside the constructor. Consider inspecting: no_landing_reason, blocked_landing_reason.
terrain.cc 903 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
terrain.cc 1629 warn V768 The expression 'you.undead_state()' is of enum type. It is odd that it is used as an expression of a Boolean-type.
terrain.cc 1948 warn V522 There might be dereferencing of a potential null pointer 'tmarker'.
terrain.cc 2016 warn V522 There might be dereferencing of a potential null pointer 'tmarker'.
terrain.cc 2082 warn V522 There might be dereferencing of a potential null pointer 'tmarker'.
terrain.cc 2124 warn V522 There might be dereferencing of a potential null pointer 'tmarker'.
terrain.cc 2128 warn V768 The variable 'newfeat' is of enum type. It is odd that it is used as a variable of a Boolean-type.
throw.cc 807 warn V547 Expression '!thrown.quantity' is always false.
timed-effects.cc 1174 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
timed-effects.cc 1612 warn V522 There might be dereferencing of a potential null pointer 'cmark'.
timed-effects.cc 1650 warn V522 There might be dereferencing of a potential null pointer 'marker'.
transform.cc 401 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
transform.cc 416 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
transform.cc 1323 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
transform.cc 1534 warn V768 The expression 'you.undead_state(false)' is of enum type. It is odd that it is used as an expression of a Boolean-type.
traps.cc 1365 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
travel.cc 219 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
travel.cc 357 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
travel.cc 1022 err V547 Expression 'result != CMD_NO_CMD' is always false.
travel.cc 1668 warn V560 A part of conditional expression is always true: (dir = 1).
travel.cc 2959 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
travel.cc 3137 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
travel.cc 4578 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
travel.cc 4124 err V730 Not all members of a class are initialized inside the constructor. Consider inspecting: notified_mp_full, notified_hp_full, travel_speed, direction.
travel.cc 1070 err V730 Not all members of a class are initialized inside the constructor. Consider inspecting: try_fallback.
ui.cc 422 warn V768 The variable 'align_items' is of enum type. It is odd that it is used as a variable of a Boolean-type.
ui.cc 65 warn V730 Not all members of a class are initialized inside the compiler generated constructor. Consider inspecting: needs_paint, m_w, m_h, m_region.
view.cc 544 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
view.cc 700 warn V768 The expression 'knowledge.feat()' is of enum type. It is odd that it is used as an expression of a Boolean-type.
view.cc 1028 warn V560 A part of conditional expression is always true: !did_exclude.
view.cc 1576 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
view.cc 1192 err V730 Not all members of a class are initialized inside the constructor. Consider inspecting: current_frame.
view.cc 1212 err V730 Not all members of a class are initialized inside the constructor. Consider inspecting: current_frame.
viewchar.cc 115 warn V1016 Expression 'dchar >= 0' is always true.
viewmap.cc 188 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
viewmap.cc 785 warn V519 The 'move_x' variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 696, 785.
viewmap.cc 783 warn V519 The 'start_y' variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 732, 783.
wiz-fsim.cc 729 err V773 The function was exited without closing the file referenced by the 'o' handle. A resource leak is possible.
wiz-fsim.cc 751 warn V519 The 'fsim_proc' variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 750, 751.
wiz-item.cc 482 err V547 Expression 'keyin == 'e'' is always true.
wiz-item.cc 1167 warn V557 Array overrun is possible. The value of 'i' index could reach 25.
wiz-mon.cc 407 err V510 The 'mprf' function is not expected to receive class-type variable as third actual argument.
wiz-mon.cc 424 err V547 Expression 'mons.attitude == ATT_STRICT_NEUTRAL' is always true.
wiz-mon.cc 461 warn V1016 Expression 'hab >= 0' is always true.
wiz-mon.cc 693 warn V648 Priority of the '&&' operation is higher than that of the '||' operation. Consider inspecting the 'type == 'b' || type == 'r' && coinflip()' expression.
xom.cc 387 warn V560 A part of conditional expression is always true: chance > 0.
xom.cc 753 warn V1016 Expression 'iorig > GOD_NO_GOD' is always true.
xom.cc 1286 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
xom.cc 1639 warn V547 Expression 'effects.empty()' is always true.
xom.cc 1708 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
xom.cc 2275 warn V547 Expression 'rc' is always true.
xom.cc 3124 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
tileview.cc 787 err V547 Expression 'x < 80 - 1' is always true.
tileview.cc 789 err V547 Expression 'y < 70 - 1' is always true.
rltiles/tiledef-floor.cc 6073 warn V547 Expression '!str' is always false.
rltiles/tiledef-wall.cc 7860 warn V547 Expression '!str' is always false.
rltiles/tiledef-feat.cc 3595 warn V547 Expression '!str' is always false.
rltiles/tiledef-main.cc 8796 warn V547 Expression '!str' is always false.
rltiles/tiledef-player.cc 19567 warn V547 Expression '!str' is always false.
rltiles/tiledef-gui.cc 4836 warn V547 Expression '!str' is always false.
rltiles/tiledef-icons.cc 782 warn V547 Expression '!str' is always false.
main.cc 2453 warn V648 Priority of the '&&' operation is higher than that of the '||' operation.
levcomp.tab.cc 1181 warn V560 A part of conditional expression is always true: yysize1 <= ((long unsigned int) - 1).
levcomp.tab.cc 1206 warn V560 A part of conditional expression is always true: yysize1 <= ((long unsigned int) - 1).
levcomp.tab.cc 1215 warn V560 A part of conditional expression is always true.
levcomp.tab.cc 1384 warn V592 The expression was enclosed by parentheses twice: ((expression)). One pair of parentheses is unnecessary or misprint is present.
levcomp.tab.cc 2453 warn V779 Unreachable code detected. It is possible that an error is present.
util/levcomp.tab.cc 65 err V011 Presence of #line directives may cause some diagnostic messages to have incorrect file name and line number.
levcomp.lex.cc 3236 warn V1004 The 'yy_buffer_stack' pointer was used unsafely after it was verified against nullptr. Check lines: 3225, 3236.
levcomp.lex.cc 3384 warn V1004 The 'yy_buffer_stack' pointer was used unsafely after it was verified against nullptr. Check lines: 3373, 3384.
util/levcomp.lex.cc 1 err V011 Presence of #line directives may cause some diagnostic messages to have incorrect file name and line number.
util/levcomp.tab.h 155 err V011 Presence of #line directives may cause some diagnostic messages to have incorrect file name and line number.
util/levcomp.lex.cc 1 err V002 Some diagnostic messages may contain incorrect line number in this file.

Tukima's Dance used on dual-wielding monsters bug re: sprite appearance.

Platform: Webtiles
Version: Trunk, 0.22

Using Tukima's Dance on dual-wielding monsters such as two-headed ogres or ettins occasionally causes both weapons to disappear from the monster sprite, but upon inspection the game will note that they are still wielding a single weapon and by casting Tukima's Dance a second time this "invisible" weapon can be animated as normal. All seems to be fine with the code apart from the sprite appearance.

Edit: Added screenshot example.
tukimasdancespritebug

Windows not appearing in level map interface

PLATFORM: webtiles, CAO

VERSION: 0.22-a0-755-g5fb6194

DESCRIPTION:
While in level map (after pressing Shift-X), after pressing ? no window appears. Pressing keys (e.g. vi keys for movement) appears to do nothing. Trying to exit the level map from here returns movement controls to normal. Using v to examine from the level map does the same thing.

Compilation of console fails because of missing "-ltinfo" flag

I'm on CentOS 7 and when I try to compile the console version, it throws an error when linking ncurses.

I found that this is fixed by adding "-ltinfo" to the Makefile, as I found in this patch for entirely different software when googling my error message.

I'm not entirely sure what the best way to implement this would be, because I think it might fail with the -ltinfo flag on systems that don't have the split into ncurses and tinfo, so I can't make a pull request.

I can simply amend my Makefile every time I update, but I thought I'd mention it here.

Gozag doesn't detect gold in Abyss properly

When you enter a level Gozag detects all gold on the level, but this doesn't work right in Abyss. You get any nearby gold detected but future gold that generates isn't detected.

I think Gozag should not detect in Abyss or detect gold every turn in Abyss.

beam targeting seems broken

On local tiles, v0.21.a0-366-g9170151. Beam targeting is blocked by monsters but not by solid walls.

If a wall DOESN'T block a beam, then a monster shouldn't either. See screenshots:

Wall doesn't block:

right

Monster does block:

wrong

Makes no sense, and makes using fireball unpredictable.

Looking through the code, the "find_ray" area seems unnecessarily overcomplicated.

Broken hint text (tiles, jewellery)

PLATFORM: local tiles

VERSION: 0.20.1 (appears to still be present on HEAD, see below)

DESCRIPTION: HINT_SEEN_JEWELLERY's output is "You have picked up a a piece of jewellery, either a ring or an amulet. You can click on it to put it on, and click again to remove it. By" (note: magenta color stops here) "right-clicking> on it, you can view its properties." (note: the following is in red) "".

Here's a screenshot.
This is most likely related to mistyped content in hints.cc.

There appear to be mistakes in the console version of the prompt as well.

I'll fix (and open a PR) tomorrow if no one gets around to it by then (it's quite late here).

MSVC compatability

PLATFORM:
Visual Studio, any version; preferred 2017.

DESCRIPTION:
There are very few actual code-based compatibility issues, but the MSVC packages and project files are outdated, and reference files that do not exist.

(I couldn't figure it out on my own)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.