You can subscribe to this list here.
2006 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(15) |
Sep
(131) |
Oct
(149) |
Nov
(216) |
Dec
(222) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2007 |
Jan
(152) |
Feb
(58) |
Mar
(184) |
Apr
(249) |
May
(96) |
Jun
(207) |
Jul
(248) |
Aug
(87) |
Sep
(232) |
Oct
(440) |
Nov
(248) |
Dec
(212) |
2008 |
Jan
(216) |
Feb
(118) |
Mar
(508) |
Apr
(796) |
May
(597) |
Jun
(896) |
Jul
(475) |
Aug
(124) |
Sep
(200) |
Oct
(248) |
Nov
(377) |
Dec
(373) |
2009 |
Jan
(807) |
Feb
(430) |
Mar
(276) |
Apr
(138) |
May
(161) |
Jun
(210) |
Jul
(390) |
Aug
(141) |
Sep
(286) |
Oct
(826) |
Nov
(1123) |
Dec
(419) |
2010 |
Jan
(671) |
Feb
(625) |
Mar
(328) |
Apr
(349) |
May
(296) |
Jun
(485) |
Jul
(396) |
Aug
(113) |
Sep
(582) |
Oct
(414) |
Nov
(248) |
Dec
(377) |
2011 |
Jan
(400) |
Feb
(225) |
Mar
(321) |
Apr
(264) |
May
(148) |
Jun
(249) |
Jul
(270) |
Aug
(217) |
Sep
(262) |
Oct
(356) |
Nov
(426) |
Dec
(359) |
2012 |
Jan
(203) |
Feb
(131) |
Mar
(317) |
Apr
(313) |
May
(170) |
Jun
(272) |
Jul
(363) |
Aug
(364) |
Sep
(330) |
Oct
(188) |
Nov
(178) |
Dec
(141) |
2013 |
Jan
(177) |
Feb
(258) |
Mar
(459) |
Apr
(352) |
May
(443) |
Jun
(364) |
Jul
(185) |
Aug
(175) |
Sep
(242) |
Oct
(237) |
Nov
(359) |
Dec
(300) |
2014 |
Jan
(331) |
Feb
(272) |
Mar
(446) |
Apr
(301) |
May
(577) |
Jun
(435) |
Jul
(365) |
Aug
(358) |
Sep
(306) |
Oct
(617) |
Nov
(863) |
Dec
(466) |
2015 |
Jan
(295) |
Feb
(165) |
Mar
(319) |
Apr
(201) |
May
(158) |
Jun
(148) |
Jul
(62) |
Aug
(91) |
Sep
(147) |
Oct
(203) |
Nov
(346) |
Dec
(382) |
2016 |
Jan
(242) |
Feb
(280) |
Mar
(229) |
Apr
(157) |
May
(297) |
Jun
(335) |
Jul
(157) |
Aug
(219) |
Sep
(307) |
Oct
(212) |
Nov
(177) |
Dec
(112) |
2017 |
Jan
(100) |
Feb
(203) |
Mar
(112) |
Apr
(124) |
May
(81) |
Jun
(43) |
Jul
(39) |
Aug
(49) |
Sep
(24) |
Oct
(55) |
Nov
(68) |
Dec
(95) |
2018 |
Jan
(130) |
Feb
(73) |
Mar
(47) |
Apr
(57) |
May
(62) |
Jun
(76) |
Jul
(159) |
Aug
(158) |
Sep
(81) |
Oct
(100) |
Nov
(62) |
Dec
(75) |
2019 |
Jan
(130) |
Feb
(138) |
Mar
(80) |
Apr
(61) |
May
(88) |
Jun
(65) |
Jul
(61) |
Aug
(37) |
Sep
(85) |
Oct
(155) |
Nov
(133) |
Dec
(91) |
2020 |
Jan
(59) |
Feb
(123) |
Mar
(121) |
Apr
(155) |
May
(300) |
Jun
(136) |
Jul
(330) |
Aug
(84) |
Sep
(56) |
Oct
(87) |
Nov
(154) |
Dec
(200) |
2021 |
Jan
(205) |
Feb
(203) |
Mar
(292) |
Apr
(165) |
May
(56) |
Jun
(135) |
Jul
(248) |
Aug
(218) |
Sep
(165) |
Oct
(150) |
Nov
(135) |
Dec
(266) |
2022 |
Jan
(194) |
Feb
(149) |
Mar
(49) |
Apr
(38) |
May
(145) |
Jun
(213) |
Jul
(150) |
Aug
(126) |
Sep
(188) |
Oct
(121) |
Nov
(34) |
Dec
(142) |
2023 |
Jan
(105) |
Feb
(82) |
Mar
(138) |
Apr
(125) |
May
(112) |
Jun
(90) |
Jul
(222) |
Aug
(279) |
Sep
(157) |
Oct
(100) |
Nov
(85) |
Dec
(295) |
2024 |
Jan
(123) |
Feb
(353) |
Mar
(220) |
Apr
(112) |
May
(162) |
Jun
(169) |
Jul
(205) |
Aug
(174) |
Sep
(73) |
Oct
(62) |
Nov
(95) |
Dec
(62) |
2025 |
Jan
(125) |
Feb
(90) |
Mar
(127) |
Apr
(188) |
May
(74) |
Jun
(59) |
Jul
(152) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <gi...@cr...> - 2025-07-30 18:20:10
|
via 80739182b426dca0b0ad9a3cf876ae04db6ac720 (commit) from 3f39f5e5c14a821f3c9903d0a594f3becba5dd7c (commit) ----------------------------------------------------------------------- commit 80739182b426dca0b0ad9a3cf876ae04db6ac720 Author: Implojin <imp...@gm...> Date: Wed Jul 30 13:11:30 2025 -0500 Re-bump zlib Accidentally changed in f537972d3b. ----------------------------------------------------------------------- Summary of changes: crawl-ref/source/contrib/zlib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crawl-ref/source/contrib/zlib b/crawl-ref/source/contrib/zlib index 2d19c60d29..1229e39b4d 160000 --- a/crawl-ref/source/contrib/zlib +++ b/crawl-ref/source/contrib/zlib @@ -1 +1 @@ -Subproject commit 2d19c60d294880b6ffc740ee0bb090953ed85259 +Subproject commit 1229e39b4db7cd6718ee0a5dc0c3c0454a42ada3 -- Dungeon Crawl Stone Soup |
From: <gi...@cr...> - 2025-07-29 20:00:16
|
via 3f39f5e5c14a821f3c9903d0a594f3becba5dd7c (commit) from 33c2588a93d816b10b3e78f712e56469ea3178e7 (commit) ----------------------------------------------------------------------- commit 3f39f5e5c14a821f3c9903d0a594f3becba5dd7c Author: Medrano83 <rob...@gm...> Date: Tue Jul 29 21:53:07 2025 +0200 Fix freetype and libpng not building on macOS Co-authored-by: Perry Fraser <per...@us...> ----------------------------------------------------------------------- Summary of changes: crawl-ref/source/contrib/freetype | 2 +- crawl-ref/source/contrib/libpng | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/crawl-ref/source/contrib/freetype b/crawl-ref/source/contrib/freetype index 9968cd7325..46fe3a1bd5 160000 --- a/crawl-ref/source/contrib/freetype +++ b/crawl-ref/source/contrib/freetype @@ -1 +1 @@ -Subproject commit 9968cd7325b05a5fb2c0e977c01758ea22553532 +Subproject commit 46fe3a1bd590c05231f7a5e8d0568047df6afed6 diff --git a/crawl-ref/source/contrib/libpng b/crawl-ref/source/contrib/libpng index 25ddb21da5..d58bcd1a3f 160000 --- a/crawl-ref/source/contrib/libpng +++ b/crawl-ref/source/contrib/libpng @@ -1 +1 @@ -Subproject commit 25ddb21da5d32b9916b034ff7ebf216e15572a0d +Subproject commit d58bcd1a3f2c37c9b28228b695a96c1215fa4e68 -- Dungeon Crawl Stone Soup |
From: <gi...@cr...> - 2025-07-28 16:05:16
|
via 33c2588a93d816b10b3e78f712e56469ea3178e7 (commit) from 204c02f503a10b0d37091dd08d9445664050f487 (commit) ----------------------------------------------------------------------- commit 33c2588a93d816b10b3e78f712e56469ea3178e7 Author: patrick <xd...@gm...> Date: Mon Jul 28 11:59:39 2025 -0400 Tweak Tiny Tomes The Tiny Tomes bookshop sells spellbooks with only one spell in them. With the advent of parchments, there's not really much of a distinction between those and a spellbook with one spell, except that the spellbook requires more keypresses to figure out what the hell is in it. Rather than completely cut the entire shop, since people seem to like it, instead it now sells the second-tiniest spellbooks, with two spells each. Also, lower the weighting on two of my spellbook shops, since their frequency was stepping on part of the purpose of parchments. ----------------------------------------------------------------------- Summary of changes: crawl-ref/source/dat/des/builder/shops.des | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/crawl-ref/source/dat/des/builder/shops.des b/crawl-ref/source/dat/des/builder/shops.des index 0de132f0eb..b558a8232e 100644 --- a/crawl-ref/source/dat/des/builder/shops.des +++ b/crawl-ref/source/dat/des/builder/shops.des @@ -1990,6 +1990,7 @@ ENDMAP NAME: nicolae_shop_i_like_big_books TAGS: transparent extra DEPTH: D:4-, Depths, Elf, Snake +WEIGHT: 5 KFEAT: S = book shop type:Tremendous suffix:Tomes count:8 ; \ any randbook numspells:8 KFEAT: p = c @@ -2009,8 +2010,9 @@ ENDMAP NAME: nicolae_shop_i_like_small_books_too TAGS: transparent extra DEPTH: D:4-, Depths, Elf, Snake +WEIGHT: 5 KFEAT: S = book shop type:Tiny suffix:Tomes count:8 ; \ - any randbook numspells:1 + any randbook numspells:2 KFEAT: p = c COLOUR: p : blue / red / magenta / lightgreen / lightred / lightmagenta / yellow MAP -- Dungeon Crawl Stone Soup |
From: <gi...@cr...> - 2025-07-28 09:20:15
|
via 204c02f503a10b0d37091dd08d9445664050f487 (commit) from ec60261d0a04724e0fc73b2ba127d202725ca099 (commit) ----------------------------------------------------------------------- commit 204c02f503a10b0d37091dd08d9445664050f487 Author: Medrano83 <rob...@gm...> Date: Mon Jul 21 23:58:00 2025 +0200 Update to Android SDK 35 Starting August 31 2025, new apps and app updates must target Android 15 (API level 35) or higher to be submitted to Google Play. There are two changes related to window insets in Android 15: edge-to-edge is enforced by default, and there are also configuration changes, such as the default configuration of system bars. I'm also reworking the code to control the virtual keyboard visibility because it's a mess. ----------------------------------------------------------------------- Summary of changes: .github/workflows/ci.yml | 2 +- .../source/android-project/app/build.gradle.in | 6 +- .../main/java/org/develz/crawl/DCSSKeyboard.java | 24 ++-- .../src/main/java/org/develz/crawl/DCSSMorgue.java | 4 +- .../src/main/java/org/libsdl/app/SDLActivity.java | 133 ++++++++++----------- .../app/src/main/res/layout/keyboard_ctrl.xml | 2 +- .../app/src/main/res/layout/keyboard_numeric.xml | 2 +- .../app/src/main/res/layout/keyboard_upper.xml | 2 +- .../app/src/main/res/layout/launcher.xml | 1 + .../app/src/main/res/layout/morgue.xml | 1 + .../app/src/main/res/layout/text_editor.xml | 1 + .../app/src/main/res/layout/text_viewer.xml | 3 +- crawl-ref/source/android-project/build.gradle | 2 +- crawl-ref/source/main.cc | 2 +- crawl-ref/source/startup.cc | 2 +- crawl-ref/source/syscalls.cc | 6 +- crawl-ref/source/syscalls.h | 2 +- 17 files changed, 93 insertions(+), 102 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3cf95cdb65..d457c26353 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -691,7 +691,7 @@ jobs: - name: Setup Gradle uses: gradle/actions/setup-gradle@v3 with: - gradle-version: 8.7 # compatible with Android Gradle plugin 8.5 + gradle-version: 8.7 # compatible with Android Gradle plugin 8.6 - name: Setup ccache uses: hendrikmuhs/ccache-action@v1.2 with: diff --git a/crawl-ref/source/android-project/app/build.gradle.in b/crawl-ref/source/android-project/app/build.gradle.in index 435779c797..f1b011b796 100644 --- a/crawl-ref/source/android-project/app/build.gradle.in +++ b/crawl-ref/source/android-project/app/build.gradle.in @@ -6,9 +6,9 @@ android { defaultConfig { applicationId "org.develz.crawl" - compileSdk 34 + compileSdk 35 minSdkVersion 21 - targetSdkVersion 34 + targetSdkVersion 35 versionCode @ANDROID_VERSION@ versionName "@CRAWL_VERSION@" @@ -55,7 +55,7 @@ android { } dependencies { - implementation 'androidx.appcompat:appcompat:1.7.0' + implementation 'androidx.appcompat:appcompat:1.7.1' implementation 'com.google.android.material:material:1.12.0' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.2.1' diff --git a/crawl-ref/source/android-project/app/src/main/java/org/develz/crawl/DCSSKeyboard.java b/crawl-ref/source/android-project/app/src/main/java/org/develz/crawl/DCSSKeyboard.java index 3a29b72065..c3ae28e298 100644 --- a/crawl-ref/source/android-project/app/src/main/java/org/develz/crawl/DCSSKeyboard.java +++ b/crawl-ref/source/android-project/app/src/main/java/org/develz/crawl/DCSSKeyboard.java @@ -227,29 +227,29 @@ public class DCSSKeyboard extends DCSSKeyboardBase implements View.OnClickListen protected void updateLayout(View v) { if ((v.getId() == R.id.key_shift_lower) || (v.getId() == R.id.key_shift_ctrl)) { - keyboardLower.setVisibility(View.INVISIBLE); - keyboardCtrl.setVisibility(View.INVISIBLE); - keyboardNumeric.setVisibility(View.INVISIBLE); + keyboardLower.setVisibility(View.GONE); + keyboardCtrl.setVisibility(View.GONE); + keyboardNumeric.setVisibility(View.GONE); keyboardUpper.setVisibility(View.VISIBLE); } else if (v.getId() == R.id.key_ctrl_lower || v.getId() == R.id.key_ctrl_upper) { - keyboardLower.setVisibility(View.INVISIBLE); - keyboardUpper.setVisibility(View.INVISIBLE); - keyboardNumeric.setVisibility(View.INVISIBLE); + keyboardLower.setVisibility(View.GONE); + keyboardUpper.setVisibility(View.GONE); + keyboardNumeric.setVisibility(View.GONE); keyboardCtrl.setVisibility(View.VISIBLE); } else if ((v.getId() == R.id.key_123_lower) || (v.getId() == R.id.key_123_upper) || (v.getId() == R.id.key_123_ctrl)) { - keyboardLower.setVisibility(View.INVISIBLE); - keyboardUpper.setVisibility(View.INVISIBLE); - keyboardCtrl.setVisibility(View.INVISIBLE); + keyboardLower.setVisibility(View.GONE); + keyboardUpper.setVisibility(View.GONE); + keyboardCtrl.setVisibility(View.GONE); keyboardNumeric.setVisibility(View.VISIBLE); } else if ((v.getId() == R.id.key_abc) || (((LinearLayout)v.getParent().getParent()).getId() == R.id.keyboard_upper) || (((LinearLayout)v.getParent().getParent()).getId() == R.id.keyboard_ctrl)) { - keyboardUpper.setVisibility(View.INVISIBLE); - keyboardCtrl.setVisibility(View.INVISIBLE); - keyboardNumeric.setVisibility(View.INVISIBLE); + keyboardUpper.setVisibility(View.GONE); + keyboardCtrl.setVisibility(View.GONE); + keyboardNumeric.setVisibility(View.GONE); keyboardLower.setVisibility(View.VISIBLE); } } diff --git a/crawl-ref/source/android-project/app/src/main/java/org/develz/crawl/DCSSMorgue.java b/crawl-ref/source/android-project/app/src/main/java/org/develz/crawl/DCSSMorgue.java index 10828b0a21..6739ea4835 100644 --- a/crawl-ref/source/android-project/app/src/main/java/org/develz/crawl/DCSSMorgue.java +++ b/crawl-ref/source/android-project/app/src/main/java/org/develz/crawl/DCSSMorgue.java @@ -52,14 +52,14 @@ public class DCSSMorgue extends AppCompatActivity adapter = new DCSSMorgueAdapter(morgueDir, this); recyclerView.setAdapter(adapter); adapter.sortMorgueFiles(DEFAULT_ORDER); - progress.setVisibility(View.INVISIBLE); + progress.setVisibility(View.GONE); } @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { progress.setVisibility(View.VISIBLE); adapter.sortMorgueFiles(position); - progress.setVisibility(View.INVISIBLE); + progress.setVisibility(View.GONE); } @Override diff --git a/crawl-ref/source/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java b/crawl-ref/source/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java index 4f1491a9c4..2bc076f0fe 100644 --- a/crawl-ref/source/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java +++ b/crawl-ref/source/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java @@ -72,8 +72,8 @@ public class SDLActivity extends AppCompatActivity { protected static boolean fullScreen; protected static View mTextEdit; protected static boolean mScreenKeyboardShown; - protected static boolean mScreenExtraKeyboardShown; protected static ViewGroup mLayout; + protected static LinearLayout keyboardsLayout; protected static SDLClipboardHandler mClipboardHandler; // This is what SDL runs in. It invokes SDL_main(), eventually @@ -151,6 +151,7 @@ public class SDLActivity extends AppCompatActivity { fullScreen = true; mTextEdit = null; mLayout = null; + keyboardsLayout = null; mClipboardHandler = null; mSDLThread = null; mExitCalledFromJava = false; @@ -162,7 +163,6 @@ public class SDLActivity extends AppCompatActivity { mCurrentNativeState = NativeState.INIT; // CRAWL HACK: Custom keyboard mScreenKeyboardShown = false; - mScreenExtraKeyboardShown = false; } // Setup @@ -238,26 +238,29 @@ public class SDLActivity extends AppCompatActivity { Log.i(TAG, "Full screen: " + fullScreen); mLayout = new RelativeLayout(this); + mLayout.setFitsSystemWindows(true); mLayout.setBackgroundColor(getResources().getColor(R.color.black)); mSurface = new SDLSurface(getApplication()); mKeyboard = new DCSSKeyboard(this); + mKeyboard.setVisibility(View.INVISIBLE); mKeyboard.initKeyboard(keyboardOption, keyboardSize); mKeyboardExtra = new DCSSKeyboardExtra(this); + mKeyboardExtra.setVisibility(View.INVISIBLE); mKeyboardExtra.initKeyboard(extraKeyboardOption, keyboardSize); // Add the SDLSurface to the main layout aligned top RelativeLayout.LayoutParams sdlLParams = new RelativeLayout.LayoutParams( - RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT); + RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT); sdlLParams.addRule(RelativeLayout.ALIGN_PARENT_TOP); mSurface.setLayoutParams(sdlLParams); mLayout.addView(mSurface); // Main keyboard at the bottom and extra keyboard at the top - LinearLayout keyboardsLayout = new LinearLayout(this); + keyboardsLayout = new LinearLayout(this); keyboardsLayout.setOrientation(LinearLayout.VERTICAL); LinearLayout.LayoutParams extraKeyLParams = new LinearLayout.LayoutParams( RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT); - if (extraKeyboardOption == 3 || extraKeyboardOption == 4) { + if (extraKeyboardOption == 0 || extraKeyboardOption >= 3) { // Space between keyboards Space space = new Space(this); LinearLayout.LayoutParams spaceLParams = new LinearLayout.LayoutParams( @@ -270,7 +273,7 @@ public class SDLActivity extends AppCompatActivity { } mKeyboardExtra.setLayoutParams(extraKeyLParams); keyboardsLayout.addView(mKeyboardExtra); - if (keyboardOption == 0 || keyboardOption == 1) { + if (keyboardOption <= 1) { LinearLayout.LayoutParams mainKeyLParams = new LinearLayout.LayoutParams( RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT); mKeyboard.setLayoutParams(mainKeyLParams); @@ -284,45 +287,6 @@ public class SDLActivity extends AppCompatActivity { keyboardsLayout.setLayoutParams(keyLParams); mLayout.addView(keyboardsLayout); setContentView(mLayout); - - // Calculate SDL Surface height - mLayout.addOnLayoutChangeListener( - (v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> { - - if (mScreenKeyboardShown) { - if (mKeyboard.getVisibility() != View.VISIBLE || oldBottom != mLayout.getHeight()) { - mKeyboard.setVisibility(View.VISIBLE); - ViewGroup.LayoutParams lParams = mSurface.getLayoutParams(); - if (keyboardOption == 0) { - lParams.height = mLayout.getHeight() - mKeyboard.getHeight(); - } else { - lParams.height = mLayout.getHeight(); - } - mSurface.setLayoutParams(lParams); - } - } - else { - if (mKeyboard.getVisibility() != View.INVISIBLE || oldBottom != mLayout.getHeight()) { - mKeyboard.setVisibility(View.INVISIBLE); - ViewGroup.LayoutParams lParams = mSurface.getLayoutParams(); - lParams.height = mLayout.getHeight(); - mSurface.setLayoutParams(lParams); - } - } - - if (mScreenExtraKeyboardShown) { - mKeyboardExtra.setVisibility(View.VISIBLE); - } else { - mKeyboardExtra.setVisibility(View.INVISIBLE); - } - - // Init the TextEdit - // Transfer the task to the main thread as a Runnable - // Delay the initialization if using the soft keyboard - if (keyboardOption != 2) { - mSingleton.commandHandler.post(new ShowTextInputTask(left, top, right, bottom)); - } - }); // CRAWL HACK: Custom keyboard (END) // Get filename from "Open with" of another application @@ -366,9 +330,6 @@ public class SDLActivity extends AppCompatActivity { } SDLActivity.handleNativeState(); - - // CRAWL HACK: Force screen update - updateScreen(); } @Override @@ -575,6 +536,7 @@ public class SDLActivity extends AppCompatActivity { static final int COMMAND_UNUSED = 2; static final int COMMAND_TEXTEDIT_HIDE = 3; static final int COMMAND_SET_KEEP_SCREEN_ON = 5; + static final int COMMAND_UPDATE_KEYBOARD_VISIBILITY = 10; protected static final int COMMAND_USER = 0x8000; @@ -638,6 +600,33 @@ public class SDLActivity extends AppCompatActivity { } break; } + case COMMAND_UPDATE_KEYBOARD_VISIBILITY: + { + Log.v(TAG, "command update keyboard visibility"); + if (context instanceof Activity) { + if (mScreenKeyboardShown && keyboardOption < 2) { + mKeyboard.setVisibility(View.VISIBLE); + } else { + mKeyboard.setVisibility(View.GONE); + } + if (mScreenKeyboardShown && extraKeyboardOption > 0) { + mKeyboardExtra.setVisibility(View.VISIBLE); + } else { + mKeyboardExtra.setVisibility(View.GONE); + } + // Update SDL Surface heigh + if (keyboardOption == 0) { + ViewGroup.LayoutParams lParams = mSurface.getLayoutParams(); + if (mScreenKeyboardShown) { + lParams.height = keyboardsLayout.getHeight() - mKeyboard.getHeight(); + } else { + lParams.height = ViewGroup.LayoutParams.MATCH_PARENT; + } + mSurface.setLayoutParams(lParams); + } + } + break; + } default: if ((context instanceof SDLActivity) && !((SDLActivity) context).onUnhandledMessage(msg.arg1, msg.obj)) { Log.e(TAG, "error handling message, command is " + msg.arg1); @@ -829,41 +818,38 @@ public class SDLActivity extends AppCompatActivity { * This method is called by SDL using JNI. */ public static boolean showTextInput(int x, int y, int w, int h) { - // CRAWL HACK: Task already created on layout update - return true; // Transfer the task to the main thread as a Runnable - //return mSingleton.commandHandler.post(new ShowTextInputTask(x, y, w, h)); + return mSingleton.commandHandler.post(new ShowTextInputTask(x, y, w, h)); } // CRAWL HACK: Function used to toggle the keyboard // This method is called using JNI - public static boolean jniKeyboardControl(boolean toggle) { - Log.i(TAG, "jniKeyboardControl. Toggle = " + toggle); - // Custom keyboards - if (extraKeyboardOption > 0 && !toggle) { - mScreenExtraKeyboardShown = true; - } - if (keyboardOption == 0 || keyboardOption == 1) { - if (toggle) { - mScreenKeyboardShown = !mScreenKeyboardShown; - } else { - mScreenKeyboardShown = true; - } - return mScreenKeyboardShown; - } - // System keyboard - if (keyboardOption == 2) { + public static boolean jniKeyboardControl(int action) { + Log.i(TAG, "jniKeyboardControl. Action = " + action); + if (action == 0) { // Hide keyboard + mScreenKeyboardShown = false; + } else if (action == 1) { // Show keyboard + mScreenKeyboardShown = true; + } else if (action == 2) { // Toggle keyboard + mScreenKeyboardShown = !mScreenKeyboardShown; + } + mSingleton.sendCommand(COMMAND_UPDATE_KEYBOARD_VISIBILITY, null); + // This function always shows the system keyboard, it can be hidden with the back key + if (keyboardOption == 2 && action > 0) { mSingleton.commandHandler.post(new ShowTextInputTask((int)mSurface.getX(), (int)mSurface.getY(), mSurface.getWidth(), mSurface.getHeight())); } - return false; + return mScreenKeyboardShown; } // CRAWL HACK: Function to force a screen update public static void updateScreen() { - SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_CTRL_LEFT); - SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_R); - SDLActivity.onNativeKeyUp(KeyEvent.KEYCODE_R); - SDLActivity.onNativeKeyUp(KeyEvent.KEYCODE_CTRL_LEFT); + final Handler handler = new Handler(Looper.getMainLooper()); + handler.postDelayed(() -> { + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_CTRL_LEFT); + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_R); + SDLActivity.onNativeKeyUp(KeyEvent.KEYCODE_R); + SDLActivity.onNativeKeyUp(KeyEvent.KEYCODE_CTRL_LEFT); + }, 1000); } public static boolean isTextInputEvent(KeyEvent event) { @@ -1421,7 +1407,8 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback, SDLActivity.handleNativeState(); - // CRAWL HACK: Force screen update + // CRAWL HACK: Update SDL Surface heigh + SDLActivity.mSingleton.sendCommand(SDLActivity.COMMAND_UPDATE_KEYBOARD_VISIBILITY, null); SDLActivity.updateScreen(); } diff --git a/crawl-ref/source/android-project/app/src/main/res/layout/keyboard_ctrl.xml b/crawl-ref/source/android-project/app/src/main/res/layout/keyboard_ctrl.xml index e0ebc57116..9d93eb3c04 100644 --- a/crawl-ref/source/android-project/app/src/main/res/layout/keyboard_ctrl.xml +++ b/crawl-ref/source/android-project/app/src/main/res/layout/keyboard_ctrl.xml @@ -6,7 +6,7 @@ android:layout_centerInParent="true" android:orientation="vertical" android:baselineAligned="false" - android:visibility="invisible"> + android:visibility="gone"> <LinearLayout android:layout_width="match_parent" diff --git a/crawl-ref/source/android-project/app/src/main/res/layout/keyboard_numeric.xml b/crawl-ref/source/android-project/app/src/main/res/layout/keyboard_numeric.xml index 4f239b7995..ede178f553 100644 --- a/crawl-ref/source/android-project/app/src/main/res/layout/keyboard_numeric.xml +++ b/crawl-ref/source/android-project/app/src/main/res/layout/keyboard_numeric.xml @@ -6,7 +6,7 @@ android:layout_centerInParent="true" android:orientation="vertical" android:baselineAligned="false" - android:visibility="invisible"> + android:visibility="gone"> <LinearLayout android:layout_width="match_parent" diff --git a/crawl-ref/source/android-project/app/src/main/res/layout/keyboard_upper.xml b/crawl-ref/source/android-project/app/src/main/res/layout/keyboard_upper.xml index 5e99fd7596..dbaaba96a0 100644 --- a/crawl-ref/source/android-project/app/src/main/res/layout/keyboard_upper.xml +++ b/crawl-ref/source/android-project/app/src/main/res/layout/keyboard_upper.xml @@ -6,7 +6,7 @@ android:layout_centerInParent="true" android:orientation="vertical" android:baselineAligned="false" - android:visibility="invisible"> + android:visibility="gone"> <LinearLayout android:layout_width="match_parent" diff --git a/crawl-ref/source/android-project/app/src/main/res/layout/launcher.xml b/crawl-ref/source/android-project/app/src/main/res/layout/launcher.xml index c8d64be819..3e7188f24a 100644 --- a/crawl-ref/source/android-project/app/src/main/res/layout/launcher.xml +++ b/crawl-ref/source/android-project/app/src/main/res/layout/launcher.xml @@ -12,6 +12,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerVertical="true" + android:fitsSystemWindows="true" android:scrollbars="vertical"> <LinearLayout diff --git a/crawl-ref/source/android-project/app/src/main/res/layout/morgue.xml b/crawl-ref/source/android-project/app/src/main/res/layout/morgue.xml index b7a4f0b7e5..4b83e4214f 100644 --- a/crawl-ref/source/android-project/app/src/main/res/layout/morgue.xml +++ b/crawl-ref/source/android-project/app/src/main/res/layout/morgue.xml @@ -5,6 +5,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/black" + android:fitsSystemWindows="true" android:keepScreenOn="true" tools:context=".DCSSMorgue"> diff --git a/crawl-ref/source/android-project/app/src/main/res/layout/text_editor.xml b/crawl-ref/source/android-project/app/src/main/res/layout/text_editor.xml index ef7efc27ac..1d570eab4b 100644 --- a/crawl-ref/source/android-project/app/src/main/res/layout/text_editor.xml +++ b/crawl-ref/source/android-project/app/src/main/res/layout/text_editor.xml @@ -6,6 +6,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/black" + android:fitsSystemWindows="true" android:keepScreenOn="true" tools:context=".DCSSTextEditor"> diff --git a/crawl-ref/source/android-project/app/src/main/res/layout/text_viewer.xml b/crawl-ref/source/android-project/app/src/main/res/layout/text_viewer.xml index c2cd9bfcc3..20e0a998d6 100644 --- a/crawl-ref/source/android-project/app/src/main/res/layout/text_viewer.xml +++ b/crawl-ref/source/android-project/app/src/main/res/layout/text_viewer.xml @@ -5,6 +5,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/black" + android:fitsSystemWindows="true" android:keepScreenOn="true" tools:context=".DCSSTextViewer"> @@ -52,7 +53,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/download" - android:visibility="invisible" + android:visibility="gone" android:theme="@style/ButtonColor1" /> </LinearLayout> </LinearLayout> diff --git a/crawl-ref/source/android-project/build.gradle b/crawl-ref/source/android-project/build.gradle index 59809d2e30..2a15218883 100644 --- a/crawl-ref/source/android-project/build.gradle +++ b/crawl-ref/source/android-project/build.gradle @@ -5,7 +5,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:8.5.1' + classpath 'com.android.tools.build:gradle:8.6.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/crawl-ref/source/main.cc b/crawl-ref/source/main.cc index 94dcab3c96..5c0884d477 100644 --- a/crawl-ref/source/main.cc +++ b/crawl-ref/source/main.cc @@ -2449,7 +2449,7 @@ void process_command(command_type cmd, command_type prev_cmd) break; case CMD_TOGGLE_KEYBOARD: - jni_keyboard_control(true); + jni_keyboard_control(2); break; #endif diff --git a/crawl-ref/source/startup.cc b/crawl-ref/source/startup.cc index 48854e6419..5a564a0d78 100644 --- a/crawl-ref/source/startup.cc +++ b/crawl-ref/source/startup.cc @@ -1039,7 +1039,7 @@ bool startup_step() #ifdef __ANDROID__ // Request the Android virtual keyboard. Waiting for the SDLActivity to be // resized avoids some display bugs. - jni_keyboard_control(false); + jni_keyboard_control(1); sleep(1); #endif diff --git a/crawl-ref/source/syscalls.cc b/crawl-ref/source/syscalls.cc index 321380aef3..c5cc2dde22 100644 --- a/crawl-ref/source/syscalls.cc +++ b/crawl-ref/source/syscalls.cc @@ -51,7 +51,7 @@ Java_org_libsdl_app_SDLActivity_nativeSaveGame( save_game(false); } -bool jni_keyboard_control(bool toggle) +bool jni_keyboard_control(int action) { JNIEnv *env = Android_JNI_GetEnv(); jclass sdlClass = env->FindClass("org/libsdl/app/SDLActivity"); @@ -60,8 +60,8 @@ bool jni_keyboard_control(bool toggle) return false; jmethodID mid = - env->GetStaticMethodID(sdlClass, "jniKeyboardControl", "(Z)Z"); - jboolean shown = env->CallStaticBooleanMethod(sdlClass, mid, toggle); + env->GetStaticMethodID(sdlClass, "jniKeyboardControl", "(I)Z"); + jboolean shown = env->CallStaticBooleanMethod(sdlClass, mid, action); return shown; } diff --git a/crawl-ref/source/syscalls.h b/crawl-ref/source/syscalls.h index 418dbb1ce9..5bcf6f9a01 100644 --- a/crawl-ref/source/syscalls.h +++ b/crawl-ref/source/syscalls.h @@ -24,7 +24,7 @@ int mkstemp(char *dummy); #endif #ifdef __ANDROID__ -bool jni_keyboard_control(bool toggle); +bool jni_keyboard_control(int toggle); #endif #ifndef CRAWL_HAVE_FDATASYNC -- Dungeon Crawl Stone Soup |
From: <gi...@cr...> - 2025-07-28 06:40:15
|
at d9f17e1da373b07da6707a61d06dfbae29bcf73f (commit) ----------------------------------------------------------------------- commit d9f17e1da373b07da6707a61d06dfbae29bcf73f Author: hellmonk <nld...@gm...> Date: Mon Jul 28 01:33:59 2025 -0500 Refactor weapon handedness description (projectNoob) Don't claim that weapons are both two-handed and too large to wield, and don't print handedness messages for felids since they cannot wield weapons at all. Closes #4188. ----------------------------------------------------------------------- -- Dungeon Crawl Stone Soup |
From: <gi...@cr...> - 2025-07-28 06:20:09
|
via ec60261d0a04724e0fc73b2ba127d202725ca099 (commit) from f537972d3b6967dc86d525633f080bb4ffaeb8ab (commit) ----------------------------------------------------------------------- commit ec60261d0a04724e0fc73b2ba127d202725ca099 Author: hellmonk <nld...@gm...> Date: Mon Jul 28 01:12:43 2025 -0500 Let gods protect neutrals from bog (yrdzrfxndfvh) Notably, you could kill TRJ with Jiyva using this method. Closes #4289. ----------------------------------------------------------------------- Summary of changes: crawl-ref/source/spl-damage.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/crawl-ref/source/spl-damage.cc b/crawl-ref/source/spl-damage.cc index c7fb9ecbf3..eee81ae2d6 100644 --- a/crawl-ref/source/spl-damage.cc +++ b/crawl-ref/source/spl-damage.cc @@ -4421,6 +4421,9 @@ void actor_apply_toxic_bog(actor * act) } } + if (never_harm_monster(oppressor, act->as_monster())) + return; + const int base_damage = toxic_bog_damage().roll(); const int damage = resist_adjust_damage(act, BEAM_POISON_ARROW, base_damage); const int resist = base_damage - damage; -- Dungeon Crawl Stone Soup |
From: <gi...@cr...> - 2025-07-28 06:00:14
|
via f537972d3b6967dc86d525633f080bb4ffaeb8ab (commit) from 202f19ae06af17b68d3c876fcf654ed3ff69992e (commit) ----------------------------------------------------------------------- commit f537972d3b6967dc86d525633f080bb4ffaeb8ab Author: hellmonk <nld...@gm...> Date: Mon Jul 28 00:53:50 2025 -0500 Improve a tempering message (projectNoob) Don't claim that you can't see that place when you can see that place. Closes #4626. ----------------------------------------------------------------------- Summary of changes: crawl-ref/source/contrib/zlib | 2 +- crawl-ref/source/target.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/crawl-ref/source/contrib/zlib b/crawl-ref/source/contrib/zlib index 1229e39b4d..2d19c60d29 160000 --- a/crawl-ref/source/contrib/zlib +++ b/crawl-ref/source/contrib/zlib @@ -1 +1 @@ -Subproject commit 1229e39b4db7cd6718ee0a5dc0c3c0454a42ada3 +Subproject commit 2d19c60d294880b6ffc740ee0bb090953ed85259 diff --git a/crawl-ref/source/target.cc b/crawl-ref/source/target.cc index e4fe5e2918..cf0fa71826 100644 --- a/crawl-ref/source/target.cc +++ b/crawl-ref/source/target.cc @@ -2640,7 +2640,7 @@ bool targeter_tempering::valid_aim(coord_def a) monster* mons = monster_at(a); if (!mons || !you.can_see(*mons) || !mons->friendly()) - return false; + return notify_fail("There's nothing to be tempered there."); if (mons->has_ench(ENCH_TEMPERED)) return notify_fail("You cannot target a construct which is already augmented."); -- Dungeon Crawl Stone Soup |
From: <gi...@cr...> - 2025-07-28 05:20:11
|
via 202f19ae06af17b68d3c876fcf654ed3ff69992e (commit) from a9e21796bea91c3fec0b9a281880e78f86b94e80 (commit) ----------------------------------------------------------------------- commit 202f19ae06af17b68d3c876fcf654ed3ff69992e Author: Perry Fraser <per...@us...> Date: Mon Jul 28 01:18:18 2025 -0400 fix: make '[X] to wear' text coloring gray (#4675) The text for `easy_floor_use` in the case of floor items didn't have any explicit color information set, causing the color of the nearby cyan text to partially overlap. This fixes that by just explicitly setting it as lightgray. ----------------------------------------------------------------------- Summary of changes: crawl-ref/source/item-use.cc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/crawl-ref/source/item-use.cc b/crawl-ref/source/item-use.cc index 9fde000cd7..a36962561c 100644 --- a/crawl-ref/source/item-use.cc +++ b/crawl-ref/source/item-use.cc @@ -636,9 +636,10 @@ void UseItemMenu::update_sections() floor_header->text = "Floor Items"; if (easy_floor) { - floor_header->text += make_stringf(" (%s to %s)", - menu_keyhelp_cmd(CMD_MENU_CYCLE_HEADERS).c_str(), - _oper_name(oper).c_str()); + floor_header->text += make_stringf( + "<lightgray> (%s to %s)</lightgray>", + menu_keyhelp_cmd(CMD_MENU_CYCLE_HEADERS).c_str(), + _oper_name(oper).c_str()); } else if (is_inventory) floor_header->text += cycle_hint; -- Dungeon Crawl Stone Soup |
From: <gi...@cr...> - 2025-07-27 17:25:14
|
via a9e21796bea91c3fec0b9a281880e78f86b94e80 (commit) from cfd1851050c32deba9daf305a21c960f4f097d25 (commit) ----------------------------------------------------------------------- commit a9e21796bea91c3fec0b9a281880e78f86b94e80 Author: Implojin <imp...@gm...> Date: Sun Jul 27 12:20:41 2025 -0500 Further tweak a devouring rift (regret-index) ----------------------------------------------------------------------- Summary of changes: crawl-ref/source/dat/des/portals/trove.des | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crawl-ref/source/dat/des/portals/trove.des b/crawl-ref/source/dat/des/portals/trove.des index e211f25593..e09134923c 100644 --- a/crawl-ref/source/dat/des/portals/trove.des +++ b/crawl-ref/source/dat/des/portals/trove.des @@ -1578,7 +1578,7 @@ zzxSxzzxx'xxx'xxz zzxx'xxx'xxzz zzxx'xxx'xxzzz zzXX.xxx'xxzzxzz -zXX...x.xxzzx<xzz +zXX...x.xxzzx`xzz zX.....x'zzx'x`xz ZZZ...Xxz'x'x`xxz ZAZ.XXzzz'x`xxzz -- Dungeon Crawl Stone Soup |
From: <gi...@cr...> - 2025-07-27 17:15:14
|
via cfd1851050c32deba9daf305a21c960f4f097d25 (commit) from 69ce87f4c0090a3c1efd58a69c0dad66db20ec05 (commit) ----------------------------------------------------------------------- commit cfd1851050c32deba9daf305a21c960f4f097d25 Author: Implojin <imp...@gm...> Date: Sun Jul 27 12:10:29 2025 -0500 Tweak a trove layout (particleface) The level exit in the devouring rift was being placed in the direction of the loot vault, contributing to some of the confusion about which portal was the exit and which the transporter. ----------------------------------------------------------------------- Summary of changes: crawl-ref/source/dat/des/portals/trove.des | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crawl-ref/source/dat/des/portals/trove.des b/crawl-ref/source/dat/des/portals/trove.des index 9559632d81..e211f25593 100644 --- a/crawl-ref/source/dat/des/portals/trove.des +++ b/crawl-ref/source/dat/des/portals/trove.des @@ -1569,7 +1569,7 @@ MAP zzxx'''xxzz zzzzzzz zzzz zzxxxxxzz zzxxxxxzzzxxzzz zzzzzzz -zzxx`x'zzzxx'z<z +zzxx`x'zzzxx'zPz zxx`x'x'zxx'''zzz zx`x'xzz'x'x'''xz zzxSxzzxx'xxx'xxz @@ -1578,7 +1578,7 @@ zzxSxzzxx'xxx'xxz zzxx'xxx'xxzz zzxx'xxx'xxzzz zzXX.xxx'xxzzxzz -zXX...x.xxzzxPxzz +zXX...x.xxzzx<xzz zX.....x'zzx'x`xz ZZZ...Xxz'x'x`xxz ZAZ.XXzzz'x`xxzz -- Dungeon Crawl Stone Soup |
From: <gi...@cr...> - 2025-07-27 15:40:14
|
via 69ce87f4c0090a3c1efd58a69c0dad66db20ec05 (commit) from 75a88694f095de48c0b1d88cafdae271a2da9a46 (commit) ----------------------------------------------------------------------- commit 69ce87f4c0090a3c1efd58a69c0dad66db20ec05 Author: Implojin <imp...@gm...> Date: Sun Jul 27 10:38:24 2025 -0500 Remove some optional lua Following 75a88694f0, trove exits prompt by default. ----------------------------------------------------------------------- Summary of changes: crawl-ref/settings/advanced_optioneering.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crawl-ref/settings/advanced_optioneering.txt b/crawl-ref/settings/advanced_optioneering.txt index 4ee6fc77aa..8428473f60 100644 --- a/crawl-ref/settings/advanced_optioneering.txt +++ b/crawl-ref/settings/advanced_optioneering.txt @@ -5,7 +5,7 @@ { function safe_upstairs() - if you.branch() == "Gauntlet" or you.branch() == "Trove" then + if you.branch() == "Gauntlet" then crawl.formatted_mpr("Really leave this portal?", "prompt") local res = crawl.getch() if string.lower(string.char(res)) == "y" then -- Dungeon Crawl Stone Soup |
From: <gi...@cr...> - 2025-07-27 15:25:10
|
via 75a88694f095de48c0b1d88cafdae271a2da9a46 (commit) from f09bc6260025d166f580e7d730ce0f96896a6767 (commit) ----------------------------------------------------------------------- commit 75a88694f095de48c0b1d88cafdae271a2da9a46 Author: Implojin <imp...@gm...> Date: Sun Jul 27 10:19:58 2025 -0500 Add a confirm prompt to trove exits (dilly, particleface) Players have had some unfortunate confusion about trove exits vs. transporters, leading to players unintentionally exiting troves early, and adding a prompt here is reasonable behavior. It would probably also be nice to differentiate the trove exit portal tile from the transporter tile a bit more? ----------------------------------------------------------------------- Summary of changes: crawl-ref/source/main.cc | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/crawl-ref/source/main.cc b/crawl-ref/source/main.cc index 508644b0f7..94dcab3c96 100644 --- a/crawl-ref/source/main.cc +++ b/crawl-ref/source/main.cc @@ -1494,6 +1494,17 @@ static bool _prompt_stairs(dungeon_feature_type ygrd, bool down, bool shaft) } } + // Exiting Troves early. + if (ygrd == DNGN_EXIT_TROVE + && you.depth == brdepth[BRANCH_TROVE]) + { + if (!yesno("Are you sure you want to leave this trove?", false, 'n')) + { + canned_msg(MSG_OK); + return false; + } + } + // Leaving ziggurat figurines behind. if (ygrd == DNGN_EXIT_ZIGGURAT && you.depth == brdepth[BRANCH_ZIGGURAT] -- Dungeon Crawl Stone Soup |
From: <gi...@cr...> - 2025-07-26 13:30:16
|
via f09bc6260025d166f580e7d730ce0f96896a6767 (commit) from ac1049ab153970bc300aa202dab48d3f764fddee (commit) ----------------------------------------------------------------------- commit f09bc6260025d166f580e7d730ce0f96896a6767 Author: DracoOmega <dra...@gm...> Date: Sat Jul 26 10:55:38 2025 -0230 Prevent casting Surprising Crocodile while a tree (Acrobat) ----------------------------------------------------------------------- Summary of changes: crawl-ref/source/spl-util.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/crawl-ref/source/spl-util.cc b/crawl-ref/source/spl-util.cc index 566e8e93c3..3beeb58a70 100644 --- a/crawl-ref/source/spl-util.cc +++ b/crawl-ref/source/spl-util.cc @@ -1527,7 +1527,9 @@ string spell_uselessness_reason(spell_type spell, bool temp, bool prevent, case SPELL_SURPRISING_CROCODILE: if (temp) { - if (!monster_habitable_grid(MONS_CROCODILE, you.pos())) + if (you.is_stationary()) + return "you cannot be moved right now."; + else if (!monster_habitable_grid(MONS_CROCODILE, you.pos())) return "a crocodile could not survive beneath you."; else if (count_summons(&you, SPELL_SURPRISING_CROCODILE)) return "your pet crocodile is still here."; -- Dungeon Crawl Stone Soup |
From: <gi...@cr...> - 2025-07-26 12:50:11
|
via ac1049ab153970bc300aa202dab48d3f764fddee (commit) via 872aa194569a94d29d37125feb50c8780ec44302 (commit) via 2effaad7b1f0224da8ceae7afb9aedce868777e8 (commit) from e9fc4eb682203603134e32451c323dc48d76cef6 (commit) ----------------------------------------------------------------------- commit ac1049ab153970bc300aa202dab48d3f764fddee Author: DracoOmega <dra...@gm...> Date: Sat Jul 26 10:17:21 2025 -0230 Fix !f inscription not working for weapons on (a) (code2828) commit 872aa194569a94d29d37125feb50c8780ec44302 Author: DracoOmega <dra...@gm...> Date: Sat Jul 26 10:16:48 2025 -0230 Remove an out-of-date part of talisman descriptions (mysticsailboat) Technically they're still slow, but this is no different than other things you put on, like amulets, that don't get a special note about this when examined. commit 2effaad7b1f0224da8ceae7afb9aedce868777e8 Author: DracoOmega <dra...@gm...> Date: Sat Jul 26 10:15:52 2025 -0230 Fix Sacrifice Words giving the wrong mutation Whoops >.> ----------------------------------------------------------------------- Summary of changes: crawl-ref/source/describe.cc | 4 ---- crawl-ref/source/quiver.cc | 2 +- crawl-ref/source/sacrifice-data.h | 2 +- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/crawl-ref/source/describe.cc b/crawl-ref/source/describe.cc index 9fdca3be43..c978d4412f 100644 --- a/crawl-ref/source/describe.cc +++ b/crawl-ref/source/describe.cc @@ -7672,10 +7672,6 @@ static string _describe_talisman(const item_def &item, bool verbose) { if (crawl_state.need_save && item.is_identified()) description << _equipment_property_change(item); - - description << "\n\nA period of sustained concentration is needed to " - "enter or leave forms. To leave this form, evoke the " - "talisman again."; } } diff --git a/crawl-ref/source/quiver.cc b/crawl-ref/source/quiver.cc index 9459a95c01..5dbb5293e9 100644 --- a/crawl-ref/source/quiver.cc +++ b/crawl-ref/source/quiver.cc @@ -202,7 +202,7 @@ namespace quiver bool action::do_inscription_check() const { const int slot = get_item(); - if (slot <= 0 || slot >= ENDOFPACK || !you.inv[slot].defined()) + if (slot < 0 || slot >= ENDOFPACK || !you.inv[slot].defined()) return true; return check_warning_inscriptions(you.inv[slot], OPER_FIRE); diff --git a/crawl-ref/source/sacrifice-data.h b/crawl-ref/source/sacrifice-data.h index 58ef7044c3..02f677c167 100644 --- a/crawl-ref/source/sacrifice-data.h +++ b/crawl-ref/source/sacrifice-data.h @@ -37,7 +37,7 @@ static const sacrifice_def sac_data[] = nullptr, }, -{ ABIL_RU_SACRIFICE_WORDS, MUT_HOARD_POTIONS, +{ ABIL_RU_SACRIFICE_WORDS, MUT_HOARD_SCROLLS, "sacrifice your ability to read when uninjured", "sacrificed words", -- Dungeon Crawl Stone Soup |
From: <gi...@cr...> - 2025-07-26 03:15:09
|
via e9fc4eb682203603134e32451c323dc48d76cef6 (commit) from 2092a5b95c8192649cab13e5f54b4e0913ab3713 (commit) ----------------------------------------------------------------------- commit e9fc4eb682203603134e32451c323dc48d76cef6 Author: DracoOmega <dra...@gm...> Date: Sat Jul 26 00:44:17 2025 -0230 Fix Frozen Ramparts incorrectly persisting on the level border (tswn) Apparently distance_iterator skips 'out of bounds' tiles (which the level border counts as), meaning that while the level border could get affected by ramparts, FPROP_ICY would never get cleared for it, causing it to reappear there whenever the player cast ramparts again later on, even from a great distance. I am frankly amazed this bug went so long without being discovered, since it seems that it may have always existed! ----------------------------------------------------------------------- Summary of changes: crawl-ref/source/spl-damage.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/crawl-ref/source/spl-damage.cc b/crawl-ref/source/spl-damage.cc index a4170da441..c7fb9ecbf3 100644 --- a/crawl-ref/source/spl-damage.cc +++ b/crawl-ref/source/spl-damage.cc @@ -4528,11 +4528,11 @@ void end_frozen_ramparts() const auto &pos = you.props[FROZEN_RAMPARTS_KEY].get_coord(); ASSERT(in_bounds(pos)); - for (distance_iterator di(pos, false, false, - spell_range(SPELL_FROZEN_RAMPARTS, -1)); di; di++) + for (radius_iterator ri(pos, spell_range(SPELL_FROZEN_RAMPARTS, -1), + C_SQUARE, false); ri; ri++) { - env.pgrid(*di) &= ~FPROP_ICY; - env.map_knowledge(*di).flags &= ~MAP_ICY; + env.pgrid(*ri) &= ~FPROP_ICY; + env.map_knowledge(*ri).flags &= ~MAP_ICY; } you.props.erase(FROZEN_RAMPARTS_KEY); -- Dungeon Crawl Stone Soup |
From: <gi...@cr...> - 2025-07-26 02:45:14
|
via 2092a5b95c8192649cab13e5f54b4e0913ab3713 (commit) from fbc83c92bff54c9d006ee310ba103964a3ba28e2 (commit) ----------------------------------------------------------------------- commit 2092a5b95c8192649cab13e5f54b4e0913ab3713 Author: DracoOmega <dra...@gm...> Date: Sat Jul 26 00:13:39 2025 -0230 Fix a typo (mysticsailboat) ----------------------------------------------------------------------- Summary of changes: crawl-ref/source/spl-util.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crawl-ref/source/spl-util.cc b/crawl-ref/source/spl-util.cc index 4fa847bda5..566e8e93c3 100644 --- a/crawl-ref/source/spl-util.cc +++ b/crawl-ref/source/spl-util.cc @@ -1171,7 +1171,7 @@ string casting_uselessness_reason(spell_type spell, bool temp) } if (you.form == transformation::walking_scroll && spell_difficulty(spell) > 4) - return "your cannot cast such powerful magic in your current form."; + return "you cannot cast such powerful magic in your current form."; } // Check for banned schools (Currently just Ru sacrifices) -- Dungeon Crawl Stone Soup |
From: <gi...@cr...> - 2025-07-25 23:15:14
|
via fbc83c92bff54c9d006ee310ba103964a3ba28e2 (commit) via 8340f1be1c4d352c5f65b8c8195174fc673838bc (commit) via f1290f79c641cb306b288e9df731c2fb19f5796f (commit) via 932838a43407d406f7256b3e55b6a203393d4fa7 (commit) via 25a487ff23779ff0ebf56903d8cd3c0a5e73d4e1 (commit) from 525ab0ce3ce0b18ec118330ee45cc953a3fe790f (commit) ----------------------------------------------------------------------- commit fbc83c92bff54c9d006ee310ba103964a3ba28e2 Author: DracoOmega <dra...@gm...> Date: Fri Jul 25 20:34:31 2025 -0230 Show diminished spells icon in webtiles commit 8340f1be1c4d352c5f65b8c8195174fc673838bc Author: DracoOmega <dra...@gm...> Date: Fri Jul 25 20:30:27 2025 -0230 Sort talismans adjacent to other gear in the full inventory menu So that letters will work for examining gear by default first, instead of consumables (as it works in the other menu mode). commit f1290f79c641cb306b288e9df731c2fb19f5796f Author: DracoOmega <dra...@gm...> Date: Fri Jul 25 20:23:47 2025 -0230 Fix consumable_shortcut option not properly resetting when asked commit 932838a43407d406f7256b3e55b6a203393d4fa7 Author: DracoOmega <dra...@gm...> Date: Fri Jul 25 14:51:08 2025 -0230 Fix opening drop menu onto an empty page (dilly) If the player had no gear, but some other items, the drop menu would still default to an empty list of gear. Worse, because the menu had no entries, all keypresses would automatically close it instead of allowing you to switch to other pages. commit 25a487ff23779ff0ebf56903d8cd3c0a5e73d4e1 Author: DracoOmega <dra...@gm...> Date: Fri Jul 25 12:33:24 2025 -0230 Fix further issues with baubles getting inappropriate letters (dilly) ----------------------------------------------------------------------- Summary of changes: crawl-ref/source/initfile.cc | 4 ++++ crawl-ref/source/invent.cc | 6 ++++-- crawl-ref/source/item-use.cc | 1 + crawl-ref/source/items.cc | 1 + crawl-ref/source/webserver/game_data/static/cell_renderer.js | 1 + 5 files changed, 11 insertions(+), 2 deletions(-) diff --git a/crawl-ref/source/initfile.cc b/crawl-ref/source/initfile.cc index eb3d9dc4e1..3a5dc0b2fa 100644 --- a/crawl-ref/source/initfile.cc +++ b/crawl-ref/source/initfile.cc @@ -3098,6 +3098,10 @@ void game_options::update_travel_terrain() void game_options::update_consumable_shortcuts() { + potion_shortcuts.init(0); + scroll_shortcuts.init(0); + evokable_shortcuts.init(0); + for (const auto& entry : auto_consumable_letters) { item_kind kind = item_kind_by_name(entry.first); diff --git a/crawl-ref/source/invent.cc b/crawl-ref/source/invent.cc index 1d6d059788..92ffbf2e51 100644 --- a/crawl-ref/source/invent.cc +++ b/crawl-ref/source/invent.cc @@ -958,12 +958,12 @@ FixedVector<int, NUM_OBJECT_CLASSES> inv_order( OBJ_RODS, #endif OBJ_JEWELLERY, + OBJ_TALISMANS, OBJ_WANDS, OBJ_SCROLLS, OBJ_POTIONS, OBJ_MISCELLANY, OBJ_BAUBLES, - OBJ_TALISMANS, #if TAG_MAJOR_VERSION == 34 OBJ_FOOD, #endif @@ -1455,7 +1455,9 @@ static int _invent_select(const char *title = nullptr, { for (int i = 0; i < 4; ++i) menu.set_page(i); - menu.set_page(0); + + // And then jump to the first non-empty page. + menu.cycle_page(1); } menu.show(true); diff --git a/crawl-ref/source/item-use.cc b/crawl-ref/source/item-use.cc index e5f2c6ae54..9fde000cd7 100644 --- a/crawl-ref/source/item-use.cc +++ b/crawl-ref/source/item-use.cc @@ -831,6 +831,7 @@ static operation_types _item_type_to_oper(object_class_type type) { switch (type) { + case OBJ_BAUBLES: case OBJ_WANDS: case OBJ_MISCELLANY: return OPER_EVOKE; case OBJ_POTIONS: return OPER_QUAFF; diff --git a/crawl-ref/source/items.cc b/crawl-ref/source/items.cc index 07fd5741b2..87d1683c8d 100644 --- a/crawl-ref/source/items.cc +++ b/crawl-ref/source/items.cc @@ -2253,6 +2253,7 @@ static int _letter_for_consumable(item_def& item, bool first_pickup) break; case OBJ_WANDS: case OBJ_MISCELLANY: + case OBJ_BAUBLES: for (const char& key : Options.evokable_shortcuts) if (isalpha(key)) reserved[letter_to_index(key)] = true; diff --git a/crawl-ref/source/webserver/game_data/static/cell_renderer.js b/crawl-ref/source/webserver/game_data/static/cell_renderer.js index d5d761df8d..247fbdf3d1 100644 --- a/crawl-ref/source/webserver/game_data/static/cell_renderer.js +++ b/crawl-ref/source/webserver/game_data/static/cell_renderer.js @@ -1127,6 +1127,7 @@ function ($, view_data, gui, main, tileinfo_player, icons, dngn, enums, case icons.CONFUSED: case icons.LACED_WITH_CHAOS: case icons.SENTINEL_MARK: + case icons.DIMMED: this.draw_icon(idx, x, y, ofsx, ofsy, img_scale); return 6; case icons.CONC_VENOM: -- Dungeon Crawl Stone Soup |
From: <gi...@cr...> - 2025-07-25 22:20:09
|
via 525ab0ce3ce0b18ec118330ee45cc953a3fe790f (commit) from b3cc5aa0c1cece03a3ab27ac35a06fa0e9c9bb4e (commit) ----------------------------------------------------------------------- commit 525ab0ce3ce0b18ec118330ee45cc953a3fe790f Author: Implojin <imp...@gm...> Date: Fri Jul 25 17:15:09 2025 -0500 Fix a typo ----------------------------------------------------------------------- Summary of changes: crawl-ref/source/dat/descript/items.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crawl-ref/source/dat/descript/items.txt b/crawl-ref/source/dat/descript/items.txt index 0b7c64e760..78e1be0ed5 100644 --- a/crawl-ref/source/dat/descript/items.txt +++ b/crawl-ref/source/dat/descript/items.txt @@ -1143,7 +1143,7 @@ An ever-changing fragment of something primordial; its substance seems to undulate between flesh and bone and perhaps even metal. A sufficiently skilled shapeshifter can stabilise it into a useable - if unpredictable - form. -(If your Shapeshifting skill is at least 6, attempting to put this one will +(If your Shapeshifting skill is at least 6, attempting to put this on will transform it into a random one of: Rimehorn, Scarab, Medusa, or Maw talismans.) %%%% quad damage -- Dungeon Crawl Stone Soup |
From: <gi...@cr...> - 2025-07-25 08:40:10
|
via b3cc5aa0c1cece03a3ab27ac35a06fa0e9c9bb4e (commit) from fe017741961903f5ad5b0db7b813cedfad8f6651 (commit) ----------------------------------------------------------------------- commit b3cc5aa0c1cece03a3ab27ac35a06fa0e9c9bb4e Author: Medrano83 <rob...@gm...> Date: Fri Jul 25 10:28:52 2025 +0200 Fix zlib not building on macOS Co-authored-by: Perry Fraser <per...@us...> ----------------------------------------------------------------------- Summary of changes: crawl-ref/source/contrib/zlib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crawl-ref/source/contrib/zlib b/crawl-ref/source/contrib/zlib index 2d19c60d29..1229e39b4d 160000 --- a/crawl-ref/source/contrib/zlib +++ b/crawl-ref/source/contrib/zlib @@ -1 +1 @@ -Subproject commit 2d19c60d294880b6ffc740ee0bb090953ed85259 +Subproject commit 1229e39b4db7cd6718ee0a5dc0c3c0454a42ada3 -- Dungeon Crawl Stone Soup |
From: <gi...@cr...> - 2025-07-25 02:15:16
|
via fe017741961903f5ad5b0db7b813cedfad8f6651 (commit) from a178a525af15de52ffd37f9d9af99cecd33e6ca3 (commit) ----------------------------------------------------------------------- commit fe017741961903f5ad5b0db7b813cedfad8f6651 Author: regret-index <clo...@ho...> Date: Thu Jul 24 23:44:43 2025 -0230 Fix a trove mutation check (Oneirical) ----------------------------------------------------------------------- Summary of changes: crawl-ref/source/dat/des/portals/trove.des | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crawl-ref/source/dat/des/portals/trove.des b/crawl-ref/source/dat/des/portals/trove.des index c5ebc5ef47..9559632d81 100644 --- a/crawl-ref/source/dat/des/portals/trove.des +++ b/crawl-ref/source/dat/des/portals/trove.des @@ -1319,7 +1319,7 @@ KFEAT: ~ = open_sea : if species_is_undead(_G) or you.mutation("no forms") == 1 then SUBST: g = df : elseif you.mutation("no armour") == 1 and -: you.mutation("weapons or thrown items") == 1 then +: you.mutation("no weapons or thrown items") == 1 then SUBST: df = egg : elseif you.mutation("antennae") == 3 or you.mutation("horns") == 3 then SUBST: d = eff -- Dungeon Crawl Stone Soup |
From: <gi...@cr...> - 2025-07-24 20:25:14
|
via a178a525af15de52ffd37f9d9af99cecd33e6ca3 (commit) from 2e3327b29e69bd22a3ced2d9ad79ca744aa0995a (commit) ----------------------------------------------------------------------- commit a178a525af15de52ffd37f9d9af99cecd33e6ca3 Author: regret-index <clo...@ho...> Date: Thu Jul 24 17:49:06 2025 -0230 Further adjust Kiku's wrath (Oneirical) When b6bfbb2 reduced Kikubaaqudgha's draining wrath effect (from a range between ~23.3% to 40% max hp to a new range of ~16.6% to 30% max hp) and removed the ability to resist it via rN simultaneously (so an rN+++ character couldn't ignore a large part of the wrath), it made the wrath still capable of dragging former worshippers down to single-digit percents of their max HP (through the randomness of when the wrath actually triggers), but without very much potential recourse to handle such. Gifting god wrath should be dangerous, but even Okawaru wrath summons have more potential responses than this, so I'm further adjusting the numbers and adding another angle. The new Kiku zero-tension wrath effect is mildly reduced at the top end, with a range of ~16.6% to ~26.6% max HP, and more importantly will not apply at all if the player is already drained for 50% or more of their max HP. In exchange, Kiku wrath now also directly inflicts 35% to 50% Doom regardless of whether or not draining occurred, as is somewhat linked to the undead between draugr attacks and mummy death curses. Banes are still reasonably rare to encounter currently (without entering optional / extended branches), are evidently currently reasonably survivable, and add to the strategic-damage emphasis prior; as such, it should be safe to emphasize these over the relatively conventional draining angle. ----------------------------------------------------------------------- Summary of changes: crawl-ref/source/dat/descript/gods.txt | 10 +++++----- crawl-ref/source/god-wrath.cc | 14 +++++++++++++- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/crawl-ref/source/dat/descript/gods.txt b/crawl-ref/source/dat/descript/gods.txt index 10a8e61f65..1adff973a0 100644 --- a/crawl-ref/source/dat/descript/gods.txt +++ b/crawl-ref/source/dat/descript/gods.txt @@ -577,11 +577,11 @@ stripped away from them. Kikubaaqudgha wrath Kikubaaqudgha's wrath brings forth all the dread powers of necromancy. Victims -may witness the devastating Sign of Ruin form upon themselves, or be drained -without any respect for their negative energy resistance. Furthermore, -Kikubaaqudgha's gifts become tainted: the dead rise again as foes, and those -that attempt to use necromantic magic to fend off wrath will find it backfiring -on them when least expected. +may witness the devastating Sign of Ruin form upon themselves, or both doomed +and drained without any respect for their negative energy resistance. +Furthermore, Kikubaaqudgha's gifts become tainted: the dead rise again as foes, +and those that attempt to use necromantic magic to fend off wrath will find it +backfiring on them when least expected. %%%% Lugonu wrath diff --git a/crawl-ref/source/god-wrath.cc b/crawl-ref/source/god-wrath.cc index c547a1d2eb..994eea0b1d 100644 --- a/crawl-ref/source/god-wrath.cc +++ b/crawl-ref/source/god-wrath.cc @@ -650,7 +650,19 @@ static bool _kikubaaqudgha_retribution() _reset_avatar(*avatar); } else - drain_player(random_range(125, 225), false, true, false); + { + // Drain for ~16.6% to ~26.6% if you're not below 50% drained hp. + if (-you.hp_max_adj_temp < you.hp_max / 2) + drain_player(random_range(75, 150), false, true, false); + + // Regardless of draining, apply some Doom. + int doom_pow = random_range(35, 50); + + if (!(you.attribute[ATTR_DOOM] + doom_pow >= 100)) + mprf(MSGCH_DANGER, "Your doom draws closer."); + + you.doom(doom_pow); + } return true; } -- Dungeon Crawl Stone Soup |
From: <gi...@cr...> - 2025-07-22 22:05:14
|
via 2e3327b29e69bd22a3ced2d9ad79ca744aa0995a (commit) from 7a1bca78f6c3cc33677fc845cd9c1200de8175b4 (commit) ----------------------------------------------------------------------- commit 2e3327b29e69bd22a3ced2d9ad79ca744aa0995a Author: gammafunk <gam...@gm...> Date: Tue Jul 22 17:01:50 2025 -0500 Fix a typo in option defaults ----------------------------------------------------------------------- Summary of changes: crawl-ref/source/dat/defaults/misc.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crawl-ref/source/dat/defaults/misc.txt b/crawl-ref/source/dat/defaults/misc.txt index 5b2e782772..df032ebd66 100644 --- a/crawl-ref/source/dat/defaults/misc.txt +++ b/crawl-ref/source/dat/defaults/misc.txt @@ -26,6 +26,6 @@ unusual_monster_items = wand unusual_monster_items += disto,chaos unusual_monster_items += curare,atropa,datura,dispersal,disjunction unusual_monster_items += throwing net -unusual_monster_teism += vulnerable:holy_wrath +unusual_monster_items += vulnerable:holy_wrath # For regular items and artefacts unusual_monster_items += reflect,Reflect -- Dungeon Crawl Stone Soup |
From: <gi...@cr...> - 2025-07-22 16:40:15
|
via 7a1bca78f6c3cc33677fc845cd9c1200de8175b4 (commit) from 4655a737c75a96a0cc7baaa3e52fa3d57b2162c5 (commit) ----------------------------------------------------------------------- commit 7a1bca78f6c3cc33677fc845cd9c1200de8175b4 Author: WizardIke <ik...@ya...> Date: Wed Jul 23 04:36:02 2025 +1200 Fix tele trap + stash tracker interaction (#4613) When moving into a teleport trap, If you revealed an item just before the trap was set off, the item would be missing from the stash tracker and its description when you examined the square that is was in would say it was the floor. This was because the map knowledge (which can be used to quickly lookup the top item the player remembers in any square) and the stash tracker (which stores all rememberd items) were getting updated at different times and were becoming out of sync. ----------------------------------------------------------------------- Summary of changes: crawl-ref/source/main.cc | 4 ---- crawl-ref/source/mon-death.cc | 1 + crawl-ref/source/player.cc | 5 ----- crawl-ref/source/spl-transloc.cc | 1 - crawl-ref/source/stairs.cc | 2 -- crawl-ref/source/view.cc | 11 ++++++++--- crawl-ref/source/wiz-dgn.cc | 3 +++ crawl-ref/source/wiz-item.cc | 3 --- crawl-ref/source/xom.cc | 4 ---- 9 files changed, 12 insertions(+), 22 deletions(-) diff --git a/crawl-ref/source/main.cc b/crawl-ref/source/main.cc index a4866d2c2b..508644b0f7 100644 --- a/crawl-ref/source/main.cc +++ b/crawl-ref/source/main.cc @@ -2480,7 +2480,6 @@ static void _prep_input() viewwindow(); update_screen(); // ??? - maybe_update_stashes(); if (check_for_interesting_features() && you.running.is_explore()) stop_running(); @@ -2563,9 +2562,6 @@ void world_reacts() update_screen(); } - // prevent monsters wandering into view and picking up an item before - // our next prep_input - maybe_update_stashes(); update_monsters_in_view(); reset_show_terrain(); diff --git a/crawl-ref/source/mon-death.cc b/crawl-ref/source/mon-death.cc index 8dee26a8a0..7502819d1e 100644 --- a/crawl-ref/source/mon-death.cc +++ b/crawl-ref/source/mon-death.cc @@ -3450,6 +3450,7 @@ item_def* monster_die(monster& mons, killer_type killer, if (in_bounds(mwhere) && you.see_cell(mwhere)) { view_update_at(mwhere); + StashTrack.update_stash(mwhere); update_screen(); } diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc index 4ff137ba01..4b8e73bcab 100644 --- a/crawl-ref/source/player.cc +++ b/crawl-ref/source/player.cc @@ -646,7 +646,6 @@ void moveto_location_effects(dungeon_feature_type old_feat, bool was_running = you.running; update_monsters_in_view(); - maybe_update_stashes(); if (check_for_interesting_features() && you.running.is_explore()) stop_running(); @@ -7996,10 +7995,6 @@ bool player::do_shaft() return false; } - // Ensure altars, items, and shops discovered at the moment - // the player gets shafted are correctly registered. - maybe_update_stashes(); - down_stairs(DNGN_TRAP_SHAFT); return true; diff --git a/crawl-ref/source/spl-transloc.cc b/crawl-ref/source/spl-transloc.cc index ed18cb608c..e349dba1db 100644 --- a/crawl-ref/source/spl-transloc.cc +++ b/crawl-ref/source/spl-transloc.cc @@ -1091,7 +1091,6 @@ static bool _teleport_player(bool wizard_tele, bool teleportitis, // (like picking up/dropping an item). viewwindow(); update_screen(); - StashTrack.update_stash(you.pos()); if (player_in_branch(BRANCH_ABYSS) && !wizard_tele) { diff --git a/crawl-ref/source/stairs.cc b/crawl-ref/source/stairs.cc index 0c8bb41a7c..cd899bc974 100644 --- a/crawl-ref/source/stairs.cc +++ b/crawl-ref/source/stairs.cc @@ -1123,8 +1123,6 @@ void floor_transition(dungeon_feature_type how, // There's probably a reason for this. I don't know it. if (going_up) seen_monsters_react(); - else - maybe_update_stashes(); autotoggle_autopickup(false); request_autopickup(); diff --git a/crawl-ref/source/view.cc b/crawl-ref/source/view.cc index 6ce6546092..fd1a96356e 100644 --- a/crawl-ref/source/view.cc +++ b/crawl-ref/source/view.cc @@ -1473,12 +1473,17 @@ void viewwindow(bool show_updates, bool tiles_only, animation *a, view_renderer if (!is_map_persistent()) ash_detect_portals(false); - // TODO: why on earth is this called from here? It seems like it - // should be called directly on changing location, or something - // like that... if (you.on_current_level) + { + // TODO: why on earth is this called from here? It seems like it + // should be called directly on changing location, or something + // like that... show_init(_layers); + if (show_updates) + maybe_update_stashes(); + } + #ifdef USE_TILE tile_draw_floor(); tile_draw_map_cells(); diff --git a/crawl-ref/source/wiz-dgn.cc b/crawl-ref/source/wiz-dgn.cc index 42a0bf285a..faaeaf85d8 100644 --- a/crawl-ref/source/wiz-dgn.cc +++ b/crawl-ref/source/wiz-dgn.cc @@ -344,7 +344,10 @@ bool wizard_create_feature(dist &target, dungeon_feature_type feat, bool mimic) env.level_map_mask(pos) |= MMT_MIMIC; if (you.see_cell(pos)) + { view_update_at(pos); + StashTrack.update_stash(pos); + } } while (targeting_mode && target.isEndpoint); return true; diff --git a/crawl-ref/source/wiz-item.cc b/crawl-ref/source/wiz-item.cc index 868e17fedb..93de323aae 100644 --- a/crawl-ref/source/wiz-item.cc +++ b/crawl-ref/source/wiz-item.cc @@ -222,9 +222,6 @@ void wizard_create_spec_object() if (class_wanted != OBJ_CORPSES) origin_acquired(env.item[thing_created], AQ_WIZMODE); canned_msg(MSG_SOMETHING_APPEARS); - - // Tell the stash tracker. - maybe_update_stashes(); } } diff --git a/crawl-ref/source/xom.cc b/crawl-ref/source/xom.cc index 1cfe969691..d7a539887c 100644 --- a/crawl-ref/source/xom.cc +++ b/crawl-ref/source/xom.cc @@ -5435,13 +5435,11 @@ static void _xom_good_teleport(int /*sever*/) { count++; you_teleport_now(); - maybe_update_stashes(); more(); if (one_chance_in(10) || count >= 7 + random2(5)) break; } while (x_chance_in_y(3, 4) || player_in_a_dangerous_place()); - maybe_update_stashes(); // Take a note. const string note = make_stringf("%d-stop teleportation journey%s", count, @@ -5466,13 +5464,11 @@ static void _xom_bad_teleport(int /*sever*/) do { you_teleport_now(); - maybe_update_stashes(); more(); if (count++ >= 7 + random2(5)) break; } while (x_chance_in_y(3, 4) && !player_in_a_dangerous_place()); - maybe_update_stashes(); // Take a note. const string note = make_stringf("%d-stop teleportation journey%s", count, -- Dungeon Crawl Stone Soup |
From: <gi...@cr...> - 2025-07-22 14:05:17
|
via 4655a737c75a96a0cc7baaa3e52fa3d57b2162c5 (commit) from 4fc8f02bfa39827397055988515b67ff3ca55e0c (commit) ----------------------------------------------------------------------- commit 4655a737c75a96a0cc7baaa3e52fa3d57b2162c5 Author: DracoOmega <dra...@gm...> Date: Tue Jul 22 11:31:43 2025 -0230 Improve message for failing a reaching attack (Midn8) ----------------------------------------------------------------------- Summary of changes: crawl-ref/source/quiver.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crawl-ref/source/quiver.cc b/crawl-ref/source/quiver.cc index 394e75c9fa..9459a95c01 100644 --- a/crawl-ref/source/quiver.cc +++ b/crawl-ref/source/quiver.cc @@ -698,7 +698,7 @@ namespace quiver if (mons->wont_attack()) { // Let's assume friendlies cooperate. - mpr("You could not reach far enough!"); + mprf("You fail to reach past %s.", mons->name(DESC_THE).c_str()); you.time_taken = attack_delay; you.turn_is_over = true; return; -- Dungeon Crawl Stone Soup |
From: <gi...@cr...> - 2025-07-22 13:25:11
|
via 4fc8f02bfa39827397055988515b67ff3ca55e0c (commit) via dbd2f4b8c060380bc8d59ec69a30aea0192dc57b (commit) via f9775fd51fe3878c43635c7d5d9fa0acd03a33b7 (commit) via e90cadbcb8f0cc142a6890a646eb6b130b59ad46 (commit) via 5d75d46d45b505725b9357c564b7d6a098626e1a (commit) via e02c2b2bd47e38273f95c7b2855e43783a19ae70 (commit) via 71121d73083e7990fc9f998d1267559f973b1be6 (commit) via 9293a925f68b232922f3ae264e51006b2183b0ca (commit) from 561764f35a2c1a202ac98321f5b5af6fc4d2b119 (commit) ----------------------------------------------------------------------- commit 4fc8f02bfa39827397055988515b67ff3ca55e0c Author: DracoOmega <dra...@gm...> Date: Tue Jul 22 10:43:34 2025 -0230 Give a more helpful message when the player is trapped behind allies The situation where a player cannot swap with their allies is a rare one, but often confusing when it happens (usually due to a pileup of zombies that cannot cross deep water and a player who can). Try to give a more specific message, along with a helpful suggestion. (While it ordinarily would not be ideal to give the player advice instead of solving a problem directly, I don't think it would be appropriate for swapping to behave differently in this specific scenario than all others - eg: by blinking the monster away or displacing the entire crowd backwards - especially when it's easy to miss that one has gotten into this situation in the first place.) commit dbd2f4b8c060380bc8d59ec69a30aea0192dc57b Author: DracoOmega <dra...@gm...> Date: Tue Jul 22 10:06:30 2025 -0230 Improve wording of Bane artprop slightly (Flugkiller) commit f9775fd51fe3878c43635c7d5d9fa0acd03a33b7 Author: DracoOmega <dra...@gm...> Date: Tue Jul 22 10:06:11 2025 -0230 Prefer not to remove a Bane item when gear is forced off In the same way that ^Drain and ^Contam were already handled. commit e90cadbcb8f0cc142a6890a646eb6b130b59ad46 Author: DracoOmega <dra...@gm...> Date: Tue Jul 22 10:49:41 2025 -0230 Change 'i' menu hotkey behavior yet again (Acrobat) Instead of 'first match below the cursor' do 'first match within the current sub-section in which the cursor is located'. (ie: if the player is hovering a potion, (c) will first select a potion on (c), if one exists, regardless of whether the cursor is below it. I apologize for how unstable the interface has been these past few days, but I hope we're narrowing in on a stable final version of everything now. commit 5d75d46d45b505725b9357c564b7d6a098626e1a Author: DracoOmega <dra...@gm...> Date: Tue Jul 22 10:25:19 2025 -0230 Allow ',' to work on all pages of the drop menu at once (particleface) If the player wants to drop all useless items, they can do so without needing to cycle through pages at all. (The implementation is a little hacky - as perhaps this all is - but hopefully still clear and functional enough.) commit e02c2b2bd47e38273f95c7b2855e43783a19ae70 Author: DracoOmega <dra...@gm...> Date: Tue Jul 22 10:05:41 2025 -0230 Allow monster_unusual_items to hilight dangerous brands in some scenarios Holy wrath weapons are wildly more dangerous than other brands against those they work on, and remain dangerous even into lategame. But they are also harmless to most characters, making including them in monster_unusual_items awkward. Some players have resorted to custom lua to add/remove holy wrath from that list depending on what they're playing, but it feels like this should be supported by default, so I have made the following simple addition to the option: "vulnerable:" followed by the name of a brand can now be used to mark a monster as unusual only while non-immune to this brand. Additionally, it can optionally be used to specify an XL above which to stop marking the monster. For instance, "vulnerable:holy_wrath" will hilight monsters with holy wrath weapons, only while the player is vulnerable to them. "vulnerable:venom:5" will hilight monsters with venom weapons while the player is non-immune to them and XL 5 or below. While unnoticed venom weapons are a common souce of earlygame deaths, the threshold at which they stop mattering is subjective enough that I have not set this by default, but "vulnerable:holy_wrath" now *is* default, since they are always very dangerous (moreso than most default-marked items, in fact!) commit 71121d73083e7990fc9f998d1267559f973b1be6 Author: DracoOmega <dra...@gm...> Date: Mon Jul 21 23:18:59 2025 -0230 New command: CMD_EXPLORE_NO_REST Causes the player to autoexplore *without* resting for their HP/MP/status to heal, even if those options are normally set to true. This is useful in multiple situations where the player is just a little injured, but wants to capitalize on temporary statuses like Animate Dead / Death Channel or temporary god allies, rather than rest up and let those expire. This sort of thing happens somewhat commonly to certain characters and typically means having to manually explore for a while (even if you don't otherwise care where you go), so I think this might be helpful. ...it's not currently bound to anything since I'm genuinely unsure what reasonable default keybind is still available (I'm open to suggestions!) Though perhaps it's somewhat risky to end up anywhere it could be hit by accident since it is a button that bypasses normal 'safeties'? commit 9293a925f68b232922f3ae264e51006b2183b0ca Author: DracoOmega <dra...@gm...> Date: Mon Jul 21 18:40:17 2025 -0230 Change spelling for consistency All other player-facing places apparently use 'evocable items' even if the codebase itself tends to prefer 'evokable' ----------------------------------------------------------------------- Summary of changes: crawl-ref/source/adjust.cc | 2 +- crawl-ref/source/command-type.h | 1 + crawl-ref/source/dat/defaults/misc.txt | 1 + crawl-ref/source/dat/descript/commands.txt | 12 ++++++++++ crawl-ref/source/describe.cc | 2 +- crawl-ref/source/externs.h | 1 + crawl-ref/source/initfile.cc | 33 +++++++++++++++++++++++++++- crawl-ref/source/invent.cc | 16 ++++++++++++++ crawl-ref/source/invent.h | 1 + crawl-ref/source/items.cc | 35 ++++++++++++++++++++++++++++++ crawl-ref/source/main.cc | 1 + crawl-ref/source/menu.cc | 27 +++++++++++++++++------ crawl-ref/source/menu.h | 2 +- crawl-ref/source/options.h | 3 +++ crawl-ref/source/player-equip.cc | 6 +++-- crawl-ref/source/player.cc | 8 ++++--- crawl-ref/source/travel.cc | 24 +++++++++++++++----- crawl-ref/source/travel.h | 4 ++-- 18 files changed, 155 insertions(+), 24 deletions(-) diff --git a/crawl-ref/source/adjust.cc b/crawl-ref/source/adjust.cc index 8db16402ab..a0a2113e17 100644 --- a/crawl-ref/source/adjust.cc +++ b/crawl-ref/source/adjust.cc @@ -24,7 +24,7 @@ static void _adjust_ability(); void adjust() { mprf(MSGCH_PROMPT, "Adjust (g)ear, (s)pells, (a)bilities, " - "(p)otions, sc(r)olls or e(v)okables? "); + "(p)otions, sc(r)olls or e(v)ocables? "); const int keyin = toalower(get_ch()); diff --git a/crawl-ref/source/command-type.h b/crawl-ref/source/command-type.h index 318f7704df..3d89bb3395 100644 --- a/crawl-ref/source/command-type.h +++ b/crawl-ref/source/command-type.h @@ -114,6 +114,7 @@ enum command_type CMD_SEARCH_STASHES, CMD_EXPLORE, + CMD_EXPLORE_NO_REST, CMD_INTERLEVEL_TRAVEL, CMD_FIX_WAYPOINT, diff --git a/crawl-ref/source/dat/defaults/misc.txt b/crawl-ref/source/dat/defaults/misc.txt index 63034c74e2..5b2e782772 100644 --- a/crawl-ref/source/dat/defaults/misc.txt +++ b/crawl-ref/source/dat/defaults/misc.txt @@ -26,5 +26,6 @@ unusual_monster_items = wand unusual_monster_items += disto,chaos unusual_monster_items += curare,atropa,datura,dispersal,disjunction unusual_monster_items += throwing net +unusual_monster_teism += vulnerable:holy_wrath # For regular items and artefacts unusual_monster_items += reflect,Reflect diff --git a/crawl-ref/source/dat/descript/commands.txt b/crawl-ref/source/dat/descript/commands.txt index dff8c8e893..b040774a2e 100644 --- a/crawl-ref/source/dat/descript/commands.txt +++ b/crawl-ref/source/dat/descript/commands.txt @@ -19,6 +19,18 @@ Automatically explores the current level, collecting items on the way. Exploration stops as soon as a hostile monster comes into view, or when you encounter new items or features. %%%% +CMD_EXPLORE_NO_REST + +Autoexplore the current level without resting first +%%%% +CMD_EXPLORE_NO_REST + +Automatically explores the current level, collecting items on the way. +Exploration stops as soon as a hostile monster comes into view, or when you +encounter new items or features. Unlike CMD_EXPLORE, will treat +explore_auto_rest as if it were false and explore_auto_rest_status as if it were +empty. +%%%% CMD_INTERLEVEL_TRAVEL Travel to distant levels diff --git a/crawl-ref/source/describe.cc b/crawl-ref/source/describe.cc index 1094894d5c..9fdca3be43 100644 --- a/crawl-ref/source/describe.cc +++ b/crawl-ref/source/describe.cc @@ -451,7 +451,7 @@ static const vector<property_descriptor> & _get_all_artp_desc_data() "It may silence you when you take damage.", prop_note::plain }, { ARTP_BANE, - "It inflicts you with a random bane when first equipped.", + "It inflicts you with a random bane when you equip it.", prop_note::plain }, }; return data; diff --git a/crawl-ref/source/externs.h b/crawl-ref/source/externs.h index b6f76ffd54..9dc958b5ea 100644 --- a/crawl-ref/source/externs.h +++ b/crawl-ref/source/externs.h @@ -173,6 +173,7 @@ public: coord_def pos; int direction; int turns_passed; + bool skip_autorest; FixedVector<run_check_dir,3> run_check; // array of grids to check diff --git a/crawl-ref/source/initfile.cc b/crawl-ref/source/initfile.cc index 075faf32f1..eb3d9dc4e1 100644 --- a/crawl-ref/source/initfile.cc +++ b/crawl-ref/source/initfile.cc @@ -600,7 +600,8 @@ const vector<GameOption*> game_options::build_options_list() #endif ), - new ListGameOption<text_pattern>(SIMPLE_NAME(unusual_monster_items), {}, true), + new ListGameOption<text_pattern>(SIMPLE_NAME(unusual_monster_items), {}, true, + {[this]() { process_unusual_items(); }}), new BoolGameOption(SIMPLE_NAME(arena_dump_msgs), false), new BoolGameOption(SIMPLE_NAME(arena_dump_msgs_all), false), @@ -3119,6 +3120,36 @@ void game_options::update_consumable_shortcuts() } } +// Extract 'vulnerable brand' options from unusual_monster_items +void game_options::process_unusual_items() +{ + for (int i = (int)unusual_monster_items.size() - 1; i >= 0; --i) + { + text_pattern& pattern = unusual_monster_items[i]; + string str = pattern.tostring(); + + if (!starts_with(str, "vulnerable:")) + continue; + + vector<string> splits = split_string(":", str, true, true, -1, true); + + if (splits.size() >= 2) + { + int brand = str_to_ego(OBJ_WEAPONS, splits[1]); + if (brand <= 0) + continue; + + int xl = 27; + if (splits.size() >= 3) + parse_int(splits[2].c_str(), xl); + + vulnerable_brand_warning.push_back({static_cast<brand_type>(brand), xl}); + } + + unusual_monster_items.erase(unusual_monster_items.begin() + i); + } +} + void game_options::update_use_animations() { static const std::map<const string, use_animation_type> ANIMATION_TYPES = diff --git a/crawl-ref/source/invent.cc b/crawl-ref/source/invent.cc index eb88157d80..1d6d059788 100644 --- a/crawl-ref/source/invent.cc +++ b/crawl-ref/source/invent.cc @@ -485,6 +485,22 @@ bool InvMenu::process_command(command_type cmd) return Menu::process_command(cmd); } +void InvMenu::select_index(int index, int qty) +{ + // XXX: Apply drop_filter to all pages at once. + if (flags & MF_PAGED_INVENTORY && qty == MENU_SELECT_ALL) + { + int start_osel = cur_osel; + do + { + Menu::select_index(index, qty); + cycle_page(1); + } while (cur_osel != start_osel); + } + else + Menu::select_index(index, qty); +} + string InvMenu::get_select_count_string(int) const { if (flags & MF_PAGED_INVENTORY) diff --git a/crawl-ref/source/invent.h b/crawl-ref/source/invent.h index af663e06d8..683e1e7a2f 100644 --- a/crawl-ref/source/invent.h +++ b/crawl-ref/source/invent.h @@ -178,6 +178,7 @@ protected: virtual bool skip_process_command(int keyin) override; virtual bool is_selectable(int index) const override; virtual string help_key() const override; + void select_index(int index, int qty) override; protected: menu_type type; diff --git a/crawl-ref/source/items.cc b/crawl-ref/source/items.cc index b2a5ca8f87..07fd5741b2 100644 --- a/crawl-ref/source/items.cc +++ b/crawl-ref/source/items.cc @@ -750,8 +750,43 @@ bool item_is_branded(const item_def& item) } } +static bool _immune_to_brand(brand_type brand) +{ + switch (brand) + { + case SPWPN_HOLY_WRATH: + return !you.holy_wrath_susceptible(); + + case SPWPN_VENOM: + return you.res_poison() == 3; + + case SPWPN_DRAINING: + case SPWPN_PAIN: + return you.res_negative_energy() == 3; + + case SPWPN_ELECTROCUTION: + return you.res_elec() >= 1; + + default: + return false; + } +} + bool item_is_unusual(const item_def& item) { + if (item.base_type == OBJ_WEAPONS) + { + for (auto& match : Options.vulnerable_brand_warning) + { + if (get_weapon_brand(item) == match.first + && you.experience_level <= match.second + && !_immune_to_brand(match.first)) + { + return true; + } + } + } + const auto &patterns = Options.unusual_monster_items; const string name = item.name(DESC_A, false, false, true, false); diff --git a/crawl-ref/source/main.cc b/crawl-ref/source/main.cc index dc4e252131..a4866d2c2b 100644 --- a/crawl-ref/source/main.cc +++ b/crawl-ref/source/main.cc @@ -2315,6 +2315,7 @@ void process_command(command_type cmd, command_type prev_cmd) case CMD_INTERLEVEL_TRAVEL: do_interlevel_travel(); break; case CMD_ANNOTATE_LEVEL: do_annotate(); break; case CMD_EXPLORE: do_explore_cmd(); break; + case CMD_EXPLORE_NO_REST: do_explore_cmd(true); break; // Mouse commands. case CMD_MOUSE_MOVE: diff --git a/crawl-ref/source/menu.cc b/crawl-ref/source/menu.cc index 3b77de488e..37e7729a91 100644 --- a/crawl-ref/source/menu.cc +++ b/crawl-ref/source/menu.cc @@ -2192,12 +2192,25 @@ int Menu::hotkey_to_index(int key, bool primary_only) // Process all items, in case user hits hotkey for an // item not on the current page. - // We first check for the first matching hotkey from the cursor's current - // position to the end of the menu. If no match is found, we next check from - // the start of the menu to the current position. (This means that in cases - // where a menu has multiple entries with the same letter, we will select - // the first one below the cursor, if one exists, and then wrap around if not.) - for (int i = max(0, last_hovered); i < final; ++i) + // We first check for the first matching hotkey, starting from the top of + // the current menu subsection the cursor is in. If no match is found, we + // next check from the start of the menu to the current position. (This + // means that in cases where a menu has multiple entries with the same + // letter, we will select one within the current subsection, if one exists, + // and then check elsewhere if not.) + + // First, determine the top of our current section. + int top = 0; + for (int i = last_hovered; i >= 0; --i) + { + if (items[i]->level != MEL_ITEM) + { + top = i; + break; + } + } + + for (int i = top; i < final; ++i) { if (is_hotkey(i, key) && (!primary_only || items[i]->hotkeys[0] == key)) @@ -2205,7 +2218,7 @@ int Menu::hotkey_to_index(int key, bool primary_only) return i; } } - for (int i = 0; i < last_hovered; ++i) + for (int i = 0; i < top; ++i) { if (is_hotkey(i, key) && (!primary_only || items[i]->hotkeys[0] == key)) diff --git a/crawl-ref/source/menu.h b/crawl-ref/source/menu.h index 07e65d6585..63538da166 100644 --- a/crawl-ref/source/menu.h +++ b/crawl-ref/source/menu.h @@ -473,7 +473,7 @@ protected: void deselect_all(bool update_view = true); virtual void select_items(int key, int qty = MENU_SELECT_INVERT); // XX why is the default invert? virtual void select_item_index(int idx, int qty = MENU_SELECT_INVERT); - void select_index(int index, int qty = -1); + virtual void select_index(int index, int qty = -1); virtual bool examine_index(int i); bool examine_by_key(int keyin); int hotkey_to_index(int key, bool primary_only); diff --git a/crawl-ref/source/options.h b/crawl-ref/source/options.h index d474e1c534..07c9a6fb47 100644 --- a/crawl-ref/source/options.h +++ b/crawl-ref/source/options.h @@ -554,6 +554,8 @@ public: vector<text_pattern> unusual_monster_items; // which monster items to // highlight as unusual + vector<pair<brand_type, int>> vulnerable_brand_warning; // Monster brands to hilight the monster + // as having, below a given XL, while vulnerable int hp_warning; // percentage hp for danger warning int magic_point_warning; // percentage mp for danger warning @@ -1009,6 +1011,7 @@ private: void remove_force_ability_targeter(const string &s); void update_consumable_shortcuts(); + void process_unusual_items(); static const string interrupt_prefix; diff --git a/crawl-ref/source/player-equip.cc b/crawl-ref/source/player-equip.cc index dcdfa38165..054505b901 100644 --- a/crawl-ref/source/player-equip.cc +++ b/crawl-ref/source/player-equip.cc @@ -836,12 +836,14 @@ static bool _forced_removal_goodness(player_equip_entry* entry1, player_equip_en else if (is_artefact(item2) && artefact_property(item2, ARTP_FRAGILE)) return true; else if (is_artefact(item1) && (artefact_property(item1, ARTP_CONTAM) - || artefact_property(item1, ARTP_DRAIN))) + || artefact_property(item1, ARTP_DRAIN) + || artefact_property(item1, ARTP_BANE))) { return false; } else if (is_artefact(item2) && (artefact_property(item2, ARTP_CONTAM) - || artefact_property(item2, ARTP_DRAIN))) + || artefact_property(item2, ARTP_DRAIN) + || artefact_property(item2, ARTP_BANE))) { return true; } diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc index 55e5d30d5b..4ff137ba01 100644 --- a/crawl-ref/source/player.cc +++ b/crawl-ref/source/player.cc @@ -505,9 +505,11 @@ bool swap_check(monster* mons, coord_def &loc, bool quiet) if (!swap && !quiet) { - // Might not be ideal, but it's better than insta-killing - // the monster... maybe try for a short blink instead? - bwr - simple_monster_message(*mons, " cannot make way for you."); + // Might not be ideal, but it's better than insta-killing the monster. + mprf("There is no room for %s to move out of your way! " + "(Try telling them to retreat with <w>%sr</w> instead.)", + mons->name(DESC_THE).c_str(), + command_to_string(CMD_SHOUT).c_str()); // FIXME: activity_interrupt::hit_monster isn't ideal. interrupt_activity(activity_interrupt::hit_monster, mons); } diff --git a/crawl-ref/source/travel.cc b/crawl-ref/source/travel.cc index 4847b59a18..9d774a0867 100644 --- a/crawl-ref/source/travel.cc +++ b/crawl-ref/source/travel.cc @@ -1096,14 +1096,19 @@ command_type travel() return CMD_NO_CMD; } - if (Options.explore_auto_rest && !you.is_sufficiently_rested() - || you.duration[DUR_NO_MOMENTUM]) + if (you.duration[DUR_NO_MOMENTUM] + || (Options.explore_auto_rest && !you.running.skip_autorest + && !you.is_sufficiently_rested()) + ) { return CMD_WAIT; } for (unsigned int i = 0; i < Options.explore_auto_rest_status.size(); ++i) { + if (you.running.skip_autorest) + break; + duration_type type = Options.explore_auto_rest_status[i]; if (you.duration[type] == 0) @@ -1135,8 +1140,11 @@ command_type travel() return CMD_WAIT; } - if (Options.explore_auto_rest_contam && you.magic_contamination) + if (Options.explore_auto_rest_contam && you.magic_contamination + && !you.running.skip_autorest) + { return CMD_WAIT; + } // Exploring. if (env.grid(you.pos()) == DNGN_ENTER_SHOP @@ -3415,7 +3423,7 @@ void start_travel(const coord_def& p) start_translevel_travel(level_target); } -void start_explore(bool grab_items) +void start_explore(bool grab_items, bool skip_autorest) { if (Hints.hints_explored) Hints.hints_explored = false; @@ -3436,15 +3444,16 @@ void start_explore(bool grab_items) env.map_seen.set(*ri); you.running.pos.reset(); + you.running.skip_autorest = skip_autorest; _start_running(); } -void do_explore_cmd() +void do_explore_cmd(bool skip_autorest) { if (you.berserk()) mpr("Calm down first, please."); else // Start exploring - start_explore(Options.explore_greedy); + start_explore(Options.explore_greedy, skip_autorest); } ////////////////////////////////////////////////////////////////////////// @@ -4595,6 +4604,7 @@ void runrest::initialise(int dir, int mode) notified_mp_full = false; notified_ancestor_hp_full = false; turns_passed = 0; + skip_autorest = false; if (dir == RDIR_REST) { @@ -4731,6 +4741,7 @@ void runrest::stop(bool clear_delays) (runmode > 0 || runmode < 0 && Options.travel_delay == -1); _userdef_run_stoprunning_hook(); runmode = RMODE_NOT_RUNNING; + skip_autorest = false; // Kill the delay; this is fine because it's not possible to stack // run/rest/travel on top of other delays. @@ -4803,6 +4814,7 @@ void runrest::clear() notified_hp_full = false; notified_mp_full = false; notified_ancestor_hp_full = false; + skip_autorest = false; } ///////////////////////////////////////////////////////////////////////////// diff --git a/crawl-ref/source/travel.h b/crawl-ref/source/travel.h index 19807a6d1e..b7f63c147b 100644 --- a/crawl-ref/source/travel.h +++ b/crawl-ref/source/travel.h @@ -89,8 +89,8 @@ bool is_stair_exclusion(const coord_def &p); * grabs items that are eligible for autopickup and visits (previously * unvisited) shops. */ -void start_explore(bool grab_items = false); -void do_explore_cmd(); +void start_explore(bool grab_items = false, bool skip_autorest = false); +void do_explore_cmd(bool skip_autorest = false); struct level_pos; class level_id; -- Dungeon Crawl Stone Soup |